Comment restreindre un utilisateur à un environnement de bureau spécifique?

8

J'exécute une installation plus ou moins standard d'Ubuntu Precise 12.04 et je suis assez satisfait de faire des tâches quotidiennes avec l'environnement de bureau Unity.

En ce qui concerne le jeu, cependant, je me sens beaucoup plus à l'aise avec LXDE (arrière-plan: dans son état actuel, Unity a des fréquences d'images beaucoup plus faibles que par exemple Unity 2D ou LXDE - c'est un bug connu et en cours d'élaboration).

À cette fin, j'ai créé un profil d'utilisateur de joueur et maintenant je veux le limiter à utiliser uniquement l'environnement de bureau LXDE.

Pour approfondir cela: lorsqu'on me demande de me connecter après le démarrage, je veux que seul LXDE apparaisse comme une option pour le profil d'utilisateur de joueur sur l'écran de connexion tandis que mon profil d'utilisateur standard devrait toujours avoir la possibilité de choisir l'environnement de bureau à utiliser.

Merci d'avance pour toute information qui pourrait être utile!

FuzzyQ
la source
Il devrait conserver votre dernier choix comme valeur par défaut pour la prochaine fois. Ne fait-il pas cela? Y a-t-il une raison pour laquelle vous ne voulez pas les autres options, si elles étaient par défaut dans l'environnement de bureau correct?
reverendj1
J'ai également remarqué ce comportement après avoir posé la question. En gros, c'est déjà ce que je voulais et pourquoi j'ai demandé. En dehors de cela, je suis toujours intéressé par une solution - j'ai besoin d'en savoir plus sur les groupes et les autorisations ''), je suis très surpris que cela semble être un énorme problème. Est-ce impossible à réaliser?
FuzzyQ

Réponses:

4

D'accord, d'après ma compréhension de LightDM (le gestionnaire de connexion), il ne semble pas pris en charge pour restreindre les environnements de bureau pour un utilisateur spécifique . C'est un accord tout ou rien. Par défaut, lorsqu'un utilisateur choisit un environnement de bureau, celui-ci deviendra son environnement de bureau par défaut. Lors de leur prochaine connexion, à moins qu'ils n'en choisissent un autre, ils seront connectés à leur valeur par défaut.

Vous pouvez cependant faire en sorte que l'utilisateur ne puisse pas changer cela. Cet utilisateur pourra toujours sélectionner un autre environnement de bureau, mais s'il le fait, cela ne changera pas sa valeur par défaut. Je crois que c'est la façon la plus sûre de le faire, si vous n'êtes pas inquiet que la personne le change. Il vous suffit de modifier leur .dmrcfichier (situé dans leur répertoire personnel, c'est-à-dire / home / user). C'est là que leur session par défaut est stockée. Remplacez la Sessionvariable de ce fichier par ce que vous voulez, c'est ubuntu-à- dire par défaut Unity DE, ubuntu-2dUnity 2D et LXDELXDE. Pour que cela ne soit pas modifié s'ils se connectent avec un autre DE, nous pouvons simplement le rendre immuable (immuable):

sudo chattr +i /home/user/.dmrc

Désormais, personne ne pourra modifier ce fichier (root et autres programmes inclus) à moins que vous ne supprimiez l'indicateur immuable:

sudo chattr -i /home/user/.dmrc

Si vous ne voulez absolument PAS que cet utilisateur se connecte avec un autre DE, j'ai trouvé un moyen vraiment hacky (c'est-à-dire le faire à vos risques et périls) pour y parvenir. J'étais un peu ennuyé et cela semblait être une chose amusante à essayer. Tous les différents DE que LightDM peut voir sont conservés /usr/share/xsessionssous forme de .desktopfichiers. Pour info, vous pouvez supprimer ceux que vous ne souhaitez pas voir apparaître sur l'écran de connexion (mais cela le supprimera pour TOUS les utilisateurs). Si vous ouvrez l'un d'eux, ils sont assez simples. Ce sont des fichiers de lancement de bureau de base, tout comme tous les raccourcis sur votre bureau. Chacun contient unExec, ce qui est exécuté lorsque vous choisissez votre DE dans l'écran de connexion (c'est-à-dire quel DE est lancé). Nous allons en profiter et vérifier quel utilisateur se connecte. Si l'utilisateur est notre utilisateur restreint, nous le forcerons à utiliser un certain DE.

