Bagaimana cara membuat shortcut yang mengeksekusi perintah xdotool untuk mensimulasikan penekanan tombol?

10

Saya mencoba mensimulasikan penekanan tombol media menggunakan pintasan khusus.

Sejauh ini, saya sudah dapat mencapai simulasi yang saya butuhkan menggunakan perintah:

xdotool key XF86AudioPlay

Ini berfungsi dengan baik, menjeda atau memulai pemutar musik setiap kali dijalankan.

Masalahnya muncul ketika mencoba menjalankannya sebagai jalan pintas.

Pertama saya mencoba menjalankan alias dengan pintasan khusus, tetapi tidak berhasil.

Seperti yang dijelaskan pada pertanyaan ini :

Perintah yang dijalankan oleh binding keyboard tidak diuraikan melalui shell. Taruhan terbaik Anda adalah membuat bin direktori di homedir Anda.

Selanjutnya saya membuat skrip yang disarankan dan menamainya simplay:

#!/bin/sh
xdotool key XF86AudioPlay

Itu terletak di dalam folder bin yang merupakan bagian dari PATH, ini berfungsi dengan baik dan dapat dijalankan dari lokasi mana pun.

Saat mencoba membuat Pintasan Khusus, saya tidak dapat menjalankannya, konfigurasinya adalah sebagai berikut:

Name: test
Command: simplay

Shortcut: Ctrl+Alt+R

Setelah mencari sedikit lebih banyak, saya menemukan cara lain untuk menjalankan pintasan:

gnome-terminal -e simplay

Saya mencobanya di terminal dan memperhatikan bahwa ketika mengeksekusi itu akan dengan cepat membuka jendela terminal baru, menjalankan proses anak, menjeda musik dan segera menutup jendela.

Saya mengubah perintah pada pintasan dan ketika menekannya saya perhatikan perilaku yang sama membuka terminal dan segera ditutup tetapi kali ini proses anak tidak menghentikan musik, yang membuat saya berpikir bahwa skrip telah dipanggil pada semua upaya saya sebelumnya tapi itu entah bagaimana tidak bisa dieksekusi.

Bagaimana saya bisa menyelesaikan masalah ini sesuai dengan pengetahuan Anda?

Jorge Cuevas
sumber

Jawaban:

12

Masalah

Pintasan Anda dilakukan bersamaan dengan penekanan tombol yang disimulasikan

Jika Anda menjalankan perintah, mensimulasikan penekanan tombol, dipanggil dengan ... penekanan tombol lain, Anda sebenarnya akan mensimulasikan penekanan tombol ketiga , yang merupakan kombinasi dari keduanya :)

Menyelesaikan

Anda perlu mencegah jalan pintas Anda untuk berjalan pada saat yang sama dengan menekan tombol simulasi, dengan kata lain, tambahkan penundaan:

/bin/bash -c "sleep 1 && xdotool key XF86AudioPlay"

Tambahkan perintah ini ke jalan pintas, dan itu akan berfungsi.

Catatan

Tentu saja Anda bisa bermain sedikit dengan nilai dalam sleep 1, untuk mengaturnya ke nilai terbaik yang terasa nyaman, tergantung pada seberapa "lengket" kombinasi ditekan. sleep 0.5mungkin sangat baik, dan membuat jalan pintas bertindak lebih cepat.

Yakub Vlijm
sumber
8

Anda juga dapat menggunakan perintah secara langsung dalam definisi cara pintas, sehingga Anda tidak perlu membuat skrip mandiri untuk itu.

Alih-alih menggunakan solusi "tidur 1", Anda dapat menggunakan --clearmodifiersflag, yaitu pintasan kustom Anda akan terlihat seperti ini:

Name: test
Command: xdotool key --clearmodifiers XF86AudioPlay

Shortcut: Ctrl+Alt+R

Bagi saya ini berfungsi saat memetakan jalan pintas ke Super+F9.

Jan
sumber
Apakah cuplikan kode di atas dimaksudkan sebagai file? Jika demikian, apakah Anda harus meletakkannya di tempat tertentu atau menjalankan perintah tertentu untuk mengimplementasikan pintasan?
JellicleCat
1
Cuplikan hanyalah deskripsi cara pintas yang saya gunakan. Di Ubuntu Anda dapat membuat pintasan khusus di pengaturan keyboard. Namun, saya telah memutakhirkan versi Ubuntu saya dan sekarang saya dapat langsung memetakan tindakan "Mainkan (atau main / jeda)" ke kombinasi kunci yang saya pilih, yang terbukti lebih dapat diandalkan daripada menggunakan xdotool.
Jan
Bahkan lebih baik daripada --clearmodifiers adalah dengan mengeluarkan "keyup" untuk hotkey yang Anda gunakan untuk memanggil skrip. Kelemahannya adalah Anda perlu memperbarui skrip jika Anda mengubah hotkey untuk memanggil skrip.
vanadium
1

Alternatif (untuk kinerja snappier) untuk digunakan sleep 1 && xdotool ...adalah menggunakan xdotool untuk melepaskan kunci pintas Anda. Sedikit lebih panjang, tetapi Anda juga bisa menggunakannya

/bin/bash -c "xdotool keyup R Alt_L Ctrl_L && xdotool key XF86AudioPlay"
Alexander Mot
sumber