Mengapa perintah-perintah xte ini bekerja di terminal, tetapi tidak ketika terikat dengan xbindkeys?

18

xtePerintah ini , ketika saya menjalankannya di terminal, memicu mode Expo:

xte 'keydown Super_L' 'key S' 'keyup Super_L'

Namun, ketika saya meletakkan ini di file .xbindkeysrc saya:

"xte 'keydown Super_L' 'key S' 'keyup Super_L'"
  b:11

Tidak ada yang terjadi ketika saya mengklik tombol. Penjilidan berikut membuat huruf X muncul di konsol saya ketika saya menekan tombol 11:

"xte 'key X'"
  b:11

Jadi mengapa Expo tidak mengikat?


Ini adalah output verbal xbindkeys -n -vketika mengklik tombol 11:

Tombol tekan!
e.xbutton.button = 11
e.xbutton.state = 16
"xte 'keydown Super_L' 'key W' 'keyup Super_L'"
    m: 0x0 + b: 11 (mouse)
dapatkan layar 0 untuk jendela 2bb
Mulai program dengan fork + exec call
Pelepasan tombol!
e.xbutton.button = 11
e.xbutton.state = 16

Dan tidak ada yang terjadi. Apakah ini ada hubungannya dengan cara xbindkeysmenjalankan perintah? (fork + exec call)


Percobaan nomor dua.

expo.sh:

#!/usr/bin/env bash
export DISPLAY=:0
xte 'keydown Super_L' 'key S' 'keyup Super_L'

Menjalankan skrip ini dari baris perintah mengaktifkan Expo. Mengikatnya di xbindkeys:

"sh ~/expo.sh"
  b:11

Mengklik tombol mouse 11:

Tombol tekan!
e.xbutton.button = 11
e.xbutton.state = 16
"sh ~ / expo.sh"
    m: 0x0 + b: 11 (mouse)
dapatkan layar 0 untuk jendela 2bb
Mulai program dengan fork + exec call

Tidak ada yang terjadi!

Hubro
sumber
1
Anda mencoba menekan <Super> <S>? Saya tahu xbindkeys + xte terkadang pilih-pilih.
Seth
@Seth: Benar. Adakah cara untuk mengatasi rasa pilih-pilih?
Hubro
1
Coba 'keydown Super_L' 'keydown S' 'keyup S' 'keyup Super_L'.
Seth
@Seth: Tidak ada bedanya aku takut :(
Hubro
Apakah Anda meluncurkan kembali xbindkeys setelah Anda membuat perubahan? Terkadang itu perlu. Tujuan utama Anda adalah membuka ikhtisar ruang kerja?
Seth

Jawaban:

17

Solusi lain yang lebih sederhana: alih-alih hanya menggunakan "b: 11" dalam definisi xbindkeys, gunakan "b: 11 + release". Ini akan menunggu sampai Anda melepaskan tombol untuk menjalankan perintah.

Contoh:

"sh ~/expo.sh"
  b:11 + release
pengguna215129
sumber
2
Hubro harus kembali ke sini dan menandai ini sebagai jawaban yang benar ...
David Ljung Madison Stellar
7

Ini sangat aneh. Ternyata jika tombol mouse saya masih ditekan (belum dirilis) saat Super+Wtombol ditekan , tidak ada yang terjadi. Saya tidak tahu siapa yang harus disalahkan untuk itu (mungkin Kayu Manis?). Saya telah mengatasinya, dengan menambahkan penundaan singkat pada xteperintah:

xte 'usleep 100000' 'keydown Super_L' 'key S' 'keyup Super_L'

Sekarang menunggu 0,1 detik sebelum simulasi Super+S. Jika saya menekan dan menahan tombol mouse lebih dari 0,1 detik, tidak ada yang terjadi.

Ini adalah jawaban untuk masalah. Saya lebih suka jawaban yang tepat.

Hubro
sumber
Hubro, silakan lihat jawaban yang berperingkat lebih tinggi oleh pengguna215129 dan tandai sebagai benar
David Ljung Madison Stellar
1
@ DavidLjungMadison No. Itu bahkan bukan jawaban untuk pertanyaan saya, hanya saran untuk bekerja-sekitar.
Hubro
1
Saya ingin tahu apakah Anda mengerti jawabannya. Masalahnya adalah Anda mencoba mengirim kunci saat tombol masih turun. Menunggu pelepasan tombol berarti tidak akan mengirim kunci sampai tombol dilepaskan, sehingga menyelesaikan masalah Anda. Bukan solusi, ini adalah penjelasan tentang masalah ini dan cara untuk menyelesaikannya.
David Ljung Madison Stellar
1
Maka Anda masih tidak mengerti. The masalah adalah bahwa Anda mencoba untuk mengetik kunci sementara tombol turun, dan apa pun meluncurkan Expo mencari Super S, tidak Btn-2 + Super S. Perbaikan Anda adalah solusi karena tidak menyelesaikan masalah dengan menjamin bahwa tombol sudah habis, dan tidak berfungsi dalam banyak keadaan. Solusinya adalah (seperti yang sering terjadi dalam berurusan dengan peristiwa mouse) untuk menunggu rilis tombol sebelum memicu perintah apa pun, ini memastikan bahwa tombol tidak dicampur dengan keystroke.
David Ljung Madison Stellar
2
Dapat mengkonfirmasi bahwa jawaban user215129 memang tidak benar dan tidak menjawab pertanyaan. Melakukan penyelidikan saya sendiri pada masalah ini sekarang dan dalam kasus saya mengubahnya untuk melepaskan atau menunda bukanlah pilihan karena saya membutuhkannya untuk melakukan tindakan ketika tombol ditekan, dengan tindakan yang berbeda pada rilis. Lihat: askubuntu.com/questions/984054/...
Ethuil UI
2

Saya menghadapi masalah yang sama.

"xte 'key b'"

bekerja di konsol tetapi tidak di file parameter xbindkeys. Saya mengubah b dengan kode kuncinya, menggunakan perintah "xev" untuk mendapatkannya:

"xte 'key Ox62'"

Itu berhasil untuk saya

sebastien cossin
sumber
1

Coba dengan + Lepaskan

"xte 'keydown Super_L' 'key S' 'keyup Super_L'"
b:11 + Release

Itu mungkin bisa membantu.

Ivan Nikitovic
sumber
1

Memiliki masalah serupa saat menggunakan keymapper sxhkcd. Ternyata tombol pintas Anda yang sebenarnya terdeteksi masih ditekan.

Ada beberapa semi-workaround:

  • mencari acara rilis
  • tambahkan sleep 0.2di depan perintah Anda
  • gunakan pintasan dengan kunci-pemimpin
  • lepaskan pengubah pintas Anda di depan urutan xte Anda

Namun Anda tidak bisa mendapatkan tindakan waktu nyata dengan itu =)

Possum Gallo
sumber