Xbindkeys nie będą działać poprawnie

10

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, firefoxto działa poprawnie i otwiera Firefoxa, więc chyba xbindkeysdział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.

Ello
źródło
Huh, to dobre znalezisko! Nie ma limitu powtórzeń na odpowiedź na twoje pytanie, tylko limit czasu . Byłoby wspaniale, gdybyś mógł wrócić i opublikować to jako odpowiedź w ciągu 6 godzin. To również da ci przedstawiciela, jeśli ci na tym zależy. Jeśli naprawdę cię to nie obchodzi, po prostu dołączę twoje rozwiązanie do mojej odpowiedzi za kilka dni.
terdon
Czy kiedykolwiek zastanawiałeś się, jak xdotoolpowtórzyć klucz przy wciśniętym przycisku?
Farzher
Szczerze mówiąc, do tej pory tego nie próbowałem. Udało mi się sprawić, że League of Legends działa płynnie przy 60 klatkach na sekundę (w 12.04 wcale się nie zaczyna), więc gdy jestem w domu, grałem cały czas.
Ello
Przez kilka dni nie dostałem żadnych skrótów. Rozwiązanie było proste: Mój komputer Ubuntu ma skróty przed xbindkeys. Po prostu edytuj ustawienia kayboard, dodaj nowy niestandardowy skrót z akcjąxdotool getactivewindow key Home
BurninLeo
Wygląda na to, że próbujesz symulować niemiecki układ klawiatury. Dlaczego po prostu nie zmienisz układu klawiatury w ustawieniach systemu?
Rapti,

Odpowiedzi:

4

Problem xdotoolpolega na tym, że podczas naciskania prawdziwych klawiszy Xorg wielokrotnie wysyła zdarzenia naciśnięcia klawisza (patrz xevwyjś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

"sleep 0.2 && xdotool type --delay 15 '{'"
  Control+Alt + 7

spróbuj wykonać następujące czynności:

"xset r off; xdotool keyup --window 0 7 type --clearmodifiers --window 0 '{'; xset r on"
  Control+Alt + 7
midenok
źródło
Dziękuję za odpowiedź, ale korzystam z Manjaro z XFCE teraz i tam wyszło po wyjęciu z pudełka, więc nie trzeba spać.
Ello
@Ello, te odpowiedzi są nie tylko dla Ciebie, więc doceniamy najbardziej uniwersalne rozwiązanie.
midenok
3

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.

Ello
źródło
To bardzo dziwne, cieszę się, że to wymyśliłeś, ale naprawdę nie mogę zrozumieć, dlaczego tak się dzieje. W każdym razie dzięki za poświęcenie czasu na opublikowanie tego może pomóc kolejnej osobie z tym samym problemem.
terdon
Zamiast tego sleepmyślę, że chcesz dodać + releasedo kluczowych kombinacji. To powie, xbindkeysaby poczekać, aż klucz zostanie zwolniony, przed uruchomieniem polecenia.
wjandrea
2

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.1opóźnienia na początek). Jeśli keyupanuluję 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:

"xdotool keyup g key --clearmodifiers XF86AudioPlay"
Control + g
QuickishFM
źródło
1

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ć xvkbdzamiast tego.

  1. zainstalować xvkbd

    sudo apt-get install xvkbd
    
  2. Dodaj to do swojego .xbindkeysrcpliku

    "xvkbd -text '{'"
    Control+Alt + 7
    

To powinno działać.


UWAGI

Z jakiegoś powodu, na moim komputerze, xvkbduż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ąd xvkbdbiorą się jego localeustawienia.

terdon
źródło
nadal nie działa. nawet z odpowiednimi postaciami. jeśli napiszę xvkbd -text 'apple' w konsoli, wypisze jabłko, jeśli wykonam to za pomocą xbindkeys, nic się nie stanie. jeśli spojrzę na xbindkeys -v, zobaczę, że rozpoznał naciśnięte polecenie
Ello
Mam to do pracy, ale z czymś innym
Ello
@Ello great! Czego używałeś? Dla mnie działało dobrze. Czy możesz opublikować odpowiedź wyjaśniającą swoje rozwiązanie i zaakceptować ją?
terdon
Zmieniłem swój post, nie mogę odpowiadać na własne pytania, ponieważ brak reputacji. Przepraszam
Ello