X11 การส่งต่อผ่านหน้าจอ Gnu เป็นไปได้หรือไม่


32

ฉันใช้หน้าจอ GNU อย่างต่อเนื่อง แต่ฉันพยายามที่จะคิดออกว่ามีทางที่จะได้แอป X11 ไปข้างหน้าบนหน้าจอเมื่อฉันกำลังยิ้มอยู่หรือเปล่า ขณะนี้ถ้าฉันพยายามเรียกใช้ 'gedit' ผ่านหน้าจอมันจะเปิดในคอมพิวเตอร์ของฉัน 'เซิร์ฟเวอร์' และไม่ได้อยู่ในไคลเอนต์ของฉัน ถ้าฉันทำแบบเดียวกันนอกจอทุกอย่างก็โอเค แต่ฉันต้องการให้ทุกอย่างเรียบร้อยเมื่อใช้หน้าจอด้วย!

ขอบคุณ!

PS: ฉันมีปัญหา Google และฉันเห็นการพูดถึง xmove แต่ฉันไม่สามารถหาแพคเกจที่มี xmove บน ubuntu ของฉัน (อูบุนตู 10.10)


ฉันไม่มีเวลาที่จะหาคำตอบที่สมบูรณ์ในตอนนี้ แต่คุณต้องตั้งค่าตัวแปรสภาพแวดล้อมบางอย่างให้ถูกต้อง คุณอาจจะรู้ได้ว่าคนใดบ้างที่มองสภาพแวดล้อมของคุณนอกจอ
JanC

คำตอบ:


32

เมื่อต้องการทำสิ่งนี้ด้วยตนเองเมื่อคุณติดตั้ง SSHed แต่ก่อนที่คุณจะไปหน้าจออีกครั้งให้ตรวจสอบตัวแปรสภาพแวดล้อม DISPLAY ของคุณ:

echo $DISPLAY

เมื่อคุณแนบหน้าจออีกครั้งให้ตั้งค่าตัวแปรสภาพแวดล้อมอย่างชัดเจน:

export DISPLAY=:N.0

โดยที่: N.0เป็นสิ่งที่echoแสดงให้เห็นก่อนการแนบ สิ่งนี้จะไม่สมบูรณ์แบบเนื่องจากแอพพลิเคชั่นบางตัวอาจคาดว่าจะคุยกับ Session D-Bus ซึ่งซับซ้อนกว่าเล็กน้อยในการส่งผ่านการเชื่อมต่อ SSH


1
! น่ากลัว ดูเหมือนว่าจะใช้ได้กับแอพส่วนใหญ่ ฉันพยายามเติมหน้าจอ 'Fu' คุณมีความคิดใด ๆ หรือคุณอาจชี้ให้ฉันในทิศทางทั่วไปว่าฉันจะทำสิ่งนี้โดยอัตโนมัติได้อย่างไร? ขอขอบคุณ!
Sandro

ฉันได้ทำสิ่งแปลก ๆ เช่นการเขียนสคริปต์บางอย่างเช่น: echo $DISPLAY > $HOME/.display.txt; screen -x -dและอีกอย่างในหน้าจอเพื่อให้ทำงานได้export DISPLAY=$(cat $HOME/.display.txt)
Kees Cook

นั่นคือสิ่งที่ฉันพยายามทำให้สำเร็จ แต่ยังไม่มีโชค การพยายามที่จะทำให้การส่งออกนั้นเกิดขึ้นนั้นเป็นอุปสรรคอย่างมากเนื่องจากการรันในสคริปต์ไม่ดีฉันต้องหาแหล่งที่มา ... และ setenv ก็ไม่ได้มีเวทย์มนต์เช่นกัน
Sandro

แหล่งที่มาประเภทของสคริปต์. /path/to/scriptที่scriptเป็นexport DISPLAY=$(cat $HOME/.display.txt)
Kees Cook

สิ่งนี้ถือว่าคุณไม่มีหน้าจอเริ่มต้นโดยอัตโนมัติเมื่อเข้าสู่ระบบ (a la byobu)
นักศึกษาที่มหาวิทยาลัย

11

