จะอัปเดต DBUS_SESSION_BUS_ADDRESS ใน tmux อย่างไรเมื่อมีการเปลี่ยนแปลงที่อยู่


2

ฉันสังเกตเห็นว่าฉันไม่สามารถเรียกใช้ไอน้ำในบานหน้าต่าง tmux: มันทำให้ฉันมีข้อผิดพลาด

Error: Unable to open a connection to X.  Check your DISPLAY environment
variable and make sure that you have enabled X.  If you are running
remotely, make sure that you have a remote connection which will allow
an X connection.

เมื่อในเวลาเดียวกันไม่มีปัญหาดังกล่าวในสถานีปกติ นั่นทำให้ฉันได้ข้อสรุปว่ามีบางอย่างแตกต่างกันในสภาพแวดล้อมของโปรแกรมฉันพูดถูกหลังจากส่งออกสภาพแวดล้อมจากทั้งสองขั้ว

$ env > /tmp/t1
$ env > /tmp/t2

และแตกต่างพวกเขา

$ diff -u /tmp/t{1,2}

ฉันสังเกตเห็นว่า DBUS_SESSION_BUS_ADDRESS นั้นแตกต่างกัน

-DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-CX81GDMBcL,guid=712e96f4ecdc3b9bf1eca21254ed44e3
+DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-axu0HojvNi,guid=a28fcde62f6d40aa587c708a54b83924

อาจเป็นเพราะฉันอาจรีสตาร์ท X และสภาพแวดล้อมในtmuxเซสชันไม่ได้รับผลกระทบจากสิ่งdbus-launchที่เกิดขึ้นในคำสั่ง WM ของฉันใน ~ / .xinitrc:

eval exec ck-launch-session dbus-launch --sh-syntax --exit-with-session i3 &>/dev/null

ดังนั้นฉันจะปรับปรุงตัวแปรนั้นอย่างไรเมื่อที่อยู่เปลี่ยนไป ..

คำตอบ:


2

/ ฉันเป็นใบ้ ฉันเพิ่งต้องส่งออก DBUS_SESSION_BUS_ADDRESS อีกครั้งในหน้าต่าง tmux ของฉันในสคริปต์ autostart เมื่อฉันตรวจสอบว่ามันกำลังทำงานอยู่หรือควรจะเริ่มทำงาน

ดังนั้นส่วนที่เกี่ยวข้องกับ tmux ใน autorun.sh ของฉันตอนนี้ดูเหมือนว่า:

tmux="tmux -u -f $HOME/.tmux/config -S $HOME/.tmux/socket"
if pgrep -u $UID -f '^tmux.*$' &>/dev/null; then
    for pane in `$tmux list-windows -t0 | sed -r 's/^([0-9]+):.*/\1/g'`; do
        $tmux send -t 0:$pane C-c 
        $tmux send -t 0:$pane export DBUS_SESSION_BUS_ADDRESS="$DBUS_SESSION_BUS_ADDRESS" ENTER
        $tmux send -t 0:$pane export DISPLAY="$DISPLAY" ENTER
        $tmux send -t 0:$pane C-c
    done
else $tmux \
    new -d su \; \
    set remain-on-exit on \; \
    neww su \; \
    set remain-on-exit on \; \
    select-window -t 0:1
fi

สิ่งแรกC-cคือการล้างบรรทัดจากสิ่งที่อาจมีอยู่ก่อนเรียกใช้คำสั่งส่งออก ประการที่สองคือการล้างบรรทัดหลังจากนั้น (tmux หรือ bash จะคัดลอกคำสั่งไปยังบรรทัดคำสั่งฉันไม่รู้ว่าทำไม)


ไม่ฉันผิด มันไม่ได้ช่วยอะไร หรือมันไม่เพียงพอ
tijagi

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