เหตุใดฉันจึงไม่สามารถเรียกใช้แอป Gnome ผ่านเซสชัน SSH ระยะไกลได้


9

เข้าสู่พื้นที่ห่างไกลโดยใช้ผมทำงานเสร็จเรียบร้อยแล้วssh -X me@host gnome-terminal -e "tail -F /var/log/file" &เมื่อฉันออกจากระบบแล้วลองสิ่งเดียวกันในวันถัดไปฉันจะได้รับสิ่งนี้:

ไม่สามารถรับเซสชันบัส: ไม่สามารถเชื่อมต่อกับซ็อกเก็ต / tmp / dbus-K99gT9yDjS: การเชื่อมต่อถูกปฏิเสธกลับไปสู่โหมดที่ไม่ใช่จากโรงงาน ไม่สามารถเรียกปีศาจ GConf; ออกจาก ไม่สามารถติดต่อเซิร์ฟเวอร์การกำหนดค่า; สาเหตุที่เป็นไปได้บางประการคือคุณต้องเปิดใช้งานเครือข่าย TCP / IP สำหรับ ORBit หรือคุณมีการล็อค NFS เก่าเนื่องจากระบบขัดข้อง ดูhttp://projects.gnome.org/gconf/สำหรับข้อมูล (รายละเอียด - 1: การเชื่อมต่อกับเซสชันล้มเหลว: ไม่สามารถเชื่อมต่อกับซ็อกเก็ต / tmp / dbus-K99gT9yDjS: การเชื่อมต่อถูกปฏิเสธ)

ฉันจะรัน gnome-terminal ได้อย่างไรในสถานการณ์นี้


ฉันไม่เห็นคำถามที่ถูกถามที่นี่ คุณควรทำอะไรสักอย่างก่อนโพสต์ของคุณจะถูกปิด
Agi Hammerthief

คุณอาจต้องการตัดส่วน 'โซลูชัน' ออกจากคำถามของคุณและส่งเป็นคำตอบ นั่นเป็นพฤติกรรมที่ยอมรับได้
Agi Hammerthief

หากคุณลงชื่อเข้าใช้เครื่องอื่นด้วย SSH คุณจะได้รับสิทธิ์เข้าถึงเชลล์ / เทอร์มินัล คุณไม่จำเป็นต้องเปิดหน้าต่างเทอร์มินัลในเครื่องนั้น คุณสามารถรันคำสั่งบนเครื่องนั้นโดยตรงโดยพิมพ์คำสั่งเหล่านั้นลงในเครื่องบนเครื่องของคุณ
Agi Hammerthief

2
ดังที่ Nigel Nquande กล่าวโปรดกดปุ่มตอบคำถามของคุณเองแล้วคัดลอกและวางส่วนSolutionของคุณลงในคำตอบ ไม่เพียง แต่เป็นที่ยอมรับเท่านั้น
Derobert

2
ในระหว่างนี้ฉันได้ลบโซลูชันออกจากคำถามของคุณเนื่องจากไม่ใช่คำถาม ชนิดของคำถามตัวเองตอบนี้เป็นมากกว่าการต้อนรับ แต่โปรดตอบโพสต์เป็นคำตอบ ดูศูนย์ช่วยเหลือของเราหรือใช้เวลาทัวร์ 10 วินาทีสำหรับข้อมูลเพิ่มเติม คุณสามารถดูข้อความต้นฉบับ (ดังนั้นคุณไม่จำเป็นต้องเขียนมันออกมาอีก) ในประวัติการแก้ไขซึ่งคุณสามารถทำได้โดยคลิกที่ลิงค์ "แก้ไข X นาทีที่ผ่านมา"
terdon

คำตอบ:


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-launch แสดงตัวแปรที่เราต้องการ; โดยใช้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

⚠️คำเตือน: การรีสตาร์ท dbus อาจจะเริ่มเซสชัน X ทั้งหมดของคุณอีกครั้ง
Adam Katz


0

ที่น่าสนใจ ... เพียงแค่รีสตาร์ท dbus ไม่ได้ผลสำหรับฉันฉันต้องลบไฟล์ machine-id เช่นเดียวกับการรีสตาร์ท

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

นี่เป็นเซิร์ฟเวอร์ SLES 11.4 ที่ฉันเพิ่งโคลนใน VMWare ปัญหาของฉันคือฉันไม่สามารถเริ่ม 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] 

ขอบคุณสำหรับทิป!


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.