Avviare un window manager differente per ogni utente su Slackware

Se avete installato sul vostro computer gnome o kde la cosa è abbastanza semplice: gdm e kdm vi consentono di selezionare all’inizio quale window manager volete che venga avviato per il vostro utente e, una volta selezionato, il desktop manager ricorderà quella impostazione.

Ma se non avete nè gnome nè kde le utilizzate xdm non vi ritroverete tutte le funzionalità dei due potenti desktop manager.
Innanzitutto è importante sottolineare il fatto che le cose cambiano a seconda del runlevel in cui vi trovate. In runlevel 3 (ossia la modalità testuale, runlevel predefinito in slackware), non dovete far altro che connettervi col vostro utente e lanciare il comando:

xwmconfig

Vi verrà adesso presentata la lista dei desktop manager disponibili, selezionate quello che volete e poi date invio. Questa procedurà creerà un file .xinitrc all’interno della vostra home con le istruzioni per avviare il window manager da voi selezionato. Con il comando:

startx

avvierete il vostro window manager.

Se invece vi trovate in runlevel 4 (ossia la modalità grafica, non predefinito su slackware ma facilmente settabile con una modifica al file /etc/inittab), le cose si fanno un po’ più complicate.

ATTENZIONE: non sono sicuro che questa trovata da me sia la soluzione più pulita in assoluto, anzi, non credo proprio che lo sia. Però funziona e non danneggia sicuramente nulla, quindi potete provarla. Inoltre sono abbastanza oroglioso di questa soluzione visto e considerato che sono riuscito a trovarla da solo senza l’aiuto di forum o chat, significa che dopo due anni sto cominciando a conoscere per bene il sistema. 🙂

Innanzitutto verificate l’uid del vostro utente, aprite un terminale e digitate:

id -u

segnatevi il numero che vi viene restituito. Se invece state cercando l’id utente di un altro utente non dovrete far altro che far seguire il nome dell’utente al comando precedente:

id -u utente

Adesso autenticatevi come root e rimuovete il file /etc/X11/xinit/xinitrc.

su
rm /etc/X11/xinit/xinitrc

Questo file non è altro che un link simbolico creato da xwmconfig (lanciato da root) ad altri file presenti nella cartella /etc/X11/xinit/. Se guardate con attenzione vi accorgerete che ce n’è uno per ogni window manager installato sul vostro sistema.

Ricreiamo il file xinitrc con il nostro editor di testo preferito in questo modo:

# !bin/sh
user=`id -u` # il simbolo ` si ottiene con AltGr+' (apostrofo) e significa: esegui il comando e utilizza il risultato
if [ -n $user -a $user = "ID_UTENTE" ]
then
sh /etc/X11/xinit/xinitrc.WINDOW_MANAGER
else
sh /etc/X11/xinit/xinitrc.WINDOW_MANAGER
fi

Salviamo e chiudiamo. Piccola spiegazione:

La prima riga non fa altro che dire al sistema che quello che sta leggendo è uno script da eseguire. La seconda riga fa sì che il sistema imposti la variabile “user” all’id dell’utente che sta effettuando l’accesso. Quindi parte un if che, a seconda dell’id che sta effettuando l’accesso, esegue uno script xinitrc piuttosto che un altro.

Inutile dire (ma meglio dirlo 😛 ) che ID_UTENTE va sostituito col risultato ottenuto precedentemente col comando id -u, mentre i vari xinitrc.WINDOW_MANAGERx vanno sostituiti con i nomi dei file presenti nella vostra cartella /etc/X11/xinit/xinitrc.

Potete ampliare l’if in modo tale da effettuare più controlli, ad esempio scrivendo:

# !bin/sh
user=`id -u`
if [ -n $user -a $user = "ID_UTENTE1" ]
then
sh /etc/X11/xinit/xinitrc.WINDOW_MANAGER1
elif [ -n $user -a $user = "ID_UTENTE2" -o $user = "ID_UTENTE3" ]
then
sh /etc/X11/xinit/xinitrc.WINDOW_MANAGER3
else
sh /etc/X11/xinit/xinitrc.WINDOW_MANAGER2
fi

Questo script avvierà WINDOW_MANAGER1 quando si connetterà UTENTE1, avvierà WINDOW_MANAGER3 quando si connetterà UTENTE2 o UTENTE3, infine avvierà WINDOW_MANAGER2 quando si connetteranno tutti gli altri utenti.

Adesso non dovete fare altro che dare i permessi di esecuzione al file che avete appena creato:

su
chmod +x /etc/X11/xinit/xinitrc

Un ultima informazione prima di lasciarvi: sulla mia Slackware xfce4 non ne voleva sapere di partire finchè non ho modificato il file xinitrc.xfce. Ad un certo punto c’è un comando che la mia Slackware non digeriva: era ck-launch-session $xfcesm. Se anche voi avete lo stesso problema (potete scoprirlo in runlevel 3, selezionando xfce da xwmconfig e poi lanciando startx e guardando l’output) sostituitelo con exec $xfcesm e tutto quanto dovrebbe funzionare a dovere.

È tutto.