Échec de la connexion à Mir: Échec de la connexion au socket du serveur: Aucun fichier ou répertoire de ce type

18

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:~$ 
Thufir
la source

Réponses:

13

export DISPLAY=:0travaillé pour moi. Assurez-vous d'exécuter la commande sur le système de connexion, pas sur le système auquel vous vous connectez!

user2938093
la source
2
Sur la machine que j'utilisais pour me connecter, pas sur la machine à laquelle vous vous connectez.
user2938093
ahhh, c'est sur la même boite. comptes diff.
Thufir
1
N'a eu aucun effet sur mon ordinateur
ComputerScientist
ne fonctionne pas pour moi. Je ne sais pas pourquoi cela m'arrive.
Chan Kim
6

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/xsudoet marquer exécutable ( chmod +x /usr/local/bin/xsudo).

Exécutez ensuite simplement:

xsudo hawat firefox

Alternatives potentielles:

  • En tant qu'alternative beaucoup plus simple, vous pourriez examiner 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)
  • Dans beaucoup de forums , vous pouvez voir la commande xhost +local:ou similaire, ce qui va faire le gksudo -u hawat firefoxtravail 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.
  • Il y avait autrefois sux , qui a été abandonné pour une raison quelconque - vous pourriez toujours être en mesure de le télécharger et de l'utiliser cependant. Pour autant que je sache, cela n'a fait que quelque chose de similaire à mon script. Malheureusement, je n'ai pas pu savoir pourquoi cela n'est plus maintenu. (Peut-être parce que nous devrions maintenant utiliser pam_xauth à la place - s. Première alternative)
lentschi
la source
3

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, pas DISPLAY=:0comme elle l'a été depuis des temps immémoriaux.

Peter V. Mørch
la source
1

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

Par défaut env_keep + = "DISPLAY"

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.

Mahesh Kumar
la source
FYI: gardez à l'esprit que vous n'êtes pas censé éditer le fichier sudoers directement, mais en utilisant le visudowrapper, qui fournit une vérification d'intégrité avant d'écrire un nouveau fichier sudoers.
Gabriel Fair