จะเริ่มต้นเซิร์ฟเวอร์ X ที่ใช้ร่วมกันสำหรับการใช้งานระยะไกลและไม่ได้ส่งต่อได้อย่างไร


1

ฉันไม่แน่ใจว่าฉันกำลังถามคำถามที่ถูกต้องหรือไม่ดังนั้นนี่คือสิ่งที่ฉันต้องการทำจริง ๆ :

ฉันมีเซิร์ฟเวอร์ที่มีหน้าจอเชื่อมต่ออยู่และไม่มีอุปกรณ์อื่น กำลังใช้งานเซิร์ฟเวอร์ SSH

ฉันต้องการให้อลิซสามารถเชื่อมต่อกับเซิร์ฟเวอร์และเรียกใช้คำสั่งในฐานะ "พนักงาน" เพื่อแสดงภาพบนหน้าจอ ตัวอย่างเช่น...

ssh server sudo -u 'staff' gst-launch-1.0 playbin uri=file:///path/to/image.png

อลิซกลับบ้านและภาพยังคงปรากฏ บ๊อบเข้ามาและตัดสินใจว่าเขาต้องการภาพที่แตกต่าง:

ssh server sudo -u 'staff' gst-launch-1.0 playbin uri=file:///path/to/other.png

เซิร์ฟเวอร์ X ต้องเริ่มต้นและกำหนดค่าให้ตรงกับความต้องการของฉันอย่างไร เฉพาะผู้ใช้ "พนักงาน" เท่านั้นที่จะต้องใช้จอแสดงผล

ฉันรู้ว่าฉันสามารถเริ่มต้นเซิร์ฟเวอร์เมื่อบูตโดยใช้ xinit และเรียกใช้โปรแกรมที่ฉันเลือก ฉันควรใช้โปรแกรมใด มันควรทำอย่างไร? มีตัวแปรสภาพแวดล้อมที่ฉันต้องผ่านหรือไม่

คำตอบ:


2

ในเซิร์ฟเวอร์ X สภาพแวดล้อม linux ทั่วไปใช้โปรโตคอล MIT-MAGIC-COOKIE-1 เพื่อให้สิทธิ์การเข้าถึงจอแสดงผล ผู้ใช้ที่ต้องการเข้าถึงจอแสดงผลจะต้องมีคุกกี้ที่ถูกต้อง(ปกติถูกเก็บไว้ในไฟล์ ~ / .Xauthority) โดยปกติคุกกี้จะถูกสร้างขึ้นโดยตัวจัดการหน้าจอ (หน้าจอเข้าสู่ระบบ) หากคุณกำลังเริ่มต้นเซิร์ฟเวอร์ X จากสคริปต์ที่กำหนดเองของคุณคุณต้องสร้างคุกกี้ด้วยตัวคุณเองให้เก็บไว้ในไฟล์สิทธิ์และแจ้งเซิร์ฟเวอร์เกี่ยวกับไฟล์นั้น

คุณสามารถใช้คำสั่งmcookieเพื่อสร้างคุกกี้และเพิ่มลงในไฟล์สิทธิใช้งานด้วยxauth:

# touch /home/staff/.Xauthority
# xauth -f /home/staff/.Xauthority add :0 . $(mcookie)

Prameter -f /home/staff/.Xauthorityบอกxauthให้ใช้ไฟล์สิทธิใช้งานของผู้ใช้งานstaff :0เป็นชื่อที่แสดง จุด ( .) ระบุโปรโตคอล MIT-MAGIC-COOKIE-1 mcookieมาจากแพคเกจutil-linux

ตอนนี้ถ้าคุณดำเนินการ:

# xauth -f /home/staff/.Xauthority list

คุณควรเห็นบางสิ่งเช่น:

server/unix:0  MIT-MAGIC-COOKIE-1  c61bdc0b88cf0cb376e1b29647a8c4d6

เมื่อคุณเข้าสู่ระบบในฐานะผู้ใช้งานพนักงานคุณควรเห็นผลลัพธ์เดียวกันโดยไม่มีพารามิเตอร์ -f:

$ xauth list
server/unix:0  MIT-MAGIC-COOKIE-1  c61bdc0b88cf0cb376e1b29647a8c4d6

หากไม่ตรวจสอบว่าXAUTHORITYตัวแปรสภาพแวดล้อมไม่ได้ถูกกำหนดหรือตั้งเป็น "/home/staff/.Xauthority"

เริ่มต้นเซิร์ฟเวอร์ X ด้วย-authพารามิเตอร์:

# X -auth /home/staff/.Xauthority

ตอนนี้ผู้ใช้พนักงานสามารถเข้าถึงหน้าจอ:0ได้ สิ่งเดียวที่เหลือคือการตั้งค่าตัวแปรสภาพแวดล้อมDISPLAY- สามารถทำได้ผ่านsudoพารามิเตอร์ ดังนั้นเมื่อคุณ ssh ไปยังเซิร์ฟเวอร์และดำเนินการคำสั่งที่แสดงภาพเป็นพนักงานผู้ใช้แล้วมันควรจะแสดง การใช้ ImageMagick ตามที่แนะนำโดย L. Levrel คำสั่งจะเป็น:

# ssh server sudo -u staff DISPLAY=:0 display -window root /path/to/image.png

หมายเหตุ:คุณไม่ต้องใช้พนักงานผู้ใช้ คุณสามารถสร้างไฟล์ผู้มีอำนาจในตำแหน่งทั่วไป (เช่น / var / tmp / xauthority) และตั้งค่าตัวแปรสภาพแวดล้อมXAUTHORITYสำหรับAliceและBobไปยังเส้นทางนั้น

อีกทางเลือกหนึ่งคือ "แจกจ่าย" คุกกี้ไปยังไฟล์สิทธิ์ของAliceและBob (ซึ่งคล้ายกับสิ่งที่ผู้จัดการการแสดงผลกำลังทำอยู่):

# xauth -f /var/tmp/xauthority extract - :0 | xauth -f /home/alice/.Xauthority merge
# xauth -f /var/tmp/xauthority extract - :0 | xauth -f /home/bob/.Xauthority merge

วิธีนี้AliceและBobไม่จำเป็นต้องทำsudo staffเพื่อเข้าถึงหน้าจอ

หมายเหตุว่าถ้าคุณมีเซิร์ฟเวอร์ X มากกว่าทำงานคุณต้องใช้ชื่อที่แสดงที่แตกต่างจาก:0ในคำสั่งดังกล่าว (เช่น:1, :2ฯลฯ )


ใครจะคิดว่าการอนุญาตควรจะใช้ได้เฉพาะกับอินสแตนซ์เฉพาะของ X server แต่คำตอบนี้แนะนำว่าสามารถสร้างการอนุญาตได้แม้ว่าจะไม่มี X server ที่ทำงานอยู่ ...
Piotr Dobrogost

0

หากคุณติดตั้ง ImageMagick ไว้คุณสามารถใช้:

display -window root /path/to/image.png

ดูเอกสาร มีตัวเลือกมากมาย -displayคุณอาจจะต้องไม่น้อยกว่า

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