Une fois connecté en tant qu'utilisateur, comment exécuter les programmes graphiques?
thufir@doge:~$
thufir@doge:~$ Sudo -u hawat -i
hawat@doge:~$
hawat@doge:~$ whoami
hawat
hawat@doge:~$
hawat@doge:~$ pwd
/home/hawat
hawat@doge:~$
hawat@doge:~$ echo $HOME
/home/hawat
hawat@doge:~$
hawat@doge:~$ firefox
No protocol specified
Failed to connect to Mir: Failed to connect to server socket: No such file or directory
Unable to init server: Could not connect: Connection refused
Error: cannot open display: :0
hawat@doge:~$
export DISPLAY=:0
a fonctionné pour moi. Assurez-vous d'exécuter la commande sur le système qui se connecte, et non sur le système auquel vous vous connectez!
Cette réponse fonctionne sur mon Ubuntu 16.04 et Mir (avec de légères adaptations):
Exécuter x en tant qu'utilisateur utilisant xauth
Par souci de commodité, j'ai créé un script wrapper bash , que vous voudrez peut-être télécharger sur /usr/local/bin/xsudo
et marquer exécutable (chmod +x /usr/local/bin/xsudo
).
Puis lancez simplement:
xsudo hawat firefox
pam_xauth
(s. cette réponse ) Cependant, cela ne fonctionne pas pour moi pour une raison quelconque. (J'obtiens toujours le message d'erreur indiquant que Firefox ne parvient pas à se connecter à l'écran à: 0)xhost +local:
ou similaire, qui va faire fonctionner gksudo -u hawat firefox
sans script. Cependant soyez conscient que cela ouvre une faille de sécurité: Tout utilisateur actif sur votre hôte local pourra accéder à votre clavier, votre souris, votre écran, etc.Après avoir passé beaucoup trop de temps là-dessus, j'ai découvert qu'avec Gnome sur Ubuntu 16.04, la valeur correcte est DISPLAY=:1
, et non DISPLAY=:0
, comme il l'a été depuis des temps immémoriaux.
export DISPLAY =: fonctionne bien, mais il s’agit d’une solution temporaire, car vous devez la saisir à chaque fois que vous ouvrez le terminal.
Solution permanente: Le problème peut être dû à la variable env_keep dans/etc/sudoers. Ajoutez la ligne suivante à la fin de/etc/sudoers en utilisant gedit ou en utilisant Sudo visudo
Valeurs par défaut env_keep + = "DISPLAY"
Remarque: N'oubliez pas de toujours utiliser "+ =" lors de l'ajout à env_keep. Dans le cas où il y aurait un autre env_keep avec "=", changez-le en "+ =" car utiliser "=" écrasera les autres valeurs.