Jak ustawić Xmodmap przy logowaniu?

46

Ponieważ mój układ klawiatury mi nie odpowiada, uruchamiam się xmodmappo zalogowaniu. Skrypt ma nazwę .profilei działa OK, ale psuje interfejs Unity.

Chcę wiedzieć, gdzie umieścić xmodmaplinię, aby wykonała się przy moim logowaniu i niczego nie zepsuła.

Próbowałem już umieścić go w plikach .bash_logini .bash_profile, ale bez powodzenia ( xmodmapnie ustawiłem klawiatury).

Jakie są moje opcje?

Thiago Moraes
źródło
4
Jak psuje interfejs jedności?
djeikyb
1
Chciałbym dodać, że jeśli twój czas wykonania xmodmap jest zbyt długi, powinieneś usunąć wszystkie wpisy, których nie zmodyfikowałeś ręcznie. Zachowanie tylko zmian w pliku wejściowym sprawi, że xmodmap będzie działał znacznie szybciej.
user1071575,

Odpowiedzi:

29

Prawidłowe miejsce do umieszczenia xmodmap ~/.Xmodmap(tak, aby zmiany były odczytywane podczas uruchamiania) znajduje się w ~/.xinitrc(patrz objaśnienie poniżej), chociaż można alternatywnie umieścić xmodmappolecenie jako element startowy ( /usr/bin/xmodmap /home/user/.Xmodmap). Mogę powiedzieć, że w przypadku 12.04 (i przypuszczalnie 12.10) te dwie alternatywy zdecydowanie działają, ponieważ są one czytane po zalogowaniu lightdm. (Zmieniłem Return to Right Shift , a zmiana zaczęła obowiązywać dopiero po wpisaniu hasła i zalogowaniu się).

Uwaga: jeśli korzystasz z Xfce, w oficjalnym FAQ Xfce znajduje się informacja, że możesz potrzebować utworzyć element startowy zamiast go używać ~/.xinitrci że może być konieczne opóźnienie wykonania, aby xmodmapzmiany nie zostały nadpisane setxkbmap. Możesz użyć opóźnienia, aby to osiągnąć we wpisie startowym:

/bin/bash -c "sleep 20; /usr/bin/xmodmap /home/$USER/.Xmodmap"

(W przypadku wpisu startowego konieczne jest określenie ścieżek bezwzględnych)

Za każdym razem, gdy setxkbmapuruchamiana jest zmiana układu klawiatury, będziesz musiał xmodmap ~/.Xmodmapponownie uruchomić w terminalu.

Tworzenie ~/.xinitrc

Utwórz plik w folderze domowym o nazwie za .xinitrcpomocą

touch .xinitrc

i umieść w nim:

xmodmap ~/.Xmodmap

Twój Xmodmapplik powinien nie mieć wpisy w xmodmap -e " "stylu jak jest stosowany w terminalu do czasowego ustawiania wartości. Musi mieć wpisy w tym formacie:

keycode 65 = Tab
keycode 23 = Space

To jest często mylące, które z różnych Xplików (takich jak .xprofile, .xinitrcitp) są wczytywane przy starcie, ale .xinitrcwydaje się być nadal czytać poniżej 12,04, natomiast .Xmodmapczy .xinputrcnie są odczytywane przez siebie.


źródło
5
Pamiętaj, że jeśli dokonasz zmian za pomocą xmodmap -e '..., możesz pobrać odpowiedni format za xmodmap .Xmodmappomocą xmodmap -pke, który wydrukuje bieżące mapowanie - chociaż będziesz chciał to przefiltrować tylko do linii, które dotyczą wprowadzonej zmiany.
Barry Kelly,
1
To mi nie zadziałało. Stworzyłem .Xmodmap i .xinitrc | Następnie umieściłem xmodmap ~ / .Xmodmap w .xinitrc, a następnie w .Xmodmad mam kod dostępu 166 = wcześniejszy kod 167 = następny
miguelmorales85
wydaje się, że .xinitrc nie jest już uruchamiany automatycznie w Ubuntu 17.10. Będziesz musiał automatycznie uruchomić go za pomocą tego polecenia: / bin / bash -c "sleep 15 && /home/USERNAME/.xinitrc"
thebunnyrules
9

Korzystam z ElementaryOS (z menedżerem okien opartym na GNOME) i znalazłem rozwiązanie za pomocą xdgskryptów autostartu. Wielu menedżerów okien używa xdg, więc zakładam, że to podejście będzie działać również w innych środowiskach. Przynajmniej powinien działać z GNOME.

