Mam trochę problemu. Chciałem ponownie przypisać niektóre skróty klawiszowe, do których jestem przyzwyczajony z mojego poprzedniego systemu, ale nie mogę go poprawnie uruchomić xbindkeys
.
xbindkeys
rozpoznaje kombinację, ale jakoś polecenie się nie uruchamia.
Jeśli użyję polecenia
xdotool key braceleft
Wysyła mi poprawny {
znak w konsoli. Jednak jeśli użyję tego samego polecenia w xbindkeys, nic się nie stanie. Jeśli zastąpię polecenie, firefox
to działa poprawnie i otwiera Firefoxa, więc chyba xbindkeys
działa.
Chcę osiągnąć następujące cele:
Chcę wpisać znak {
w aktywnym oknie za pomocą
Alt_R+ 7lub Alt_Left+ Ctrl+, 7aby móc używać obu. Wiem, że Alt_R(AltGr) to właściwy sposób, ale na niemieckich klawiaturach jakoś trudno jest wpisać braceleft za pomocą AltGrklawisza (Alt_R), więc MUSISZ zamiast tego użyć Alt_L+ Control+ 7(tak jak przyzwyczaiłem się w poprzednim systemie). Jakoś sprawił, że działał poprawnie w 12.04, ale nie mogę go uruchomić w 14.04.
Jakieś sugestie? Próbowałem kilku poleceń. Wszystkie działały w konsoli, ale żadne z nich nie działało po uruchomieniu przez xbindkeys
xdotool type '{'
xdotool key braceleft
xdotool key ISO_Level3_Shift+7
xvkbd -xsendevent -text '{'
xvkbd -xsendevent -text '\[Alt_R]+7'
To jest moja konfiguracja, która nie będzie działać
"xdotool key braceleft"
Control+Alt + 7
Działa to jednak:
"firefox"
Control+Alt + 7
Edycja rozwiązania
Kiedy próbowałem jeszcze kilku rzeczy, zauważyłem, że xdotool wydaje się uruchamiać zbyt wcześnie. Zmieniłem konfigurację w następujący sposób:
"sleep 1 && xdotool type --delay 15 '{'"
Control+Alt + 7
TERAZ wysyła poprawny {znak do aktywnego okna. Teraz pozostaje tylko spać i opóźnić do realnej wartości, ponieważ 1 sekunda wydaje się nieco za długa :)
** Informacje o dodaniu ** Cóż, teraz udało mi się znaleźć odpowiednie wartości. JEDNAK działa to tylko wtedy, gdy zwolnisz klawisze, aż do zakończenia okresu uśpienia. Jeśli jesteś zbyt wolny, jeśli nie będzie działać.
To moja obecna konfiguracja dla wszystkich niewygodnych niemieckich postaci AltGr
"sleep 0.2 && xdotool type --delay 15 '{'"
Control+Alt + 7
"sleep 0.2 && xdotool key --delay 15 at"
Control+Alt + q
"sleep 0.2 && xdotool type --delay 15 '€'"
Control+Alt + e
"sleep 0.2 && xdotool type --delay 15 '['"
Control+Alt + 8
"sleep 0.2 && xdotool type --delay 15 ']'"
Control+Alt + 9
"sleep 0.2 && xdotool type --delay 15 '}'"
Control+Alt + 0
"sleep 0.2 && xdotool type --delay 15 '~'"
Control+Alt + plus
Jednak jeśli chcesz wpisać wiele znaków @ (na przykład), musisz nacisnąć Ctrl + Alt + Q zgodnie z przeznaczeniem, ale zwolnij wszystkie klawisze, a następnie naciśnij go ponownie. Jest to jednak o wiele, wiele lepsze niż brak opcji Control + Alt zamiast AltGr, ale nie jest tak skuteczne, jak ja zostałem użyty. Może też znajdę rozwiązanie tego problemu.
xdotool
powtórzyć klucz przy wciśniętym przycisku?xdotool getactivewindow key Home
Odpowiedzi:
Problem
xdotool
polega na tym, że podczas naciskania prawdziwych klawiszy Xorg wielokrotnie wysyła zdarzenia naciśnięcia klawisza (patrzxev
wyjście). Aby temu zaradzić, należy tymczasowo wyłączyć funkcję powtarzania, a następnie wygenerować zdarzenie KeyRelease dla klawisza, który był wyłączony.Zamiast
spróbuj wykonać następujące czynności:
źródło
Kiedy próbowałem jeszcze kilku rzeczy, zauważyłem, że xdotool wydaje się uruchamiać zbyt wcześnie. Zmieniłem konfigurację w następujący sposób:
TERAZ wysyła poprawny {znak do aktywnego okna. Teraz pozostaje tylko spać i opóźnić do realnej wartości, ponieważ 1 sekunda wydaje się nieco za długa :)
** Informacje o dodaniu ** Cóż, teraz udało mi się znaleźć odpowiednie wartości. JEDNAK działa to tylko wtedy, gdy zwolnisz klawisze, aż do zakończenia okresu uśpienia. Jeśli jesteś zbyt wolny, jeśli nie będzie działać.
To moja obecna konfiguracja dla wszystkich niewygodnych niemieckich postaci AltGr
Jednak jeśli chcesz wpisać wiele znaków @ (na przykład), musisz nacisnąć Ctrl + Alt + Q zgodnie z przeznaczeniem, ale zwolnij wszystkie klawisze, a następnie naciśnij go ponownie. Jest to jednak o wiele, wiele lepsze niż brak opcji Control + Alt zamiast AltGr, ale nie jest tak skuteczne, jak ja zostałem użyty. Może też znajdę rozwiązanie tego problemu.
źródło
sleep
myślę, że chcesz dodać+ release
do kluczowych kombinacji. To powie,xbindkeys
aby poczekać, aż klucz zostanie zwolniony, przed uruchomieniem polecenia.Jak udokumentowano w podobnych pytaniach ( Dlaczego te polecenia xte działają w terminalu, ale nie w połączeniu z klawiszami xbindkeys? ), Możesz poprosić
xbindkeys
o wyzwolenie zdarzeń w momencie wydania (po naciśnięciu klawisza):W ten sposób nie ma konfliktu między klawiszami używanymi dla skrótu a kluczami wysłanymi.
źródło
Ostatnio miałem ten problem, w którym próbowałem symulować klawisz Media Play / Pause (XF86AudioPlay) za pomocą Ctrl + G. Po kilku badaniach okazało się, że muszę nie tylko anulować Kontrolę , ale także klawisz g (który jest co wymagało
sleep 0.1
opóźnienia na początek). Jeślikeyup
anuluję oba te klucze za pomocą xdotool, a także przełącznika --clearmodifiers, to zadziała. To jest moje nowe polecenie w moim pliku .xbindkeys.rc:źródło
Nie jestem pewien, dlaczego to nie działa
xbindkeys
, myślę, że musisz określić okno, w którym chcesz pisać. Jako obejście można użyćxvkbd
zamiast tego.zainstalować
xvkbd
Dodaj to do swojego
.xbindkeysrc
plikuTo powinno działać.
UWAGI
Z jakiegoś powodu, na moim komputerze,
xvkbd
używa jednego z moich dodatkowych układów (hiszpański) zamiast mojego głównego (amerykański angielski), co powoduje{
drukowanie"
. Jeśli masz również ten problem, po prostu pobaw się trochę, aby dowiedzieć się, który klawisz odpowiada{
zastosowanemu układowi. Możesz też kopać głębiej i dowiedzieć się, skądxvkbd
biorą się jegolocale
ustawienia.źródło