Dlaczego te polecenia xte działają w terminalu, ale nie w połączeniu z xbindkeys?

18

To xtepolecenie, gdy uruchomię je w terminalu, uruchamia tryb Expo:

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

Jednak po umieszczeniu tego w pliku .xbindkeysrc:

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

Nic nie dzieje się po kliknięciu przycisku. Poniższe powiązanie sprawia, że ​​litera X pojawia się w mojej konsoli po naciśnięciu przycisku 11:

"xte 'key X'"
  b:11

Dlaczego więc nie działa wiązanie Expo?


Oto pełne wyjście xbindkeys -n -vpo kliknięciu przycisku 11:

Naciśnij przycisk!
e.xbutton.button = 11
e.xbutton.state = 16
„xte” keydown Super_L ”klawisz W” „keyup Super_L” ”
    m: 0x0 + b: 11 (mysz)
dostałem ekran 0 dla okna 2bb
Uruchom program z wywołaniem fork + exec
Zwolnij przycisk!
e.xbutton.button = 11
e.xbutton.state = 16

I nic się nie dzieje. Czy to ma coś wspólnego ze sposobem xbindkeyswykonywania polecenia? (rozwidlenie + wywołanie exec)


Próba numer dwa.

expo.sh:

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

Wykonanie tego skryptu z wiersza poleceń aktywuje Expo. Powiązanie w xbindkeys:

"sh ~/expo.sh"
  b:11

Kliknięcie przycisku myszy 11:

Naciśnij przycisk!
e.xbutton.button = 11
e.xbutton.state = 16
„sh ~ / expo.sh”
    m: 0x0 + b: 11 (mysz)
dostałem ekran 0 dla okna 2bb
Uruchom program z wywołaniem fork + exec

Nic się nie dzieje!

Hubro
źródło
1
Próbujesz nacisnąć <Super> <S>? Wiem, że xbindkeys + xte mogą czasem być wybredni.
Seth
@Seth: Prawidłowo. Czy jest jakiś sposób obejścia tego problemu?
Hubro
1
Spróbować 'keydown Super_L' 'keydown S' 'keyup S' 'keyup Super_L'.
Seth
@Seth: Obawiam się, że nie ma znaczenia :(
Hubro,
Czy uruchomiłeś ponownie xbindkeys po dokonaniu zmian? Czasami jest to konieczne. Twoim ostatecznym celem jest otwarcie przeglądu obszaru roboczego?
Seth

Odpowiedzi:

17

Inne prostsze rozwiązanie: zamiast używać tylko „b: 11” w definicji xbindkeys, użyj „b: 11 + release”. Będzie czekać, aż zwolnisz przycisk, aby uruchomić polecenie.

Przykład:

"sh ~/expo.sh"
  b:11 + release
użytkownik215129
źródło
2
Hubro powinien tu wrócić i zaznaczyć to jako poprawną odpowiedź ...
David Ljung Madison Stellar
7

To bardzo dziwne. Okazuje się, że jeśli mój przycisk myszy zostanie naciśnięty (jeszcze nie zwolniony) podczas Super+Wsymulacji naciśnięcia klawisza, nic się nie stanie. Nie wiem za kogo winić (może cynamon?). Pracowałem nad tym, dodając krótkie opóźnienie do xtepolecenia:

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

Teraz czeka 0,1 sekundy przed symulacją Super+S. Jeśli przytrzymam przycisk myszy dłużej niż 0,1 sekundy, nic się nie stanie.

To jest odpowiedź na obejście. Wolałbym właściwą odpowiedź.

Hubro
źródło
Hubro, proszę zobaczyć wyżej ocenioną odpowiedź użytkownika215129 i zaznaczyć ją jako poprawną
David Ljung Madison Stellar
1
@DavidLjungMadison Nie. To nie jest nawet odpowiedź na moje pytanie, tylko sugestia do obejścia.
Hubro
1
Zastanawiam się, czy rozumiesz odpowiedź. Problem polega na tym, że próbujesz wysłać klucze, gdy przycisk jest nadal wciśnięty. Oczekiwanie na zwolnienie przycisku oznacza, że ​​nie wyśle ​​kluczy, dopóki przycisk nie zostanie zwolniony, co rozwiąże problem. To nie jest obejście problemu, to wyjaśnienie problemu i sposób jego rozwiązania.
David Ljung Madison Stellar
1
Więc nadal nie rozumiesz. Problemem jest to, że starają się wpisać klucze, gdy przycisk jest w dół, a co uruchamia Expo szuka Super-S, nie Btn-2 + Super-S. Twoja poprawka jest obejściem, ponieważ nie rozwiązuje problemu poprzez zagwarantowanie, że przycisk jest włączony i nie działa w wielu okolicznościach. Rozwiązaniem jest (jak to często bywa w przypadku zdarzeń myszy) oczekiwanie na zwolnienie przycisku przed uruchomieniem jakichkolwiek poleceń, co gwarantuje, że przycisk nie zostanie pomieszany z naciśnięciem klawisza.
David Ljung Madison Stellar
2
Potwierdza, że ​​odpowiedź user215129 jest rzeczywiście nieprawidłowa i nie odpowiada na pytanie. Przeprowadzenie własnego badania tego problemu w tej chwili, aw moim przypadku zmiana go na zwolnienie lub opóźnienie nie jest opcją, ponieważ muszę go wykonać, gdy przycisk jest wciśnięty, z inną akcją po zwolnieniu. Zobacz: askubuntu.com/questions/984054/…
Ethuil UI,
2

Napotkałem ten sam problem.

"xte 'key b'"

działał w konsoli, ale nie w pliku parametrów xbindkeys. Zmieniłem b przez jego kod klucza, używając polecenia „xev”, aby go uzyskać:

"xte 'key Ox62'"

To zadziałało dla mnie

Sebastian Cossin
źródło
1

Wypróbuj z + Release

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

To może pomóc.

Ivan Nikitovic
źródło
1

Mają podobny problem podczas używania keymappera sxhkcd. Okazuje się, że rzeczywiste klawisze skrótów są wykrywane jako nadal naciskane.

Istnieje kilka częściowych obejść:

  • wyszukaj wydarzenie
  • dodaj sleep 0.2przed swoim poleceniem
  • użyj skrótu z klawiszem wiodącym
  • zwolnij modyfikatory skrótów przed sekwencją xte

Jednak nie możesz uzyskać akcji w czasie rzeczywistym dzięki temu =)

Possum Gallo
źródło