为什么我不能通过远程SSH会话运行Gnome应用程序?


9

使用登录到远程主机后ssh -X me@host,我成功运行了gnome-terminal -e "tail -F /var/log/file" &。当我注销然后第二天尝试相同的操作时,我得到了:

无法获取会话总线:无法连接到套接字/ tmp / dbus-K99gT9yDjS:连接被拒绝回到非出厂模式。无法召唤GConf恶魔;退出。联系配置服务器失败;一些可能的原因是您需要为ORBit启用TCP / IP网络,或者由于系统崩溃而拥有过时的NFS锁定。有关信息,请参见http://projects.gnome.org/gconf/。(详细信息-1:无法连接到会话:无法连接到套接字/ tmp / dbus-K99gT9yDjS:连接被拒绝)

在这种情况下如何运行gnome-terminal?


我在这里没有看到任何问题。您应该在关闭帖子之前对此进行一些操作。
Agi Hammerthief 2014年

您可能希望从问题中删除“解决方案”部分,然后将其作为答案提交。这是可以接受的行为。
Agi Hammerthief 2014年

如果您要使用SSH登录到另一台计算机,则将获得Shell /终端访问权限。您无需在该计算机上打开终端窗口。您可以通过在计算机的终端中键入命令来直接在该计算机上执行命令。
Agi Hammerthief 2014年

2
正如Nigel Nquande所说,请按您自己的问题按钮,然后将“ 解决方案”部分复制并粘贴到答案中。它不仅可以接受,而且受到鼓励。
derobert 2014年

2
同时,由于这不是问题,因此我从您的问题中删除了该解决方案。这种自我解答的问题非常受欢迎,但请发布答案作为答案。请访问我们的帮助中心,或参加10秒钟的游览以获取更多信息。您可以在编辑历史记录中看到原始文本(因此您无需再次写出),您可以通过单击“在X分钟前编辑”链接来获取原始文本。
terdon

Answers:


7

实际上,当SSH会话打开时,它不会启动dbus会话。某些程序可能会启动它,但随后会话不知道它(因此无法关闭它)。

不了解dbus会话也意味着使用dbus但自己不启动它的程序会遇到问题。

dbus部分是按机器和X11显示的。它们的信息存储在$ HOME / .dbus / session-bus /中,但是,此处引用的过程可能已关闭,因此需要额外检查以确定是否需要启动dbus。然后,那里的变量将被导出到会话。

然后它就像一个魅力:)

我将以下内容放入我的.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

注意:hostnamectl是systemd的一部分,并允许检索dbus启动时显示的机器ID。通过使用export $(dbus-launch)我们检索dbus-launch的输出并导出变量


5

在我的情况下,先前的答案均无效,但通过dbus-launch启动应用程序完成了该工作:

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

3

我找到了这个:

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

导致我尝试了这个:

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

现在我可以运行gnome-terminal!


2
令人难以置信的是,它在16.04中也起作用。我只需要将重新启动命令更改为sudo service dbus restart。谢谢!
Avio

Warning️警告:重新启动dbus可能会重新启动整个X会话
Adam Katz


0

有趣的是...重新启动dbus对我不起作用,我还必须删除机器ID文件并重新启动。

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

这是我最近在VMWare中克隆的SLES 11.4服务器上。我的问题是我无法启动yast2或gedit ...

这些是我在命令行上看到的错误:

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] 

谢谢你的提示!


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.