Come posso limitare un utente a un ambiente desktop specifico?


8

Sto eseguendo un'installazione più o meno standard di Ubuntu Precise 12.04 e sono abbastanza soddisfatto di fare attività quotidiane con l'ambiente desktop Unity.

Quando si tratta di suonare, tuttavia, mi sento molto più a mio agio con LXDE (in background: nello stato attuale, Unity archivia framerate molto più basse rispetto ad esempio a Unity 2D o LXDE - è un bug noto e su cui si sta lavorando).

A tale scopo ho creato un profilo utente giocatore e ora voglio limitarlo all'uso solo dell'ambiente desktop LXDE.

Per approfondire ulteriormente questo aspetto: quando mi viene chiesto di accedere dopo l'avvio, voglio solo che LXDE appaia come un'opzione per il profilo utente del giocatore nella schermata di accesso, mentre il mio profilo utente standard dovrebbe avere ancora l'opzione per scegliere quale ambiente desktop usare.

Grazie in anticipo per qualsiasi intuizione che possa essere di aiuto!


Dovrebbe mantenere la tua ultima scelta come predefinita per la prossima volta. Non sta facendo questo? C'è un motivo per cui non desideri le altre opzioni, se l'impostazione predefinita è l'ambiente desktop corretto?
reverendj1

Ho notato questo comportamento anche dopo aver posto la domanda. Fondamentalmente, è già quello che volevo e perché l'ho chiesto. A parte questo, sono ancora interessato a una soluzione - ho bisogno di saperne di più su gruppi e permessi '') Sono molto sorpreso che questo sembra essere un problema così grande. È impossibile da realizzare?
FuzzyQ,

Risposte:


4

D'accordo, dalla mia comprensione di LightDM (il gestore degli accessi) non sembra supportato limitare gli ambienti desktop per un utente specifico . È un affare tutto o niente. Per impostazione predefinita, quando un utente sceglie un ambiente desktop, questo diventerà il suo ambiente desktop predefinito. Quando effettueranno l'accesso la prossima volta, a meno che non ne scelgano un altro, verranno collegati ai valori predefiniti.

Tuttavia, puoi farlo in modo che l'utente non possa modificarlo. Questo utente sarà comunque in grado di selezionare un ambiente desktop diverso, ma se lo fa, non cambierà il suo valore predefinito. Credo che questo sia il modo più sicuro per farlo, se non sei preoccupato che la persona lo cambi. Tutto quello che devi fare è modificare il loro .dmrcfile (situato nella loro directory home, cioè / home / user). Qui è dove è memorizzata la loro sessione predefinita. Modificare la Sessionvariabile in quel file come desiderato, ovvero ubuntuUnity DE predefinito, ubuntu-2dUnity 2D ed LXDELXDE. Per farlo in modo che questo non venga modificato se accedono con un altro DE, possiamo semplicemente renderlo immutabile (immutabile):

sudo chattr +i /home/user/.dmrc

Ora nessuno sarà in grado di modificare quel file (inclusi root e altri programmi) a meno che non si rimuova il flag immutabile:

sudo chattr -i /home/user/.dmrc

Se NON vuoi assolutamente che questo utente acceda mai con un altro DE, ho trovato un modo davvero confuso (cioè farlo a tuo rischio e pericolo) per ottenere questo risultato. Ero un po 'annoiato e questa sembrava una cosa divertente da provare. Tutti i diversi DE che LightDM può vedere sono conservati /usr/share/xsessionscome .desktopfile. Cordiali saluti, è possibile eliminare uno di questi che non si desidera visualizzare nella schermata di accesso (ma che lo rimuoverà per TUTTI gli utenti). Se apri uno di questi, sono abbastanza semplici. Sono file di base per l'avvio del desktop, proprio come tutti i collegamenti sul desktop. Ognuno contiene unExeclinea, che è ciò che viene eseguito quando si sceglie il proprio DE nella schermata di accesso (ovvero quale DE viene avviato). Ne approfitteremo e verificheremo quale utente sta effettuando l'accesso. Se l'utente è il nostro utente con restrizioni, li forzeremo a utilizzare un determinato DE.

Innanzitutto, per ogni .desktopfile in /usr/share/xsessions/cui dovrai creare uno script /usr/local/bin. Per il mio esempio, mostrerò come farlo per ubuntu.desktop, che è l'Unity DE, e usando LXDE come DE che stiamo costringendo al nostro utente con restrizioni (utente limitato). Guardando LXDE.desktop, possiamo vedere che il Execcomando è /usr/bin/startlxdee non c'è nessun TryExeccomando. Quando apri ubuntu.desktopvediamo che il Execcomando è gnome-session --session=ubuntue il TryExeccomando è unity. Il TryExeccomando è proprio come sembra. Dopo aver eseguito il Execcomando, proverà a eseguire il TryExeccomando, ma se non riesce non si arresterà in modo anomalo.