xdg uruchamia skrypty ~/.config/autostartpodczas logowania w sesji X. Aby załadować konfigurację xmodmap podczas logowania, dodaj następujący skrypt do ~/.config/autostart/xmodmap.desktop:

[Desktop Entry]
Name[en_US]=Xmodmap
Comment[en_US]=xmodmap ~/.Xmodmap
Exec=/usr/bin/xmodmap .Xmodmap
Icon=application-default-icon
X-GNOME-Autostart-enabled=true
Type=Application

Następnie wyloguj się i zaloguj ponownie, a konfiguracja Xmodmap powinna zostać załadowana.

Jeśli to nie działa, spróbuj uruchomić xmodmap w terminalu, aby sprawdzić, czy to xmodmap narzeka:

$ xmodmap ~/.Xmodmap

Jeśli nie pojawi się żaden błąd, uruchom następujące polecenie w celu debugowania:

$ sudo cat /var/log/syslog | grep -B 5 -A 5 xmodmap
kontrollanten
źródło
W Linux Mint 17 (na podstawie: Ubuntu 14.04.5) metoda automatycznego uruchamiania działała idealnie dla mnie po ~/.xinitrcnieudanym użyciu pliku. Jak zauważył hxpax, użytkownicy Mint (prawdopodobnie większość / wszystkie Linuxes wywodzące się z Debiana) mogą korzystać z okna dialogowego GUI w celu dodania wpisów autostartu Main Menu --> Preferences --> Startup Applications.
Mattst
2
Pracował Ubuntu 18.04
TooTone
2

Nie mam teraz interfejsu jedności przede mną, ale spróbuj kliknąć przycisk Aplikacje w programie uruchamiającym, a następnie wpisz start. Powinna istnieć aplikacja o nazwie Aplikacje startowe (lub niektóre takie). Kliknij i dodaj polecenie xmodmap (np xmodmap /home/thiago/.Xmodmap.).

djeikyb
źródło
Próbowałem tego jakiś czas temu, ale mi się nie udało. Jestem teraz w systemie Windows, ale spróbuję ponownie później i zgłoś się tutaj, jeśli zadziała. dzięki
Thiago Moraes
2
@Thiago Moraes Czy to podstawowe polecenie działa (jeśli nie, opublikuj błąd)? xmodmap .Xmodmap
djeikyb
+1 to działa. Aby być bardziej precyzyjnym, użyłem pełnej ścieżki dla .Xmodmap
pwned
3
to nie działa. Używam 16.04
miguelmorales85,
@ miguelmorales85 czy podstawowe polecenie działa w twoim terminalu? próbowałeś użyć absolutnej ścieżki?
djeikyb,
2

Na mennicy 17/18 mogę osiągnąć to, że wstawiłem moje skrypty do aplikacji startowej z 1 sekundowym opóźnieniem.

Ponieważ Mint 18 pochodzi z Ubuntu 1604, myślę, że możesz zrobić to samo lub najpierw zainstalować panel zarządzania aplikacją startową, jeśli go nie ma.

Mam nadzieję, że to pomoże.

hxpax
źródło
+1 działa dobrze. Nie potrzebowałem żadnych opóźnień w Linux Mint 17.
Mattst
@mattst Tak, opóźnienie jest opcjonalne.
hxpax
Potrzebowałem opóźnienia 5 sekund, aby to zadziałało. Dlatego użyłem następującego skryptu powłoki startowej: gist.github.com/ghagerer/58212241e37229f9d6fe3a133b34be97
Gerhard Hagerer
0

Nie cieszyłem się żadną z powyższych sugestii (opcja .bashrc nie była naprawdę wykonalna, ponieważ uruchamia xmodmap na każdym nowym terminalu)

Dotknąłem skryptu wywoływanego xmodstartup.shw moim katalogu domowym

  #!/bin/bash           
  sleep 1;               
  echo "running xmodmap" 
  xmodmap ~/.Xmodmap     

kiedy to zostało zapisane, zrobiłem to sudo chmod +x xmodstartup.sh

następnie po prostu dodałem plik wykonywalny do okna „preferencji aplikacji startowej” gnome. bish bosh, angielski układ i Español on altgr:)

Jay Edwards
źródło
-1

Umieszczenie xmodmap zmienia się ~/.bashrclub /etc/bash.bashrcniczego nie psuje.

Jedynym minusem jest to, że po każdym uruchomieniu należy otworzyć terminal, aby go aktywować.

Rasmus
źródło
3
Już to robię, ale problem polega na tym, że na każdym otwartym terminalu to polecenie jest wykonywane. To tylko chwila, ale to trochę denerwujące i wolałbym prawdziwe rozwiązanie. dzięki mimo wszystko
Thiago Moraes