Dlaczego nie mogę uruchomić aplikacji Gnome przez zdalną sesję SSH?

9

Loguję się na zdalnym hoście za pomocą ssh -X me@host, udało mi się uruchomić gnome-terminal -e "tail -F /var/log/file" &. Kiedy się wylogowuję, a następnie próbuję tego samego następnego dnia, otrzymuję:

Nie można uzyskać magistrali sesji: Nie można połączyć się z gniazdem / tmp / dbus-K99gT9yDjS: Odmowa połączenia Powrót do trybu niefabrycznego. Nie udało się przywołać demona GConf; wychodzę. Nie udało się skontaktować z serwerem konfiguracji; niektóre możliwe przyczyny to konieczność włączenia sieci TCP / IP dla ORBit lub masz przestarzałe blokady NFS z powodu awarii systemu. Więcej informacji na stronie http://projects.gnome.org/gconf/ . (Szczegóły - 1: Nie udało się uzyskać połączenia z sesją: Nie udało się połączyć z gniazdem / tmp / dbus-K99gT9yDjS: Połączenie odrzucone)

Jak uruchomić terminal gnome w tej sytuacji?

klepsydra
źródło
Nie widzę tu pytania. Powinieneś coś z tym zrobić, zanim Twój post zostanie zamknięty.
Agi Hammerthief,
Możesz usunąć część „rozwiązanie” z pytania i przesłać ją jako odpowiedź. To jest akceptowalne zachowanie.
Agi Hammerthief,
Jeśli logujesz się na innym komputerze za pomocą SSH, uzyskasz dostęp do powłoki / terminala. Nie musisz otwierać okna terminala na tym komputerze. Możesz wykonywać polecenia bezpośrednio na tym komputerze, wpisując je w terminalu na swoim komputerze.
Agi Hammerthief,
2
Jak mówi Nigel Nquande, naciśnij przycisk odpowiedzi na własne pytanie, a następnie skopiuj i wklej sekcję Rozwiązanie w odpowiedzi. Zachęca się go nie tylko do zaakceptowania.
derobert
2
W międzyczasie usunąłem rozwiązanie z twojego pytania, ponieważ nie jest to pytanie. Tego rodzaju pytanie, na które udzielono odpowiedzi, jest mile widziane, ale prosimy o zamieszczanie odpowiedzi jako odpowiedzi . Zajrzyj do naszego centrum pomocy lub obejrzyj 10-sekundową wycieczkę, aby uzyskać więcej informacji. Możesz zobaczyć oryginalny tekst (więc nie musisz go ponownie zapisywać) w historii edycji, do której możesz przejść, klikając link „Edytowano X min temu”.
terdon

Odpowiedzi:

7

Rzeczywiście, gdy sesja SSH jest otwarta, nie uruchamia ona sesji dbus. Niektóre programy mogą go uruchomić, ale wtedy sesja o nim nie wie (stąd nie można go zamknąć).

Brak wiedzy o sesji dbus oznacza również, że programy, które używają dbus, ale nie uruchamiają go same, będą miały problemy.

Sekcje dbus są na maszynę i na wyświetlacz X11. Ich informacje są przechowywane w $ HOME / .dbus / session-bus / - jednak proces, do którego się tam odwołuje, może zostać zamknięty, więc konieczna jest dodatkowa kontrola w celu ustalenia, czy uruchomienie dbus jest potrzebne, czy nie. Następnie zmienne, które mają zostać wyeksportowane do sesji.

To działa jak urok :)

W moim pliku .bash_profile umieszczam:

# 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

uwagi: hostnamectl jest częścią systemd i pozwala odzyskać identyfikator maszyny, dbus-launch wyświetla zmienne, które chcemy; za pomocą export $(dbus-launch)pobieramy wyjście dbus-launch i eksportujemy zmienne

Pablo Saratxaga
źródło
5

Żadna z poprzednich odpowiedzi nie działała w moim przypadku, ale uruchomienie aplikacji za pomocą dbus-launch wykonało zadanie:

ssh myhost "dbus-launch gnome-terminal --display localhost:10.0 &"
sabst
źródło
3

Znalazłem to:

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

Co skłoniło mnie do wypróbowania tego:

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

Teraz mogę uruchomić terminal gnome!

klepsydra
źródło
2
Co niewiarygodne, zadziałało również w 16.04. Po prostu musiałem zmienić polecenie restartu na sudo service dbus restart. Dzięki!
Avio,
⚠️ Ostrzeżenie: zrestartowanie dbus prawdopodobnie zrestartuje całą sesję X
Adam Katz
1

Po prostu biegnij:

> dbus-launch gnome-terminal
Ari
źródło
1
Dlaczego miałoby to pomóc?
DarkHeart
1
To również działało dla mnie. Nie mam pojęcia dlaczego.
Robert Lugg,
0

Ciekawe ... po prostu ponowne uruchomienie dbus nie działało dla mnie, musiałem również usunąć plik identyfikatora komputera, a także uruchomić ponownie.

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

Było to na serwerze SLES 11.4, który niedawno sklonowałem w VMWare. Mój problem polegał na tym, że nie mogłem uruchomić yast2 ani gedit ...

Oto błędy, które widziałem w wierszu poleceń:

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] 

Dzięki za wskazówkę!

Ernie
źródło
-2

Spróbuj tego:

rm $HOME/.dbus/session-bus/*
Izaak
źródło