web-dev-qa-db-fra.com

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

J'utilise une installation plus ou moins standard d'Ubuntu Precise 12.04 et je suis assez satisfait de faire la tâche de tous les jours avec l'environnement de bureau Unity.

Cependant, quand il s'agit de jouer, je me sens beaucoup plus à l'aise avec LXDE (contexte: dans son état actuel, Unity permet d'obtenir des cadences de prise de vue beaucoup plus basses que, par exemple, Unity 2D ou LXDE - c'est un bogue connu et en cours de traitement).

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

Pour aller plus loin, quand je suis invité à me connecter après le démarrage, je souhaite que seul LXDE apparaisse en option pour le profil utilisateur du joueur sur l'écran de connexion, alors que mon profil utilisateur standard doit toujours avoir la possibilité de choisir quel environnement de bureau utiliser.

Merci d'avance pour toute idée qui pourrait être utile!

8
FuzzyQ

D'accord, d'après ma compréhension de LightDM (le gestionnaire de connexion), il ne semble pas pris en charge de 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 d’en choisir un autre, ils seront connectés à leur profil par défaut.

Vous pouvez toutefois faire en sorte que l'utilisateur ne puisse pas le changer. Cet utilisateur pourra toujours sélectionner un environnement de bureau différent, mais s'il le fait, cela ne changera pas leurs paramètres par défaut. Je pense que c'est le moyen le plus sûr de le faire, si vous ne craignez pas que la personne le change. Tout ce que vous avez à faire est d’éditer leur fichier .dmrc (situé dans leur répertoire personnel, c’est-à-dire/home/utilisateur). C'est là que leur session par défaut est stockée. Remplacez la variable Session de ce fichier par tout ce que vous voulez, c'est-à-dire que ubuntu est le DE par défaut, ubuntu-2d est le Unity 2D et LXDE est le LXDE. Pour que cela ne change pas s'ils se connectent à un autre DE, nous pouvons simplement le rendre immuable (non modifiable):

Sudo chattr +i /home/user/.dmrc

Désormais, personne ne pourra modifier ce fichier (root et les 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 de le faire à vos risques et périls) pour y parvenir. Je m'ennuyais un peu et cela semblait être une chose amusante à essayer. Tous les différents DE que LightDM peut voir sont conservés dans les fichiers /usr/share/xsessions en tant que .desktop. Pour votre information, vous pouvez supprimer tout ce que vous ne voulez pas voir apparaître à l'écran de connexion (mais cela le supprimera pour TOUS les utilisateurs). Si vous ouvrez l'un d'entre eux, ils sont assez simples. Ce sont des fichiers de base du programme de lancement de bureau, tout comme tous les raccourcis sur votre bureau. Chacune contient une ligne Exec, qui est exécutée lorsque vous choisissez votre DE à l’écran de connexion (c’est-à-dire quel DE est lancé). Nous allons en tirer parti 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 fichier .desktop dans /usr/share/xsessions/, vous devrez créer un script dans /usr/local/bin. Pour mon exemple, je montrerai comment faire cela pour ubuntu.desktop, qui est le DE Unity, et en utilisant LXDE en tant que DE, nous forçons notre utilisateur restreint (utilisateur restreint). En regardant LXDE.desktop, nous pouvons voir que la commande Exec est /usr/bin/startlxde et qu’il n’ya pas de commande TryExec. Lorsque vous ouvrez ubuntu.desktop, nous voyons que la commande Exec est gnome-session --session=ubuntu et que la commande TryExec est unity. La commande TryExec est exactement ce à quoi elle ressemble. Après avoir exécuté la commande Exec, il essaiera d’exécuter la commande TryExec, mais en cas d’échec, il ne se plantera pas.

Maintenant, en prenant les commandes que nous avons obtenues à partir des fichiers .desktop, nous pouvons créer nos scripts. Nous les mettrons dans /usr/share/bin. Nous devrons en faire deux, un pour le Exec et un pour le TryExec. Nous ferons 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 vérifions simplement si la personne qui se connecte est notre utilisateur restreint et allumons 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.desktop afin qu'il appelle nos scripts, au lieu des DE réels. Mettez en commentaire les lignes Exec et TryExec du 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 a pas TryExec pour un DE, il n'est pas nécessaire de créer un script detry.sh pour ce dernier non plus, car LXDE n'utilise pas un TryExec. De toute évidence, il s’agit d’un peu compliqué, et vous devez sauvegarder tous les fichiers avant de les éditer, mais cela fonctionnera si vous devez absolument vous assurer que l’utilisateur se connecte au bon DE.

4
reverendj1

sur Debian Squeeze et Wheezy, vous pouvez également ajouter un fichier .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 utilisateur de l'utilisateur pour forcer un certain type de session, quel que soit le choix de l'utilisateur.

Devrait également fonctionner sur Ubuntu.

(Consultez le fichier /etc/X11/Xsession.d/40x11-common_xsessionrc et 50x11-common_determine-startup pour savoir pourquoi cela fonctionne.)

1
Peter

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

Une autre solution au problème:
1. Sauvegarde de tous les fichiers /usr/share/xsessions/.desktop
2. Supprimez tous les fichiers /usr/share/xsessions/
.desktop
3. Ne créez que /usr/share/xsessions/default.desktop avec

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

#!/bin/bash

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

Si par exemple un autre utilisateur devrait être autorisé à démarrer un gestionnaire de bureau complet, il 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

0
egodigitus