มีโปรแกรมที่ชื่อว่า xpra ในที่เก็บมันเหมือนหน้าจอ gnu สำหรับ x11 การทำงานกับมันไม่ยากเกินไป:

X แอปพลิเคชั่นระยะไกลแบบต่อเนื่อง

Xpra ให้ฟังก์ชันการทำงานของ GNU Screen สำหรับแอปพลิเคชัน X

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


2
ผมได้เขียนเกี่ยวกับวิธีการที่จะบูรณาจริง xpra กับหน้าจอเพื่อให้บรรลุทั้งคอนโซลและ X11 วิริยะแอพลิเคชัน: krlmlr.github.io/integrating-xpra-with-screen ได้ผลสำหรับฉัน
krlmlr

7

Byobu จะติดตั้งตัวแทน ssh และ gpg อีกครั้งโดยอัตโนมัติ ฉันสามารถทำให้ตัวแปรการแสดงผลกลับมาใช้อีกครั้งหากเป็นประโยชน์กับคุณ ...


ดูเหมือนว่าจะไม่ผ่านไปตามตัวแปรการแสดงผลในเซสชันใหม่ที่สร้างขึ้นในเซสชัน ssh ด้วยการส่งต่อ X11 มันจะยอดเยี่ยมถ้ามัน ... ฉันหยุดใช้เพราะปวดหัวที่ต้องปิดการใช้งาน byobu ที่เริ่มโดยอัตโนมัติเพื่อให้สามารถใช้การส่งต่อ X11 ได้
นักศึกษาที่มหาวิทยาลัย

2

นี่คือวิธีที่ฉันทำให้มันทำงานเมื่อรัน byobu

เพิ่มบรรทัดนี้ใน.bash_login ก่อนว่า "_byobu_source .." สาย:

echo $DISPLAY > $HOME/.display.env

จากนั้นเพิ่มบรรทัดนี้ใน. bashrc :

if [ ! -z ${SSH_CONNECTION+x} ]; then
  export DISPLAY=$(cat $HOME/.display.env) 
fi

1

ดูเหมือนว่าปัญหาคือตัวแปรสภาพแวดล้อม XAUTHORITY ไม่ได้รับการเก็บรักษาไว้ในเซสชันหน้าจอ ฉันแก้ไขได้โดยเพิ่มสิ่งต่อไปนี้ใน. bashrc ของฉัน ฉันไม่คิดว่ามันจำเป็น แต่ฉันคิดว่าคุณทำสิ่งที่คุณต้อง:

# ensure X forwarding is setup correctly, even for screen
XAUTH=~/.Xauthority
if [[ ! -e "${XAUTH}" ]]; then
 # create new ~/.Xauthority file
 xauth
fi
if [[ -z "${XAUTHORITY}" ]]; then
 # export env var if not already available.
 export XAUTHORITY="${XAUTH}" 
fi

ฉันไม่คาดหวังว่านี่จะเป็นทางออกที่ดีที่สุดหรือรัดกุมที่สุด แต่ก็ใช้ได้ดี



0

จากคำแนะนำ @harre ฉันพบว่านี่เป็นวิธีการทำงานที่ดีที่สุดอย่างน้อยสำหรับ RHEL ผ่านทาง Putty ฉันรู้ว่ามีวิธีที่ดีกว่าในการสร้างไฟล์ที่เก็บ var แต่งานนี้ออกมาจากประตูที่จะได้รับX11จะมีการเข้าถึงเมื่อโหลดผ่านDISPLAYgnu screen

โซลูชันอัตโนมัติ

เพิ่มไปยัง.bashrc(หรือ.bash_profileขึ้นอยู่กับกรณีการใช้งานของคุณ)

#.bashrc
if [ -f ~/etc/.bash-screen-x11 ]; then
   echo $DISPLAY > $HOME/.display.env
   source ~/etc/.bash-screen-x11
fi

จากนั้นเพิ่มไฟล์ต่อไปนี้ (หรือตัวเลือกพา ธ ของคุณ)

#~/etc/.bash-screen-x11
# sets back display var.
if [ -z $STY ]; then
  export DISPLAY=$(cat $HOME/.display.env)
fi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.