Après avoir ouvert une session en tant qu'autre utilisateur, comment puis-je exécuter des programmes GUI?
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:~$
Cette réponse fonctionne sur mon Ubuntu 16.04 et Mir (avec de légères adaptations):
Exécutez la commande x en tant qu'autre utilisateur à l'aide de xauth
Script bash de wrapper:
Pour plus de commodité, j'ai créé un script bash wrapper , que vous pouvez télécharger
/usr/local/bin/xsudo
et marquer exécutable (chmod +x /usr/local/bin/xsudo
).Exécutez ensuite simplement:
Alternatives potentielles:
pam_xauth
(s. Cette réponse ) Cependant, cela ne fonctionne pas pour moi pour une raison quelconque. (Je reçois toujours l'erreur à propos de Firefox ne pouvant pas se connecter à l'écran à: 0)xhost +local:
ou similaire, ce qui va faire legksudo -u hawat firefox
travail sans aucun script d'emballage. Cependant, sachez 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.la source
Après avoir passé beaucoup trop de temps à ce sujet, j'ai découvert qu'avec Gnome sur Ubuntu 16.04, la valeur correcte est
DISPLAY=:1
, pasDISPLAY=:0
comme elle l'a été depuis des temps immémoriaux.la source
export DISPLAY =: 0 fonctionne très bien mais c'est une solution temporaire car vous devez taper ceci à 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
Remarque: Gardez à l'esprit de toujours utiliser "+ =" lors de l'ajout à env_keep. Dans le cas où il y a un autre env_keep avec "=" changez-les en "+ =" car l'utilisation de "=" remplacera les autres valeurs.
la source
visudo
wrapper, qui fournit une vérification d'intégrité avant d'écrire un nouveau fichier sudoers.