Appunti su Gentoo Linux.
Il Desktop Manager Xfce

Accanto ai classici Desktop Manager come KDE e GNOME da qualche tempo sta prendendo piede XFCE, un desktop manager semplice, veloce e soprattutto che risparmia risorse di sistema. Una scelta obbligata per chi ha hardware datato ma non vuole rinunciare alle comodità di un moderno desktop manager oppure per chi ama non sprecare risorse di sistema.

Un link molto utile: Dispositivi rimovibili in XFCE

Installazione

Ragionevolmente le use flag da abilitare sono: dbus, thunar, lock, session, startup-notification, extras, policykit, consolekit, pam, device_mapper, gdu, exif. Si presuppone inoltre che X sia stato già configurato e funzionante così come il supporto dbus, anche se quest'ultimo non è strettamente necessario.

L'installazione è composta da un meta-ebuild, xfce4-meta e da decine di altri ebuild opzionali.

emerge xfce4-meta

Abilitare alcuni servizi fondamentali all'avvio

rc-update add dbus default
rc-update add consolekit default

Aggiungere gli utenti ai gruppi di interesse

gpasswd -a utente usb (permette di usare periferiche usb come stampanti...)
gpasswd -a utente cdrom (permette di avere accesso in lettura al lettore dischi)
gpasswd -a utente cdrw (permette di avere accesso in scrittura al lettore dischi)
??? (non esiste più il gruppo plugdev per avere accesso al montaggio delle
pennette usb ecc...!)

Due parole su ConsoleKit e PolicyKit. Entrambi questi software servono per gestire i permessi speciali sotto Linux. Per esempio servono a gestire i permessi per far spegnere il pc a un utente normale. Il comando ck-launch-session serve a lanciare una sessione di ConsoleKit. In Xfce serve per l'automounting, lo spegnimento del pc, il riavvio del pc, il power management ecc...

Lanciare Xfce e far funzionare l'automount dei dispositivi rimovibili

La gestione dei dispositivi rimovibili avviene tramite una serie di programmi e regole. Principalmente policykit/consolekit e udisks. Questi programmi sono già installati se avete seguito la guida sopra, cioè avete abilitato le use flag giuste. Prima di continuare ricordate che è FONDAMENTALE eliminare ogni riga che richiama il cd/dvd/usb dal file /etc/fstab. Altrimenti non vi comparirà neanche l'icona sul desktop del cd o della pennetta quando lo inserite. Poi dovete aggiungere gli utenti al gruppo cdrom e cdrw (il primo per la lettura, il secondo per la scrittura).

Per lanciare Xfce prima di tutto dovete renderlo il desktop manager di default. Per farlo:

/etc/env.d/90xsession
XSESSION="Xfce4"

Ora se volete che Xfce sia lanciato quando farete il login nel vostro login manager grafico (che ancora dobbiamo installare) allora non dovete fare nient'altro. Lo stesso accade se usate Qingy come login manager (che consiglio caldamente).

Se invece volete lanciare Xfce manualmente dovete usare il comando startx. Come sapete il comando startx esegue uno solo dei seguenti file, in ordine: 1. .xinitrc nella vostra home; 2. il file /etc/X11/xinit/xinitrc.

Se volete usare il file .xinitrc della vostra home apritelo (o createlo se non esiste) e scriveteci:

exec ck-launch-session startxfce4

Il comando ck-launch-session serve ad aprire una sessione di ConsoleKit. Una già si apre quando entrate in console, ma non è sufficiente. Ne serve una per l'ambiente X. Il comando startxfce4 lancia invece una sessione dbus e fa partire Xfce.

Se invece volete usare il file globale xinitrc dovete sapere come si comporta. Il file xinitrc di default usato in Gentoo esegue, in ordine alfabetico, i file presenti nella directory /etc/X11/xinit/xinitrc.d/ dopodiché esegue il file /etc/X11/chooser.sh. Questo script controlla se avete specificato la variabile XSESSION come indicato sopra ed esegue il corrispondente script che si trova in /etc/X11/Sessions/. Se tale variabile non è stata settata allora xinitrc prosegue e lancia alcuni programmini grafici molto semplici (il gestore di finestre twm, xterm e xclock).

Da quanto abbiamo visto, purché i file nella directory /etc/X11/xinit/xinitrc.d/ non diano fastidio, per avere una configurazione globale per lanciare Xfce è sufficiente fare in modo che il file di sessione /etc/X11/Sessions/Xfce4 contenga le righe

ck-launch-session
startxfce4

Purtroppo però di default la prima riga manca! E va aggiunta a mano.

