Salta al contenuto principale
Configurare XRDP con XFCE

Configurare XRDP con XFCE

Intelligenza artificialeProgrammazione


« Torna al blog

Desktop remoto XRDP con XFCE e clipboard condivisa su Ubuntu.

Cos'è un desktop remoto e cosa configureremo

Un "desktop remoto" permette di usare l'interfaccia grafica di un computer Linux da un altro dispositivo, come se si fosse seduti davanti a quel computer: si vedono le finestre, si muove il mouse, si digita sulla tastiera, il tutto attraverso la rete. È molto comodo per gestire un server che non ha un monitor collegato, per esempio un VPS in un datacenter.

Su Windows il protocollo standard per farlo si chiama RDP (Remote Desktop Protocol). Per far "parlare" un server Linux con i client RDP si usa xrdp, un server che traduce l'RDP in una sessione grafica Linux. In questa guida vedremo, passo per passo, come configurare: il server xrdp, l'ambiente desktop XFCE, il gestore di login LightDM e — soprattutto — la clipboard condivisa, cioè il copia/incolla che funziona fra il proprio computer e il server.

Perché XFCE (e non GNOME)

XFCE è un ambiente desktop: l'insieme di finestre, barra delle applicazioni, menu e impostazioni che formano la "scrivania". Di ambienti desktop ne esistono diversi; i più noti sono GNOME (quello predefinito su Ubuntu) e XFCE.

La scelta di XFCE non è casuale. GNOME è curato ma "pesante": consuma molta memoria e si appoggia parecchio all'accelerazione grafica della scheda video. Su un server, però, di solito la scheda video non c'è: tutto il disegno a schermo lo fa la CPU. In quelle condizioni GNOME diventa lento e a scatti. XFCE invece è leggero, usa poca memoria e gira bene anche senza GPU: perfetto per un desktop remoto su un server. In cambio rinuncia a qualche effetto grafico, che su un collegamento di rete conta comunque poco.

Installazione

Si installano il server, l'ambiente desktop e il gestore di login in un colpo solo:

sudo apt install xrdp xorgxrdp tigervnc-standalone-server \
                 xfce4 xfce4-session xfce4-goodies \
                 lightdm lightdm-gtk-greeter

In questo elenco LightDM è il display manager, cioè la schermata di login grafica che chiede utente e password; xrdp è il server che riceve le connessioni RDP.

Dare a xrdp l'accesso al certificato TLS

Ogni connessione RDP è cifrata con un certificato TLS (la stessa tecnologia che rende sicuri i siti "https"). Il file con la chiave privata è leggibile solo dai membri di un gruppo di sistema chiamato ssl-cert. Perché xrdp possa usarlo, il suo utente di servizio va aggiunto a quel gruppo; senza questo passaggio il login rimane spesso bloccato su una schermata nera:

sudo adduser xrdp ssl-cert

Scegliere XFCE come sessione

Bisogna indicare a xrdp quale desktop avviare quando qualcuno si collega. Lo si fa in coda al file /etc/xrdp/startwm.sh, lo script eseguito a ogni login:

exec dbus-run-session -- startxfce4

e, per sicurezza, indicando XFCE anche nel profilo dell'utente:

echo "xfce4-session" > ~/.xsession

Infine si abilita il servizio, così riparte da solo a ogni riavvio del server:

sudo systemctl enable --now xrdp

La clipboard condivisa (la parte più importante)

La comodità che fa davvero la differenza è poter copiare e incollare fra il proprio computer e il server: si copia un comando dal browser e lo si incolla nel terminale remoto, o viceversa.

Nel mondo RDP la clipboard non è scontata: viaggia su un canale dedicato del protocollo chiamato CLIPRDR (da Clipboard Redirection, "reindirizzamento degli appunti"). Sul server questo canale è gestito da un piccolo programma di xrdp chiamato xrdp-chansrv (channel server): è lui che prende ciò che si copia sul client e lo rende disponibile sul server, e viceversa.

Perché il copia/incolla funzioni nei due sensi — sia dal client al server sia dal server al client, quello che si chiama collegamento bidirezionale — va tolto ogni blocco nella configurazione del session manager di xrdp. Il session manager è il componente (si chiama xrdp-sesman) che si occupa di aprire e gestire le sessioni degli utenti; la sua configurazione è nel file /etc/xrdp/sesman.ini. Nella sezione [Security] si impostano:

RestrictOutboundClipboard=none
RestrictInboundClipboard=none

Qui Outbound è la direzione server → client e Inbound è client → server; mettendo entrambe su none non c'è alcuna restrizione e la clipboard è completa in tutti e due i versi.

Dopo ogni modifica a sesman.ini vanno riavviati entrambi i servizi di xrdp, non solo quello principale:

sudo systemctl restart xrdp xrdp-sesman

C'è però un dettaglio che dà spesso problemi. Deve esistere un solo xrdp-chansrv per ogni sessione grafica. Se ci si scollega e riconnette più volte senza chiudere davvero la sessione, restano in vita dei processi xrdp-chansrv "orfani" che si contendono il canale CLIPRDR: il risultato è il classico copia/incolla che a volte funziona e a volte no. Per rimettere le cose a posto basta chiudere quei processi e riconnettersi:

sudo pkill -f xrdp-chansrv
# alla riconnessione ne viene creato uno solo, pulito

Qualche nota utile:

  • Funziona anche il copia/incolla di immagini dal proprio computer al server (per esempio uno screenshot incollato in un programma sul server): chansrv le trasferisce nel formato image/bmp.
  • Come "storico" degli appunti si può usare xfce4-clipman, il gestore appunti di XFCE, abilitandolo all'avvio automatico (in ~/.config/autostart/); non disturba l'incolla delle immagini.
  • Se qualcosa non torna, lo strumento xclip aiuta a vedere da riga di comando cosa c'è davvero nella clipboard:
xclip -selection clipboard -t TARGETS -out
xclip -selection clipboard -t image/bmp -out > /tmp/clip.bmp

Nella stessa configurazione, sotto la sezione [Chansrv], si può anche attivare la condivisione delle cartelle del client: le unità del proprio computer compaiono come una cartella dentro il server.

FuseMountName=thinclient_drives

(Opzionale) Disabilitare gli effetti grafici se GIMP fa i capricci

XFCE può disegnare ombre e trasparenze delle finestre grazie a una funzione chiamata compositing. Su un server senza scheda video, però, questi effetti sono a volte instabili e alcuni programmi grafici — tipicamente GIMP — possono comportarsi male. In quel caso conviene spegnere il compositing; l'effetto è immediato e non serve riavviare nulla:

xfconf-query -c xfwm4 -p /general/use_compositing -s false

Per riaccenderlo basta rimettere true. In alternativa si lascia acceso il compositing e si avvia solo il programma problematico chiedendogli di disegnare senza accelerazione grafica:

GDK_BACKEND=x11 LIBGL_ALWAYS_SOFTWARE=1 gimp

Consiglio: proteggere tutto con una VPN

RDP non dovrebbe mai essere esposto direttamente su Internet: è un servizio molto preso di mira dagli attacchi automatici. La soluzione consigliata è mettere il server dietro una VPN (una rete privata cifrata, per esempio con OpenVPN) e permettere le connessioni RDP solo dalla rete VPN. In pratica ci si collega prima alla VPN e poi, attraverso di essa, al desktop remoto: la comodità resta identica, ma il servizio non è più raggiungibile — né attaccabile — dal resto di Internet.

Fonti


Supportaci con Buy Me a Coffee.

Buy Me a Coffee