Perché non riesco a eseguire app Gnome su una sessione SSH remota?


9

Accedendo a un host remoto usando ssh -X me@host, corro con successo gnome-terminal -e "tail -F /var/log/file" &. Quando mi disconnetto e provo la stessa cosa il giorno successivo, ottengo questo:

Impossibile ottenere il bus di sessione: impossibile connettersi a socket / tmp / dbus-K99gT9yDjS: connessione rifiutata Ripristino in modalità non di fabbrica. Impossibile convocare il demone GConf; uscire. Impossibile contattare il server di configurazione; alcune possibili cause sono la necessità di abilitare la rete TCP / IP per ORBit o di avere blocchi NFS non aggiornati a causa di un arresto anomalo del sistema. Vedere http://projects.gnome.org/gconf/ per informazioni. (Dettagli - 1: impossibile ottenere la connessione alla sessione: impossibile connettersi al socket / tmp / dbus-K99gT9yDjS: connessione rifiutata)

Come posso eseguire gnome-terminal in questa situazione?


Non vedo una domanda che viene posta qui. Dovresti fare qualcosa al riguardo prima che il tuo post venga chiuso.
Agi Hammerthief

Potresti voler eliminare la parte "soluzione" dalla tua domanda e inviarla come risposta. È un comportamento accettabile.
Agi Hammerthief

Se accedi a un altro computer con SSH, otterrai l'accesso shell / terminale. Non è necessario aprire una finestra terminale su quella macchina. È possibile eseguire i comandi direttamente su quella macchina digitandoli nel terminale sulla macchina.
Agi Hammerthief,

2
Come dice Nigel Nquande, premi il pulsante Rispondi alla tua domanda e copia e incolla la sezione Soluzione nella risposta. Non solo è accettabile, è incoraggiato.
derobert,

2
Nel frattempo ho rimosso la soluzione dalla tua domanda poiché non è una domanda. Questo tipo di domanda con risposta autonoma è più che benvenuto, ma si prega di inviare le risposte come risposte . Dai un'occhiata al nostro centro assistenza o partecipa al tour di 10 secondi per ulteriori informazioni. Puoi visualizzare il testo originale (quindi non è necessario scriverlo di nuovo) nella cronologia delle modifiche a cui puoi accedere facendo clic sul link "Modificato X min fa".
terdon

Risposte:


7

Infatti quando una sessione SSH è aperta, non avvia una sessione dbus. Alcuni programmi potrebbero avviarlo, ma la sessione non lo conosce (quindi non può chiuderlo).

Non conoscere la sessione dbus significa anche che i programmi che usano dbus ma non lo avviano da soli avranno problemi.

le sezioni dbus sono per macchina e per display X11. Le loro informazioni sono memorizzate in $ HOME / .dbus / session-bus / - tuttavia, il processo a cui si fa riferimento potrebbe essere chiuso, quindi è necessario un controllo aggiuntivo per determinare se è necessario o meno l'avvio di dbus. Quindi, le variabili lì devono essere esportate nella sessione.

Quindi funziona come un fascino :)

Ho inserito quanto segue nel mio file .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

note: hostnamectl fa parte di systemd e consente di recuperare l'id macchina che dbus-launch visualizza le variabili che vogliamo; usando export $(dbus-launch)recuperiamo l'output di dbus-launch ed esportiamo le variabili


5

Nessuna delle risposte precedenti ha funzionato nel mio caso, ma l'avvio dell'applicazione tramite dbus-launch ha funzionato:

ssh myhost "dbus-launch gnome-terminal --display localhost:10.0 &"

3

Ho trovato questo:

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

Che mi ha portato a provare questo:

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

Ora posso eseguire gnome-terminal!


2
Incredibilmente, ha funzionato anche nel 16.04. Ho dovuto cambiare il comando riavvio in sudo service dbus restart. Grazie!
Avio,

⚠️ Avvertenza: il riavvio di dbus probabilmente riavvierà l'intera sessione X
Adam Katz,

1

Corri:

> dbus-launch gnome-terminal

1
Perché questo sarebbe d'aiuto?
DarkHeart,

1
Questo ha funzionato anche per me. Non ho idea del perché.
Robert Lugg,

0

Interessante ... il solo riavvio di dbus non ha funzionato per me, ho dovuto rimuovere anche il file ID macchina e riavviare.

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

Questo era su un server SLES 11.4 che avevo clonato di recente in VMWare. Il mio problema era che non potevo avviare yast2 o gedit ...

Questi erano gli errori che stavo vedendo sulla riga di comando:

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] 

Grazie per il consiglio!


-2

Prova questo:

rm $HOME/.dbus/session-bus/*
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.