Oltretutto i file presenti in /etc/X11/xinit/xinitrc.d/ interferiscono perché lanciano le sessioni dbus e ConsoleKit nell'ordine sbagliato. Pertanto per ora conviene lasciare perdere la configurazione globale "pulita", a meno che cancelliate a mano i file dentro /etc/X11/xinit/xinitrc.d/ e modifichiate il file di sessione Xfce4 come descritto sopra.

Per far partire Xfce in maniera globale NON create uno script apposito tipo:

exec ck-launch-session startxfce4

perché creerebbe molti problemi con policykit (sessioni non attive, e quindi non potrete fare l'automount di pennette usb e cd)! O lo script lo fate molto più complicato, oppure dovete usare startx (o un link simbolico a startx).

Come unica soluzione per ora non resta che usare il file della vosta home .xinitrc. Consiglio di creare un link simbolico a startx

cd /usr/bin/
ln -s startx x

Quindi per lanciare Xfce dovrò semplicemente digitare x e dare invio.

Per informazione, l'uso di particolari eseguibili che solitamente sono solo per l'amministratore è regolata dalle regole di policykit. Quando vi loggate in console il comando ck-list-sessions mostra una sola sessione attiva a vostro nome.

Session1:
	unix-user = '1000'
	realname = 'Francesco Biccari'
	seat = 'Seat1'
	session-type = ''
	active = TRUE
	x11-display = ''
	x11-display-device = ''
	display-device = '/dev/tty1'
	remote-host-name = ''
	is-local = TRUE
	on-since = '2011-08-10T15:47:13.666535Z'
	login-session-id = '1'

Notate le righe active = TRUE e is-local = TRUE. Sono due cose fondamentali per capire le regole policykit. Nel momento che lanciate X da riga di comando, per esempio tramite startx, quello che otterrete lanciando ck-list-sessions sono due sessioni. La sessione lanciata nel momento che vi siete loggati nella console sarà ora active = FALSE e is-local = TRUE e la nuova sessione, lanciata dal comando ck-launch-session che abbiamo messo nel file .xinitr, avrà le righe: active = TRUE e is-local = TRUE.

Per montare i dischi Xfce usa il comando udisks:

udisks --mount /dev/sr0

Le regole policykit per udisks si trovano in /usr/share/polkit-1/actions/. (già uno pensava di averle dentro /etc ...!!!) Il file che ci interessa è org.freedesktop.udisks.policy e le righe di interesse sono tutte quelle del tipo

<allow_inactive>no</allow_inactive>
<allow_active>yes</allow_active>

Come vedete le operazioni per le sessioni inactive sono proibite! Quindi se avrete problemi a montare dei dispositivi assicuratevi che le sessioni siano ATTIVE!

Qingy

Tutti questi problemi nel lanciare Xfce possono essere ignorati se si usa Qingy come login manager. Pensa a tutto lui.

Programmi dedicati e plugin

Esistono diversi programmi specifici per XFCE. Tra quelli installati di default e fondamentali per l'uso di XFCE c'è il file manager Thunar (installato perché abbiamo abilitato la use flag thunar che serve al gestore del desktop per far comparire le icone sul desktop).

Ecco alcuni programmi del progetto XFCE fortemente consigliati:

# emulatore di terminale
emerge terminal

# editor di testo
app-editors/gedit

# archive manager (installare rar, unrar, zip, unzip, p7zip)
emerge xarchiver
# plugin per thunar 
emerge thunar-archive-plugin

# font
emerge corefonts
emerge liberation-fonts
emerge terminus-font

# visualizzatore di immagini
emerge geeqie

# web browser (ricordatevi di cambiare l'identificazione
# del browser in safari!!!)
emerge midori

# gestione dispositivi removibili in thunar
emerge thunar-volman

# icone con anteprima in thunar
xfce-extra/tumbler

# panel plugin per il controllo della email
xfce-extra/xfce4-mailwatch-plugin

# panel plugin per il controllo impostazioni audio
# ATTENZIONE! Dipende da GStreamer.
xfce-extra/xfce4-mixer

# panel plugin per monitoraggio rete
xfce-extra/xfce4-netload-plugin

# panel plugin per creare un menu ad avvio veloce
xfce-extra/xfce4-quicklauncher-plugin

# applicazione per fare gli screenshot
xfce-extra/xfce4-screenshooter

# panel plugin per monitoraggio sensori
xfce-extra/xfce4-sensors-plugin

# panel plugin per monitoraggio del carico del sistema
xfce-extra/xfce4-systemload-plugin

# applicazione task manager
xfce-extra/xfce4-taskmanager

# applicazione per la stampa
emerge xfprint

Altre applicazioni si possono installare separatamente, perché non sempre necessaria o perché se ne potrebbero preferire delle altre per gli stessi compiti. Tra questi xfburn, un programma di masterizzazione, Ristretto, un visualizzatore di immagini molto più semplice rispetto a geeqie, Parole un media player (vi potrebbe interessare VLC o smplayer).

Per quanto riguarda Midori, è un browser giovane ma veramente ben fatto. Come motore usa Webkit, lo stesso di Chrome. Un must per macchina vecchiotte (su quelle veramente vecchie usate links e basta) ma fortemente consigliato anche a chi può permettersi di far girare browser più pesanti in termini di risorse. A tal proposito vi risulterà molto utile il sito www.linkagogo.com/go/Convert in cui potete inserire i vostri bookmarks di Firefox in formato html (li trovate nella vostra home dentro una serie di cartelle) per poterli trasformare in un file con formato xbel, l'unico capito da Midori. Fateglielo importare, chiudete Midori, riapritelo e vedrete tutti i vostri vecchi bookmark al loro posto.

Eatmonkey è un download manager (basato su aria2). Gigolo è un gestore di risorse remote. font-manager è un font manager molto carino (ancora non è presente in portage).

Il power management

Uno delle più comuni fonti di confusione è la gestione del power management (shutdown, reboot, ecc...). Infatti i problemi tipici sono due: o il pc è un server e ogni utente ha la possibilità di spegnere il server (!) oppure il pc è per uso singolo e non avete la possibilità di spegnere il pc.

Xfce negli ultimi tempi ha cambiato ripetutamente il sistema per gestire i permessi per lo spegnimento/riavvio/ecc... Dalla versione 4.8 viene usato PolicyKit.

PolicyKit permette di specificare quali AZIONI è possibile autorizzare a certi gruppi di utenti o meno. Queste impostazioni si possono regolare con dei file letti in ordine alfabetico nella directory /etc/polkit-1/. Per le azioni a disposizione si può usare il comando pkaction.

Supponiamo di creare il file /etc/polkit-1/localauthority/50-local.d/40-power.pkla in cui vogliamo mettere le impostazioni per lo spegnimento e il riavvio. Le voci dovranno avere questa sintassi:

[Titolo - possiamo scrivere ciò che vogliamo]
Identity=... # A chi si riferisce la regola
ResultAny=
ResultInactive=
ResultActive=

Ed ecco il file vero e proprio.

[Local restart]
Identity=unix-group:users
Action=org.freedesktop.consolekit.system.restart
ResultAny=yes
ResultInactive=no
ResultActive=yes

[Local shutdown]
Identity=unix-group:users
Action=org.freedesktop.consolekit.system.stop
ResultAny=yes
ResultInactive=no
ResultActive=yes

[Local restart - multiple]
Identity=unix-group:users
Action=org.freedesktop.consolekit.system.restart-multiple-users
ResultAny=yes
ResultInactive=no
ResultActive=yes

[Local shutdown - multiple]
Identity=unix-group:users
Action=org.freedesktop.consolekit.system.stop-multiple-users
ResultAny=yes
ResultInactive=no
ResultActive=yes

Ora se tutto è andato per il verso giusto, quando cliccate su logout i bottoni "pericolosi" come shutdown, reboot, suspend, hibernate saranno disabilitati o scomparsi. Rimarrà solamente logout.

Analogamente se ne può creare un altro per i permessi per montare i dispositivi rimovibili nel caso le impostazioni di default non vadano bene.

DBUS

Quando viene montata una periferica in automatico, cioè viene creato il nodo, esso ha il nome standard dato dal kernel: sda1 ecc... Spesso si vorrebbe dare un nome personalizzato, soprattutto con i dispositivi che si attaccano spesso al proprio PC (la propria penna USB, ecc...), magari quello già assegnato alle regole UDEV. Per fare questo basta che vengono usate le solite regole UDEV che si sono messe in 10-local.rules modificandole però in modo che non si crei solo un SYMLINK con il nome voluto, ma proprio il nodo. (NAME=="...") Controllare che venga creata la cartella /media. All'interno di questa verranno creati i nodi quando montati.

DBUS è un protocollo che serve per far parlare le applicazioni fra di loro. È piuttosto utile e bisogna abilitare la use flag. Ricompilare emerge -pDvNu world E infine mettere al runlevel di default l'avvio del demono dbus che si occupa di instradare i messaggi dei vari programmi rc-update add dbus default.