วิธีบรรทัดคำสั่งในการส่งการกดแป้นไปที่หน้าต่างที่เปิดใน X-session อื่น


11

บนเครื่องหลักของฉันฉันมีเดสก์ท็อป Ubuntu ที่เปิดอยู่และเข้าสู่ระบบ ฉันยังเข้าสู่เครื่องนี้จากคอมพิวเตอร์ระยะไกลโดยใช้ X2go ซึ่งสร้างเซสชัน X ใหม่ ฉันมีไฟล์ LibreOffice เปิดในเซสชั่นเดิม ฉันต้องการบันทึกไฟล์นี้และปิด - แต่จากเครื่องระยะไกล! (ทั้งสองเซสชันมีผู้ใช้เดียวกันที่เข้าสู่ระบบฉันสามารถ sudo ถ้าจำเป็น)

ฉันลองใช้xdotool searchแต่ไม่สามารถหาหน้าต่างได้ มีวิธีการทำสิ่งที่ฉันต้องการจากเซสชั่นที่สองนี้หรือไม่? ฉันสามารถดูกระบวนการด้วยps -A ฉันยังสามารถดูไฟล์ที่เปิดด้วยlsof! ฉันจะทำ "บันทึกและปิด" กับมันได้อย่างไร


2
คุณสามารถฆ่ากระบวนการ - หากคุณไม่มีการเปลี่ยนแปลงที่ไม่ได้บันทึกอย่างจริงจังสิ่งนี้จะเป็นเรื่องง่าย หากคุณยังคงพยายามกู้คืนเอกสารในครั้งถัดไปที่คุณเปิด
Wayne Werner

นั่นเป็นความจริง @wayne มันอาจจะเป็นระบบตอบกลับอัตโนมัติ ... ขอบคุณสำหรับคำแนะนำ ไม่แน่ใจว่าฉันต้องการใช้โอกาสนั้นหรือไม่! ไม่มีวิธีส่งปุ่มกด (หรือข้อความโดยตรงอื่น ๆ )? มันฟังดูง่ายมาก
Sanjay Manohar

ฉันแน่ใจว่ามีวิธี - ฉันไม่ได้ตระหนักถึงพวกเขา สิ่งที่ซับซ้อนบางอย่างเกี่ยวข้องกับการติดตั้งไคลเอนต์ VNC แบบธรรมดาและการตั้งค่าDISPLAY=:0(หรืออะไรก็ตามที่แสดงบัญชีอื่นของคุณที่เกิดขึ้น) จากนั้นเปิดเซิร์ฟเวอร์และรับจากไคลเอนต์ แต่นั่นอาจจะมากเกินไป LibreOffice อาจมีโปรโตคอลข้อความ - ฉันไม่คุ้นเคยกับมันมากนักเพราะฉันใช้ Google Docs หรือไฟล์ข้อความธรรมดาใน Vim (รวมถึง LaTex) ...
Wayne Werner

ใช้ VNC เพื่อเข้าถึงหน้าต่างหลักจากที่อื่น
Olivier Dulac

1
xdotool ทำงานบนเซสชั่นปัจจุบันมูลค่า $ DISPLAY คุณสามารถ ssh เครื่องใด ๆ หรือ vncserver แล้วเรียกใช้ xdotool กับมัน ตัวอย่างเช่นถ้าคุณเรียกใช้ vncserver บนพอร์ต 5901 จะใช้: 1 หน้าจอตามแบบแผน ดังนั้นให้เรียกใช้DISPLAY:1แล้วเริ่มโปรแกรม X ใด ๆ (xeyes เพื่อทดสอบ) และจะทำงานภายใต้ VNC เช่นเดียวกับ vncservers ระยะไกล SSH เข้าสู่เครื่องจากนั้นทำการรัน export DISPLAY แบบง่าย ๆ : 1 ก่อนที่คุณจะใช้
m3nda

คำตอบ:


9

สมมติว่าการกำหนดค่าเริ่มต้น xdpyinfo ใน "ต้นฉบับ" จะแสดงการแสดง ": 0.0" เช่น

xdpyinfo | grep name

หากตัวแปรสภาพแวดล้อม DISPLAY ของคุณใน "x2go" เป็น ": 1.0" ก็ควรจะเป็นเช่นนั้น

จาก terminal ที่ "x2go" ลองหา window-id:

DISPLAY=:0.0 xwininfo -root -tree | grep Writer

อาจเป็นไปได้ว่ามีการตั้งค่าการควบคุมการเข้าถึงเพื่อให้ใช้งานไม่ได้ แต่ฉันคิดว่าควรเป็นหากคุณเป็นผู้ใช้เดียวกันในโฮสต์เดียวกัน (เช่นการเข้าถึง ~ / .Xauthority) ตรวจสอบผลลัพธ์ "รายการ xauth" หากไม่มีการเข้าถึง

หากใช้งานได้ให้ใช้เครื่องมือโปรดของคุณเพื่อควบคุม เพิ่ม "-int" ลงใน xwininfo ด้านบนเพื่อพิมพ์ windowid เป็นทศนิยมหากเครื่องมือของคุณต้องการอย่างนั้น xdotool ไม่:

export DISPLAY=:0.0
xdotool windowactivate 0x15a18918
xdotool windowfocus 0x15a18918
xdotool key "ctrl+s"
xdotool key "ctrl+q"

หรือคุณอาจจะโชคดีกว่ากับสิ่งเหล่านี้แทน "ctrl + s" / "ctrl + q"

xdotool key "meta+f" "s"
xdotool key "meta+f" "c"
xdotool key "meta+f" "x"

คุณอาจต้องใช้ "alt +" แทนที่จะเป็น "meta +" ฉันมีเมตา / alt / super mappings ที่ไม่ได้มาตรฐาน เมตาใช้ได้ผลกับฉันผ่านการทดสอบโดยใช้ Xnest ฉันสมมติว่ารูปแบบเมนูภาษาอังกฤษและส่วนช่วยดำเนินการไม่เปลี่ยนแปลง

อาจเป็นไปได้ว่ามีป๊อปอัปในแบบของคุณซึ่งในกรณีนี้มันควรค่าแก่การลอง:

xdotool key "Escape"

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

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

lsof ควรแสดงไฟล์ไม่เปิดอีกต่อไปถ้ามันทำงาน :-)


ขอบคุณสำหรับคำใบ้xdotool key "Escape"เกี่ยวกับชื่อ แต่ไม่ได้ลองชื่อยาว: D
m3nda

1

ดูเหมือนว่ามีข้อกำหนดที่เป็นไปได้สองประการ เห็นได้ชัดว่าโฮสต์จะต้องอยู่ในไฟล์ xhosts (มันถูกทำเครื่องหมายเป็นคำตอบ) และค่า DISPLAY ที่เหมาะสมส่งออก โพสต์นี้ที่นี่จะช่วยให้คุณทำมันในแบบที่คุณต้องการช่วยให้xdotool เพื่อหาหน้าต่าง

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