Cara baris perintah untuk mengirim penekanan tombol ke jendela yang terbuka pada sesi-X yang berbeda

11

Di mesin utama saya, saya memiliki desktop Ubuntu yang terbuka dan masuk. Saya kemudian juga masuk ke mesin ini dari komputer jarak jauh, menggunakan X2go yang menciptakan sesi-X baru. Saya memiliki file libreoffice terbuka pada sesi asli . Saya ingin menyimpan file ini dan menutupnya - tetapi dari mesin jarak jauh! (Kedua sesi memiliki pengguna yang sama masuk; saya bisa sudo jika diperlukan)

Saya sudah mencoba menggunakan xdotool searchtetapi ini gagal menemukan jendelanya. Apakah ada cara untuk melakukan apa yang saya inginkan dari sesi kedua ini? Saya dapat melihat prosesnya dengan ps -A saya bahkan dapat melihat file yang terbuka dengannya lsof! Bagaimana saya bisa melakukan "save-and-close" di atasnya?

Sanjay Manohar
sumber
2
Anda bisa menghentikan proses - jika Anda tidak memiliki perubahan serius yang belum disimpan, ini akan mudah. Jika Anda melakukannya, itu masih harus mencoba untuk memulihkan dokumen saat Anda membukanya.
Wayne Werner
Itu benar @ jalan, itu mungkin akan autorecover ... Terima kasih atas sarannya. Tidak yakin apakah saya ingin mengambil kesempatan itu! Tidak ada cara untuk mengirim penekanan tombol (atau pesan langsung lainnya)? Kedengarannya sangat sederhana.
Sanjay Manohar
Saya yakin ada beberapa cara - saya tidak menyadarinya. Beberapa yang rumit melibatkan pemasangan klien dan pengaturan VNC sederhana DISPLAY=:0(atau tampilan apa pun yang terjadi dengan akun lain Anda) dan kemudian luncurkan server dan dapatkan dari klien. Tapi itu mungkin berlebihan. LibreOffice mungkin memiliki protokol pesan - Saya tidak terlalu mengenalnya karena saya menggunakan Google Documents atau file teks biasa di Vim (termasuk LaTex) ...
Wayne Werner
gunakan VNC untuk mendapatkan akses ke jendela utama dari lokasi lain
Olivier Dulac
1
xdotool berjalan pada sesi saat ini, nilai $ DISPLAY. Anda dapat ssh mesin atau vncserver lalu jalankan xdotool di atasnya. Sebagai contoh, jika Anda menjalankan vncserver pada port 5901 ia menggunakan: 1 layar dengan konvensi. Jadi, jalankan DISPLAY:1kemudian jalankan program X (xeyes untuk tes) dan akan berjalan di bawah VNC. Hal yang sama berlaku untuk vncservers jarak jauh. SSH ke mesin lalu jalankan DISPLAY ekspor sederhana: 1 sebelum Anda gunakan.
m3nda

Jawaban:

9

Dengan asumsi konfigurasi default, xdpyinfo pada "asli" akan menampilkan tampilan ": 0,0", misalnya

xdpyinfo | grep name

Jika variabel lingkungan DISPLAY Anda pada "x2go" adalah ": 1.0" maka seharusnya demikian.

Dari terminal di "x2go" Cobalah untuk menemukan id-jendela:

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

Ada kemungkinan bahwa kontrol akses diatur sehingga tidak akan berfungsi, tetapi saya pikir itu harus jika Anda adalah userid yang sama pada host yang sama (yaitu akses ke ~ / .Xauthority). Periksa output "daftar xauth" jika tidak ada akses.

Jika berhasil, gunakan alat favorit Anda untuk mengontrolnya. Tambahkan "-int" ke xwininfo di atas untuk mencetak windowid dalam desimal jika alat Anda mengharuskannya, xdotool tidak:

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

atau Anda mungkin lebih beruntung dengan ini daripada "ctrl + s" / "ctrl + q"

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

Anda mungkin perlu "alt +" bukannya "meta +", saya memiliki pemetaan meta / alt / super non-standar. meta bekerja untuk saya, diuji menggunakan Xnest. Saya mengasumsikan tata letak dan akselerator menu bahasa Inggris yang tidak berubah.

Mungkin saja ada sembulan yang menghalangi Anda, dalam hal ini patut dicoba:

xdotool key "Escape"

beberapa kali, lalu coba lagi simpan & tutup. Ingat xdotool cerewet tentang kasus yang tepat dari nama "kunci".

Anda harus dapat mencoba semua ini dengan memulai libreoffice di x2go, dan TIDAK memodifikasi DISPLAY Anda. Anda harus menyimpan perintah ke file skrip shell sehingga perubahan fokus tidak mengacaukan Anda.

lsof akan menampilkan file tidak lagi terbuka jika berfungsi :-)

mr.spuratic
sumber
Terima kasih atas petunjuk xdotool key "Escape"tentang nama tetapi tidak mencoba nama panjang: D
m3nda
1

Sepertinya ada beberapa persyaratan yang mungkin. tampaknya host harus dalam file xhosts (ditandai sebagai jawaban) dan nilai DISPLAY yang sesuai diekspor. Posting ini di sini akan membantu Anda melakukannya dengan cara yang Anda inginkan, memungkinkan xdotool untuk menemukan jendela x11 jarak jauh .

Joshua K
sumber