Pourquoi ne puis-je pas exécuter les applications Gnome sur une session SSH distante?

9

En ssh -X me@hostme connectant à un hôte distant en utilisant , j'ai réussi à exécuter gnome-terminal -e "tail -F /var/log/file" &. Lorsque je me déconnecte et que j'essaye la même chose le lendemain, j'obtiens ceci:

Échec d'obtention du bus de session: Échec de la connexion à socket / tmp / dbus-K99gT9yDjS: connexion refusée Retour au mode non usine. Impossible d'invoquer le démon GConf; sortir. Impossible de contacter le serveur de configuration; certaines causes possibles sont que vous devez activer la mise en réseau TCP / IP pour ORBit, ou que vous avez des verrous NFS périmés en raison d'une panne du système. Voir http://projects.gnome.org/gconf/ pour plus d'informations. (Détails - 1: Échec de la connexion à la session: Échec de la connexion au socket / tmp / dbus-K99gT9yDjS: Connexion refusée)

Comment exécuter gnome-terminal dans cette situation?

heure
la source
Je ne vois pas de question posée ici. Vous devriez faire quelque chose à ce sujet avant que votre message ne soit fermé.
Agi Hammerthief
Vous voudrez peut-être supprimer la partie «solution» de votre question et la soumettre comme réponse. C'est un comportement acceptable.
Agi Hammerthief
Si vous vous connectez à une autre machine avec SSH, vous obtiendrez un accès shell / terminal. Vous n'avez pas besoin d'ouvrir une fenêtre de terminal sur cette machine. Vous pouvez exécuter des commandes directement sur cette machine en les tapant dans le terminal de votre machine.
Agi Hammerthief
2
Comme le dit Nigel Nquande, veuillez appuyer sur le bouton répondre à votre propre question et copier et coller votre section Solution dans la réponse. Non seulement il est acceptable, mais encouragé.
derobert
2
En attendant, j'ai supprimé la solution de votre question car ce n'est pas une question. Ce type de question auto-répondue est plus que bienvenu, mais veuillez poster les réponses comme réponses . Jetez un oeil à notre centre d'aide ou de prendre les 10 secondes tournée pour plus d' informations. Vous pouvez voir le texte d'origine (vous n'avez donc pas besoin de le réécrire) dans l' historique des modifications auquel vous pouvez accéder en cliquant sur le lien "Modifié il y a X min".
terdon

Réponses:

7

En effet, lorsqu'une session SSH est ouverte, elle ne lance pas de session dbus. Certains programmes peuvent le lancer, mais la session ne le sait pas (il ne peut donc pas le fermer).

Ne pas connaître la session dbus signifie également que les programmes qui utilisent dbus mais ne le lancent pas eux-mêmes auront des problèmes.

Les sections dbus sont par machine et par écran X11. Leurs informations sont stockées dans $ HOME / .dbus / session-bus / - cependant, le processus référencé peut être fermé, donc une vérification supplémentaire est nécessaire pour déterminer si le lancement de dbus est nécessaire ou non. Ensuite, les variables doivent être exportées vers la session.

Ensuite, cela fonctionne comme un charme :)

J'ai mis ce qui suit dans mon fichier .bash_profile:

# set dbus for remote SSH connections
if [ -n "$SSH_CLIENT" -a -n "$DISPLAY" ]; then
    machine_id=$(LANGUAGE=C hostnamectl|grep 'Machine ID:'| sed 's/^.*: //')
    x_display=$(echo $DISPLAY|sed 's/^.*:\([0-9]\+\)\(\.[0-9]\+\)*$/\1/')
    dbus_session_file="$HOME/.dbus/session-bus/${machine_id}-${x_display}"
    if [ -r "$dbus_session_file" ]; then
            export $(grep '^DBUS.*=' "$dbus_session_file")
            # check if PID still running, if not launch dbus
            ps $DBUS_SESSION_BUS_PID | tail -1 | grep dbus-daemon >& /dev/null
            [ "$?" != "0" ] && export $(dbus-launch) >& /dev/null
    else
            export $(dbus-launch) >& /dev/null
    fi
fi

notes: hostnamectl fait partie de systemd et permet de récupérer l'identifiant de la machine le lancement de dbus affiche les variables que nous voulons; en utilisant export $(dbus-launch)nous récupérons la sortie de dbus-launch et exportons les variables

Pablo Saratxaga
la source
5

Aucune des réponses précédentes n'a fonctionné dans mon cas, mais le lancement de l'application via dbus-launch a fait le travail:

ssh myhost "dbus-launch gnome-terminal --display localhost:10.0 &"
sabst
la source
3

J'ai trouvé ça:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=639261

Ce qui m'a amené à essayer ceci:

$ sudo rm /var/lib/dbus/machine-id
$ sudo service messagebus restart

Maintenant, je peux exécuter gnome-terminal!

heure
la source
2
Incroyablement, cela a également fonctionné en 16.04. Je viens de changer la commande de redémarrage en sudo service dbus restart. Merci!
Avio
⚠️ Attention: le redémarrage de dbus redémarrera probablement l'intégralité de votre session X
Adam Katz
1

Exécutez simplement:

> dbus-launch gnome-terminal
Ari
la source
1
Pourquoi cela aiderait-il?
DarkHeart
1
Cela a également fonctionné pour moi. Je ne sais pas pourquoi.
Robert Lugg
0

Intéressant ... juste redémarrer dbus n'a pas fonctionné pour moi, j'ai dû aussi supprimer le fichier id machine ainsi que redémarrer.

$ rcdbus stop
$ rm /var/lib/dbus/machine-id
$ rcdbus start

C'était sur un serveur SLES 11.4 que j'avais récemment cloné dans VMWare. Mon problème était que je ne pouvais pas démarrer yast2 ou gedit ...

Ce sont les erreurs que je voyais sur la ligne de commande:

yast2

** (y2controlcenter-gnome:9981): WARNING **: error accessing /desktop/gnome/lockdown/disable_command_line [Failed to contact configuration server; some possible causes are that you need to enable TCP/IP networking for ORBit, or you have stale NFS locks due to a system crash. See http://projects.gnome.org/gconf/ for information. (Details -  1: Failed to get connection to session: Failed to connect to socket /tmp/dbus-W7H31tbhVY: Connection refused)]


** (y2controlcenter-gnome:9981): WARNING **:
GError raised: [Failed to contact configuration server; some possible causes are that you need to enable TCP/IP networking for ORBit, or you have stale NFS locks due to a system crash. See http://projects.gnome.org/gconf/ for information. (Details -  1: Failed to get connection to session: Failed to connect to socket /tmp/dbus-W7H31tbhVY: Connection refused)]

user_message: [libslab_get_gconf_value: error getting /desktop/gnome/applications/main-menu/lock-down/user_modifiable_apps] 

Merci pour le conseil!

Ernie
la source
-2

Essaye ça:

rm $HOME/.dbus/session-bus/*
Isaac
la source