Często podłączam klawiaturę USB do laptopa (oprócz zewnętrznego monitora i myszy, które praktycznie konwertują mojego laptopa na komputer stacjonarny) i wolę wtedy używać innego układu klawiatury.
Muszę ręcznie zmieniać bieżący układ klawiatury za każdym razem, gdy podłączam tę klawiaturę USB.
I chciałbym użyć do tego zautomatyzowanego sposobu, jeśli to możliwe.
Odpowiedź Radu na pytanie tutaj daje pewne wskazówki, ale wydaje się, że będę potrzebować skryptu uruchamiania do tego zadania, ponieważ identyfikator urządzenia dla mojej klawiatury USB zmienia się przy każdym uruchomieniu komputera.
Ten skrypt startowy prawdopodobnie najpierw będzie zawierał polecenie xinput -list | grep "USB Keyboard"
, a następnie inne polecenie, aby pobrać pierwszy wyświetlany numer identyfikacyjny klawiatury USB, a następnie użyć go w ostatnim poleceniu, aby ustawić mój wybrany układ dla tej klawiatury USB, jak poniżej:
setxkbmap -device <NUMBER> -layout <LAYOUT>
źródło
Odpowiedzi:
Po krótkich badaniach znalazłem rozwiązanie, chociaż wciąż jestem otwarty na inne (prawdopodobnie lepsze) odpowiedzi.
Oto skrypt startowy (który można dodać do aplikacji startowych ), który ustawi wprowadzoną ręcznie zmienną usbkbd_layout na identyfikatory urządzeń usbkbd znajdujące się na liście xinput :
Ten skrypt jest bardzo przydatny (i bardziej stabilny) w scenariuszach, w których użytkownik zaczyna korzystać z laptopa na komputerze stacjonarnym (z zewnętrzną klawiaturą, myszą i monitorem itp.), A także może być uruchamiany ręcznie za każdym razem, gdy podłączana jest zewnętrzna klawiatura USB ...
================================================== ========================
LEPSZE (prawie idealne) ROZWIĄZANIE - znalezione dzięki MinimusHeximus i odpowiednim autorom wątku, o którym wspominał w komentarzu poniżej:
Teraz mogę po prostu podłączyć klawiaturę USB i automatycznie zastosować inny układ klawiatury (TR-F) przy jednoczesnym zachowaniu domyślnego układu klawiatury (TR-Q) na moim laptopie!
Oto pliki i ich zawartość, które umożliwiają:
/etc/udev/rules.d/00-usb-keyboard.rules
/home/sadi/.bin/usb-keyboard-in_udev
/home/sadi/.bin/usb-keyboard-in
/home/sadi/.bin/usb-keyboard-out_udev
/home/sadi/.bin/usb-keyboard-out
Uwagi:
chmod - 755 /home/sadi/.bin/usb-keyboard-*
ABY DOSTOSOWAĆ TE USTAWIENIE DO RÓŻNYCH WYMAGAŃ:
lsusb
(Na przykład, mójlsusb
wyjściowy ma to dla mojego USB Keyboard:Bus 001 Device 006: ID 09da:0260 A4 Tech Co., Ltd
)xinput -list | grep "USB Keyboard"
dają mi dwie linie;↳ USB Keyboard id=14 [slave keyboard (3)]
i↳ USB Keyboard id=16 [slave keyboard (3)]
; które są następnie filtrowane zaawk
pomocą „=” jako separatora pola i przechwytywania drugiej części; następnie wycinanie tylko pierwsze dwie cyfry, a następnie używając tylko wartości w pierwszym wierszu)źródło
IF
musiałem użyćFOR
. Działa dla mnie teraz, dziękuję! gist.github.com/zvictor/193b567c14b5b6a679feW sterowniku udev można określić opcje sterownika X11, nie są wymagane żadne niestandardowe skrypty. Jako przykład, oto zawartość mojego /etc/udev/rules.d/99-usb-kbd.rules
Ta reguła zapewnia, że określona klawiatura USB korzysta z amerykańskiego układu w Xorg (wewnętrzna klawiatura mojego laptopa jest niemiecka, a to także mój podstawowy układ). Ważne punkty:
idVendor
iidProduct
z urządzeniem za pomocąlsusb
lubevtest
/usr/share/X11/xkb/symbols
. Zwróć uwagę, aby określić zarówno poprawny układ, jak i prawidłowy wariant./lib/udev/rules.d/64-xorg-xkb.rules
źródło
/var/log/Xorg.0.log
możliwych problemów. Możesz także użyćudevadm info
do sprawdzenia, czy ustawienia zostały zastosowane poprawnie.gsettings set org.gnome.settings-daemon.plugins.keyboard active false
. Jeśli również dodać taką notatkę, postaram się oznaczyć je jako na odpowiedź (zamiast tego niezdarny, długa i kręta droga ;-)/usr/share/X11/xkb/rules/evdev.lst
Właśnie ulepszyłem to rozwiązanie dla klawiatury bépo Typematrix (francuska wersja zoptymalizowanego doskonałego dvoraka) oraz w szerokim kontekście systemowym (zakłada, że masz dostęp do roota do komputera). Do działania potrzebne są tylko 3 pliki. Możesz sprawdzić plik dziennika w przypadku, gdy nie dowiesz się, co się nie powiedzie.
/etc/udev/96-usb-keyboard.rules
/etc/udev/bepo-typematrix-kbd.sh (absolutnie konieczne, aby użyć pośredniego skryptu tła)
/ etc / udev / bepo-typematrix-kbd
źródło
Po tym, jak dużo się bawiłem, właśnie na to teraz biegnę. Może napiszę pełny artykuł i opublikuję kod w repozytorium, jeśli byłoby to interesujące.
Skonfiguruj nowy zestaw reguł dla udev w ten sposób:
Reguła ma wywoływać skrypt powłoki za każdym razem, gdy jakieś działanie zostanie uruchomione przez urządzenie z podaną kombinacją dostawcy i identyfikatora produktu.
Po dodaniu nowego zestawu reguł uruchom ponownie usługę udev:
Uwaga: nie byłem w stanie osiągnąć wiarygodnych wyników, podając bardziej szczegółowe reguły dopasowania w tym pliku. Co najważniejsze, dodanie
ACTION
reguły dopasowania nie działało. O ile wiem, skrypt i tak został uruchomiony. Podczas dodawaniaACTION=="add"
skrypt nadal będzie wywoływany po usunięciu urządzenia. Bardzo dziwne i mylące.Jednak akcja, która uruchomiła regułę udev, będzie dostępna dla wywoływanego skryptu, jak pokazano poniżej.
Następnie sam skrypt. Cóż, niezupełnie. Zwróć uwagę na
wrapper
przyrostek w nazwie pliku. Oznacza to, że nie jest to rzeczywisty skrypt, ale opakowanie, które wywołuje skrypt i wykonuje go w tle, aby udev mógł zakończyć proces.~/.bin/switch-kb-layout-wrapper.sh
:Zmienna
ACTION
zawiera akcję udev uruchomioną przez urządzenie. Zwraca wartości takie jakadd
(urządzenie zostało podłączone) iremove
(urządzenie zostało usunięte). Wykorzystamy je później.~/.bin/switch-kb-layout.sh
:Zastąp moją nazwę użytkownika swoją nazwą podczas ustawiania
HOME
zmiennej ($(whoami)
tutaj nie będzie działać, ponieważ nie będzie ona wywoływana przez użytkownika, ale przezroot
).Do celów testowych dodałem kilka wierszy rejestrujących określone zdarzenia do pliku w moim katalogu domowym, aby sprawdzić, czy wszystko działa. Możesz je łatwo usunąć.
Wreszcie skrypty te muszą mieć uprawnienia do wykonywania. Warto również pamiętać, że skrypty te będą wywoływane przez
root
użytkownika, więc uważaj, co tam robisz.źródło
gsettings set org.gnome.settings-daemon.plugins.keyboard active false
nie działa zgodnie z przeznaczeniem, ponieważ skrypt jest uruchamiany przezroot
. W moich testach linia nie miała wpływu na to ustawienie.gsettings set org.gnome.settings-daemon.plugins.keyboard active false
jako użytkownik raz na zawsze, a następnie użycie tego skryptu bezgsettings set
poleceń ...Miałem problem z uprawnieniami do skryptu wykonanego przez udev. Rozwiązałem sudo w następujący sposób:
Ustaw mapę klawiatury dla każdego urządzenia
źródło
Możesz go również zdefiniować w pliku konfiguracyjnym Xorg.
Jest on ułożony w tej odpowiedzi wymiany stosu: /superuser//a/946575/437492
źródło
/etc/X11/xorg.conf.d/
(to jest miejsce, do którego należy się udać).