Disons que j'ai 2 comptes d'utilisateurs user1
et user2
. Lorsque je me connecte en tant que user1
, puis passe à l' user2
utilisation su
, je peux exécuter des programmes en ligne de commande, mais les programmes GUI échouent.
Exemple:
user1@laptop:~$ su - user2
user2@laptop:~$ leafpad ~/somefile.txt
No protocol specified
leafpad: Cannot open display:
Alors, comment puis-je exécuter une application GUI?
$XAUTHORITY
est toujours défini sur user1~/.Xauthority
, que le programme, je suppose, essaiera de lire, et il échoue parce que ce fichier a généralement le mode 0600 (-rw-------
), ce qui signifie qu'il n'est pas disponible pour la lecture par n'importe qui dans le groupe "autre", qui inclut user2. Ce qui signifie que si vouschmod o+r ~/.Xauthority
(en tant qu'utilisateur1), vous aurez contourné ce problème. J'ai écrit un script qui le démontre.Réponses:
su vs su -
Lorsque vous devenez un autre utilisateur, vous souhaitez généralement l'utiliser
su - user2
. Le tiret forcera l'utilisateur2.bash_profile
à se trouver.xhost
De plus, vous devrez autoriser les utilisateurs à accéder à votre écran. Ceci est régi par X. Vous pouvez utiliser la commande
xhost +
pour autoriser les autres utilisateurs à afficher les interfaces graphiques sur le bureau de l'utilisateur1.REMARQUE: lors de l'exécution,
xhost +
vous voudrez l'exécuter tout en restant dans un shell qui appartient à user1.$ AFFICHER
Lorsque vous devenez utilisateur2, vous devrez peut-être définir la variable d'environnement
$DISPLAY
.la source
xhost +user2
me donne toujours cette erreur -xhost: bad hostname "user2"
. J'ai googlé certains, et il semble que je doive le fairexhost +user2@laptop
ouxhost +user2@localhost
, je ne sais pas lequel. Ensuite, il ditxhost +user2@localhost being added to access control list
.xhost
et spécifiéexport DISPLAY=:0.0
, l'exécutionleafpad
me donne toujoursNo protocol specified leafpad: Cannot open display:
et ne fonctionne pas. J'ai trouvé ce lien sur linuxquestions.org/questions/linux-newbie-8/… , qui dit qu'il y a des cookies magiques etxauth
. Avez-vous testé que ces choses fonctionnent sur votre ordinateur? Peut-être que quelque chose est différent avec ma configuration? Je suis sur Debian + LXDE.xhost +
marche et rien d'autre ne semble nécessaire (pas besoin de régler$DISPLAY
). Pouvez-vous mettre à jour votre réponse et je l'accepterai?xhost
donne une liste au formatSI:localuser:USERNAME
, donc çaxhost SI:localuser:user2
devrait marcher. Oh et l'affichage de l'utilisateur peut être trouvé en utilisantw
.xhost +
permettra à tout utilisateur de n'importe quel hôte pouvant se connecter à votre x-server d'accéder à votre écran.xhost +SI:localuser:user2
fonctionne pour moi sur Debian.Vous avez besoin de partager l'authentification par jeton de la user1 ( en supposant
~
est la maison de user1 ):la source
tee -a
pour éviter d'altérer toute information existante dans.Xauthority
.Vous pouvez utiliser le transfert X11:
la source
Vous pouvez démarrer l'application à partir d'un autre utilisateur. Je vais démarrer l'application gimp à partir de l'utilisateur2, tout en étant connecté (GUI) avec l'utilisateur 1:
(entrez pass)
Prendre plaisir :)
la source
export DISPLAY
abord, comme le dit la réponse acceptée)$ xhost -
Vous pouvez essayer la commande sux:
sux gérera les trucs $ DISPLAY pour vous. Vous devrez peut-être l'installer avec:
sous Debian / Ubuntu.
la source
sux
n'est plus fourni par Debian ou Ubuntu. La meilleure alternative que j'ai pu trouver est d'ajouterxhost SI:localuser:root
(ou n'importe quel utilisateur) pour~/.xprofile
lui permettre de façon permanente ou pour l'utiliserrunuser
gksu
/gksudo
alternative qui fonctionnait bien. Bien qu'il soit toujours dans Sid, il est supprimé dans Buster pour des problèmes de sécurité.Comme alternative à
sux
, pour exécuter en toute sécurité la commande graphique (firefox-esr
dans l'exemple ci-dessous) comme$AUTHUSER
(guest
dans l'exemple ci-dessous):le code fait:
guest
utilisateur l'accès à votre utilisateur actuel$DISPLAY
viaxhost +SI:localuser:guest
ssh-askpass
pour vous demander graphiquement un mot de passe (bien sûr, vous pouvez utilisersudoers(5)
NOPASSWD:
pour éviter cela, si votre politique de sécurité pense que c'est correct. Ou vous pouvez utiliser d'autresaskpass
programmes, ou les spécifier dans des fichiers de configuration (voirsudo(8)
pour plus de détails--askpass
)sudoers(5)
), il exécute la commande en/usr/bin/firefox-esr
tant qu'un autre utilisateur (guest
)guest
) pour accéder à votre$DISPLAY
sont révoquées viaxhost -SI:localuser:guest
enfin,
sudo -K
supprime le mot de passe mis en cache, donc la prochaine invocation dessh-askpass
vous demandera à nouveau le mot de passe (au lieu d'utiliser le mot de passe mis en cache)alors qu'il est un peu plus de travail que ce
gksu(8)
ou asux(8)
fait, il peut être scripté, et il est beaucoup plus sûr que:xhost +
(tout utilisateur aura accès à votre affichage graphique tant qu'il sera en vigueur)gksu
/sux
fait (copie temporaire de~/.Xauthority
, qui a permis à l'utilisateur spécifié de copier votreMIT-MAGIC-COOKIE-1
et de continuer à utiliser votre écran même après la fin de gksu / sux (tant que vous n'avez pas arrêté la machine ou déconnecté de l'affichage - les économiseurs d'écran, l'hibernation, etc. n'ont pas changé la magie) biscuit).car il n'autorisera qu'un seul utilisateur local à accéder à votre écran, puis uniquement tant que la commande s'exécutera (à la fin de la commande,
$AUTHUSER
ne pourra plus accéder à votre écran de quelque manière que ce soit).Une autre alternative sûre est
ssh -X
(sans-Y
laquelle vous êtes en fait moins sécurisé! VoirForwardX11Trusted
dansssh_config(5)
pour plus de détails), car il est plus facile à utiliser si vous ne l'écrivez pas, mais il induit une surcharge supplémentaire (par exemple, il est plus lent) et certains programmes peuvent ne pas fonctionner correctement sans danger-Y
.la source
Vous devez charger l'interface utilisateur d'installation en tant qu'utilisateur2 .
Essayez de suivre ceci:
Connectez-vous en tant que root :
Testez le serveur x:
Si vous pouvez voir une horloge fonctionner, c'est bon, essayez maintenant d'exécuter ceci:
Le résultat devrait ressembler à ceci:
Maintenant, laissez user2 accéder à xhost
essayez maintenant de vous connecter à nouveau à user2 et essayez d'ouvrir n'importe quel programme GUI.
la source
sudo su
. Utilisezsudo
ousu
; choisissez-en un. (3) La question est rédigée en termes deuser1
etuser2
. Veuillez écrire votre réponse en termes deuser1
etuser2
. (Faites ou ne faites pas; il n'y en a pastri
.) (4) Votre réponse serait meilleure si elle comprenait une explication deSI:localuser
. ………………… Veuillez ne pas répondre dans les commentaires; éditez votre réponse pour la rendre plus claire et plus complète.