Ora, prendendo quei comandi che abbiamo ottenuto dai .desktopfile, possiamo creare i nostri script. Li inseriremo /usr/share/bin. Dovremo fare due, uno per il Exece uno per il TryExec. Faremo qualcosa del genere:

ubuntude.sh

#!/bin/bash

if [ `/usr/bin/whoami` = "restricteduser" ] ; then
   /usr/bin/startlxde
else
   gnome-session --session=ubuntu
fi

ubuntudetry.sh

#!/bin/bash

if [ `/usr/bin/whoami` != "restricteduser" ] ; then
   unity
fi

Stiamo solo verificando se la persona che effettua l'accesso è il nostro utente limitato e accendiamo il DE appropriato. Ora, dobbiamo assicurarci che siano eseguibili:

sudo chmod +x /usr/local/bin/ubuntude.sh
sudo chmod +x /usr/local/bin/ubuntudetry.sh

Ora dobbiamo cambiare il nostro in ubuntu.desktopmodo che chiamerà i nostri script, anziché i DE effettivi. Commentare le Exece TryExecrighe nel file, e sostituirli con questo:

Exec=/usr/local/bin/ubuntude.sh
TryExec=/usr/local/bin/ubuntudetry.sh

Ripeti la procedura per tutti gli altri DE che potresti avere. Se non esiste TryExecun DE, allora non è necessario creare nemmeno uno script detry.sh, poiché LXDE non utilizza a TryExec. Ovviamente questo è un po 'confuso e dovresti assicurarti di eseguire il backup di tutti i file prima di modificarli, ma funzionerà se devi assolutamente assicurarti che un utente acceda al DE corretto.


1
Prima di tutto: grazie per la tua elaborata risposta! Questo è un approccio piuttosto astuto. Ma se ottengo l'ultima parte giusta, costringerà l'utente limitato ad accedere a lxde, indipendentemente dall'opzione che ha scelto in lightdm . Ma mostrerà comunque tutte le altre opzioni elencate in / usr / share / xsessions /, sto ottenendo questo giusto? In questo caso, preferirei andare con l'opzione 1. È un peccato che non ci siano opzioni specifiche dell'utente per impostare sessioni di ambiente desktop. Rimuovere xsession indesiderate da una cartella utente sarebbe utile e semplice.
FuzzyQ,

1
Prego. In un certo senso l'ho preso come una sfida, e avevo intenzione di approfondire LightDM. Bene, l'utente vedrà comunque tutte le altre opzioni, non importa, poiché saranno costretti a usare LXDE. Come ho detto, il file .dmrc è lì per mantenere le impostazioni predefinite specifiche dell'utente, ma sì, non esiste un modo integrato per forzare un utente a usare solo determinati DE o limitare quelli che possono vedere / usare. Sono tutti o nessuno, senza l'hack che ho presentato.
reverendj1,

1

su Debian Squeeze e Wheezy puoi anche aggiungere un .xsessionrc con una sola riga

esportazione STARTUP = XXX

(dove XXX è il tuo script di sessione forzato vedi Exec-Line sopra) nella home directory dell'utente per forzare un certo tipo di sessione indipendentemente da ciò che l'utente ha scelto.

Dovrebbe funzionare anche su Ubuntu.

(Dai un'occhiata a /etc/X11/Xsession.d/40x11-common_xsessionrc e 50x11-common_determine-startup per vedere, perché funziona)


0

La risposta di reverendj1 non funzionava per me. Il motivo potrebbe essere che il valore specificato in Exec = non viene eseguito direttamente, ma passato a / etc / X11 / Xsession come argomento. (fonte: https://askubuntu.com/a/857420/873016 )

Un'altra soluzione al problema:
1. Eseguire il backup di tutti i file / usr / share / xsessions / .desktop
2. Eliminare tutti i file / usr / share / xsessions /
.desktop
3. Creare solo /usr/share/xsessions/default.desktop con

[Desktop Entry]
Name=Default
Comment=This session is the default session. It will look up the user specific desktop session in ~/.xsession.
Exec=default

"default" è una parola chiave per Xsession e cercherà la sessione specifica nella directory dell'utente.
4. Ora crea un file /home/{username}/.xsession per ogni nome utente. Per un'app "simile a un chiosco", dovrebbe apparire così:

#!/bin/bash

cd /home/{yourUsername}/ && ./startApplication.py
logout

Se ad esempio un altro utente dovesse essere autorizzato ad avviare un desktop manager completo, potrebbe apparire così:

#!/bin/bash

exec icewm-session
  1. Assicurarsi che il file ~ / .xsession sia eseguibile
sudo chmod +x ~/.xsession

Testato su ubuntu 16.04 con lightdm

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.