Tout d'abord, pour chaque .desktopfichier, /usr/share/xsessions/vous devrez créer un script dans /usr/local/bin. Pour mon exemple, je vais montrer comment faire cela ubuntu.desktop, qui est le DE Unity, et en utilisant LXDE comme DE, nous forçons notre utilisateur restreint (utilisateur restreint) à l'utiliser. En regardant LXDE.desktop, nous pouvons voir que la Execcommande est /usr/bin/startlxdeet il n'y a pas de TryExeccommande. Lorsque vous ouvrez, ubuntu.desktopnous voyons que la Execcommande est gnome-session --session=ubuntuet la TryExeccommande est unity. La TryExeccommande est exactement ce que cela ressemble. Après avoir exécuté la Execcommande, il essaiera d'exécuter la TryExeccommande, mais s'il échoue, il ne se bloquera pas.

Maintenant, en prenant ces commandes que nous avons obtenues des .desktopfichiers, nous pouvons créer nos scripts. Nous allons les mettre /usr/share/bin. Nous devrons en faire deux, un pour le Execet un pour le TryExec. Nous allons faire quelque chose comme ça:

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

Nous testons simplement si la personne qui se connecte est notre utilisateur restreint et tirons le DE approprié. Maintenant, nous devons nous assurer qu'ils sont exécutables:

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

Nous devons maintenant changer notre ubuntu.desktopafin qu'il appelle nos scripts, au lieu des DE réels. Mettez en commentaire les lignes Execet TryExecdans le fichier et remplacez-les par ceci:

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

Répétez simplement le processus pour tout autre DE que vous pourriez avoir. S'il n'y en a pas TryExecpour un DE, il n'est pas nécessaire non plus de créer un script detry.sh pour lui, car LXDE n'utilise pas de TryExec. Évidemment, c'est un peu hacky, et vous devez vous assurer de sauvegarder tous les fichiers avant de les modifier, mais cela fonctionnera si vous devez absolument vous assurer qu'un utilisateur se connecte au bon DE.

reverendj1
la source
1
Tout d'abord: merci pour votre réponse élaborée! C'est une approche assez astucieuse. Mais si je comprends bien cette dernière partie, cela forcera l'utilisateur restreint à se connecter à lxde, quelle que soit l'option qu'il a choisie dans lightdm . Mais il affichera toujours toutes les autres options répertoriées dans / usr / share / xsessions /, est-ce que je comprends bien? Dans ce cas, je préfère opter pour l'option 1. C'est dommage qu'il n'y ait pas d'option spécifique à l'utilisateur pour configurer des sessions d'environnement de bureau. Supprimer des xsessions indésirables d'un dossier utilisateur serait à la fois pratique et simple.
FuzzyQ
1
Je vous en prie. J'ai en quelque sorte pris cela comme un défi, et j'ai voulu approfondir davantage LightDM. À droite, l'utilisateur verra toujours toutes les autres options, cela n'a pas d'importance, car ils seront obligés d'utiliser LXDE. Comme je l'ai dit, le fichier .dmrc est là pour conserver les valeurs par défaut spécifiques à l'utilisateur, mais oui, il n'y a pas de moyen intégré pour forcer un utilisateur à utiliser uniquement certains DE, ou restreindre ceux qu'ils peuvent voir / utiliser. C'est tout le monde ou personne, sans le hack que j'ai présenté.
reverendj1
1

sur Debian Squeeze et Wheezy, vous pouvez également ajouter un .xsessionrc avec une seule ligne

export STARTUP = XXX

(où XXX est votre script de session forcé, voir Exec-Line ci-dessus) dans le répertoire principal de l'utilisateur pour forcer un certain type de session indépendamment de ce que l'utilisateur a choisi.

Devrait également fonctionner sur Ubuntu.

(Jetez un œil dans /etc/X11/Xsession.d/40x11-common_xsessionrc et 50x11-common_determine-startup pour voir pourquoi cela fonctionne)

Peter
la source
0

La réponse de reverendj1 ne fonctionnait pas pour moi. La raison pourrait être que la valeur que vous spécifiez dans Exec = n'est pas exécutée directement, mais transmise à / etc / X11 / Xsession comme argument. (source: https://askubuntu.com/a/857420/873016 )

Une autre solution au problème:
1. Sauvegardez tous / usr / share / xsessions / fichiers .desktop
2. Supprimez tous / usr / share / xsessions /
fichiers .desktop
3. Créer uniquement avec /usr/share/xsessions/default.desktop

[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" est un mot clé pour Xsession et recherchera la session spécifique dans le répertoire de l'utilisateur.
4. Créez maintenant un fichier /home/{username}/.xsession pour chaque nom d'utilisateur. Pour une application "de type kiosque", cela devrait ressembler à ceci:

#!/bin/bash

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

Si, par exemple, un autre utilisateur doit être autorisé à démarrer un gestionnaire de bureau complet, cela pourrait ressembler à ceci:

#!/bin/bash

exec icewm-session
  1. Assurez-vous que le fichier ~ / .xsession est exécutable
sudo chmod +x ~/.xsession

Testé sur Ubuntu 16.04 avec lightdm

egodigitus
la source