xclip บนเซิร์ฟเวอร์ headless


27

ฉันใช้ xclip เพื่อคัดลอกผลลัพธ์ของคำสั่ง bash ดังนี้:

pwd | tr -d "\n" | xclip -selection c

เพื่อให้ฉันสามารถวางผลลัพธ์ลงในเซสชันเทอร์มินัลอื่น

ฉันพยายามที่จะใช้มันบนเซิร์ฟเวอร์ที่ไม่มีส่วนหัว (ubuntu 13.04) ซึ่งเริ่มต้นโดยไม่มี x มันไม่ทำงานกับข้อผิดพลาด:

Error: Can't open display: (null)

มีวิธีแก้ไขไหม ฉันรู้ว่าการเห็นว่าโปรแกรมเรียกว่า xclip อาจไม่สามารถทำได้

คำตอบ:


29

คลิปบอร์ดที่มีให้โดยเซิร์ฟเวอร์เอ็กซ์ ไม่สำคัญว่าเซิร์ฟเวอร์นั้นจะเป็นแบบหัวขาดหรือเปล่าสิ่งที่สำคัญคือเซสชันกราฟิกแบบโลคัลของคุณพร้อมใช้งานสำหรับโปรแกรมที่รันบนเครื่องระยะไกล ต้องขอบคุณการออกแบบที่โปร่งใสของเครือข่าย

ฉันคิดว่าคุณกำลังเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลด้วย SSH จากเครื่องที่ใช้ Linux ตรวจสอบให้แน่ใจว่าการส่งต่อ X11 เปิดใช้งานทั้งในการกำหนดค่าไคลเอนต์และการกำหนดค่าเซิร์ฟเวอร์ ในการกำหนดค่าไคลเอนต์คุณจะต้องมีบรรทัดForwardX11 yesใน~/.ssh/configเพื่อให้มันเป็นค่าเริ่มต้นหรือผ่านตัวเลือก-Xไปยังsshคำสั่งสำหรับเซสชั่นนั้น ในการกำหนดค่าเซิร์ฟเวอร์คุณจะต้องมีบรรทัดX11Forwarding yesใน/etc/ssh/sshd_config(มันจะปรากฏตามค่าเริ่มต้นบน Ubuntu)

เพื่อตรวจสอบว่าส่ง X11 ถูกเปิดใช้งานดูที่ค่าของตัวแปรสภาพแวดล้อม:DISPLAY echo $DISPLAYคุณควรเห็นค่าเช่นlocalhost:10(แอปพลิเคชันที่ทำงานบนเครื่องระยะไกลถูกบอกให้เชื่อมต่อกับจอแสดงผลที่ทำงานบนเครื่องเดียวกัน แต่ในความเป็นจริงแล้วการเชื่อมต่อจอแสดงผลนั้น SSH ส่งต่อไปยังหน้าจอฝั่งไคลเอ็นต์ของคุณ) โปรดทราบว่าหากDISPLAYไม่ได้ตั้งค่าไว้จะไม่มีการตั้งค่าด้วยตนเอง: ตัวแปรสภาพแวดล้อมจะถูกตั้งค่าอย่างถูกต้องเสมอหากมีการส่งต่อ หากคุณต้องการที่จะวินิจฉัยปัญหาการเชื่อมต่อ SSH ผ่านตัวเลือกใน-vvvการsshที่จะได้รับการติดตามรายละเอียดของสิ่งที่เกิดขึ้น

หากคุณเชื่อมต่อด้วยวิธีอื่นคุณอาจจะหรืออาจไม่สามารถทำการส่งต่อ X11 ได้ หากไคลเอ็นต์ของคุณใช้ Windows PuTTYรองรับการส่งต่อ X11 คุณจะต้องเรียกใช้เซิร์ฟเวอร์ X บนเครื่อง Windows เช่นXming


+1 คำตอบที่ยอดเยี่ยม แต่ที่ฉันกล่าวถึงเซิร์ฟเวอร์นี้ทำงานโดยไม่มี x ดังนั้นคำตอบของ Nykakins นั้นมีความเกี่ยวข้องมากกว่า
Anake

@ ฉันกลัวว่าคุณจะตอบคำตอบของฉันผิด จอแสดงผลระยะไกลไม่เกี่ยวข้องกับเซิร์ฟเวอร์ X ใด ๆ ที่ทำงานบนเครื่องระยะไกล คุณต้องxclipติดตั้งโปรแกรมและไลบรารีที่สนับสนุน แต่ไม่เกี่ยวข้องกับการติดตั้งเซิร์ฟเวอร์ X
Gilles 'ดังนั้นหยุดความชั่วร้าย'

2
เพิ่งสงสัยว่า ... วิธีนี้ใช้ได้เมื่อเชื่อมต่อจากไคลเอนต์ OSX กับเซิร์ฟเวอร์ Ubuntu ที่ไม่มีหัวหรือไม่
เคน

3
มันไม่ได้ผลสำหรับฉัน ฉันไปจาก mac -> เซิร์ฟเวอร์ linux X11Forwarding yesอยู่ใน sshd_config บนเซิร์ฟเวอร์และฉันผ่าน-Xเมื่อฉันไปที่เซิร์ฟเวอร์ Error: Can't open display: (null)เมื่อcat ~/.ssh/id_rsa.pub | xclip -selection clipboard
chovy

1
โอเคฉันคิดว่ามันจะใช้งานได้ตั้งแต่pbcopyทำงานบน mac ของฉันไปแล้ว ฉันจะเริ่มต้นเซิร์ฟเวอร์ x บน mac และฉัน$DISPLAYจะตั้งค่าอย่างไร
chovy

4

Bash เองไม่มีคลิปบอร์ด มันเป็นคุณสมบัติ X เป็นเพียงอินเตอร์เฟซบรรทัดคำสั่งและตามที่คุณเห็นก็ต้องใช้xclipt displayวิธีแก้ไขคือใช้ไฟล์ชั่วคราว:

$ echo 123 > /tmp/f
$ tr -d '2' < /tmp/f
13

4
ฉันไม่เข้าใจ
chovy

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