Stała xmodmap w Ubuntu 13.04

72

Nie mogę uruchomić Xmodmap podczas logowania w Ubuntu 13.04. Szukałem w okolicy, w tym w askubuntu i wszystkie znalezione odpowiedzi nie działają.

Mam plik o nazwie .Xmodmap w moim katalogu domowym, który zawiera pożądane mapowania. Jeśli uruchomię go ręcznie, działa dobrze, więc nie ma tam błędu. Aby uruchomić go przy starcie, próbowałem:

  1. Korzystanie z różnych .xinitrczawierających jedno z następujących poleceń:

    • xmodmap .Xmodmap
    • xmodmap ~/.Xmodmap
    • /usr/bin/xmodmap /home/NAME/.Xmodmap
    • if [ -s ~/.Xmodmap ]; then
      xmodmap ~/.Xmodmap
      fi
  2. Używanie .Xresourceszamiast .xinitrcz tymi samymi odmianami.

  3. Ustawienie go jako aplikacji startowej.

Żadne z powyższych nie działa w Ubuntu 13.04 (64-bit). Widziałem także kilka pomysłów na temat globalnej zmiany mapowań klawiatury, ale większość z nich nie miała zastosowania w Ubuntu 13.04 (tj. Odpowiednie pliki nie istniały tam, gdzie określono) i wolę nie dotykać ustawień globalnych.

Alexander Karatarakis
źródło

Odpowiedzi:

81

Ubuntu już nie używa xmodmap, ale zamiast tego używa xkb(o ile rozumiem, ułatwia to między innymi układy klawiatury na okno).

Są dostępne systemowe pliki map

/usr/share/X11/xkb/symbols/

Wydaje się, że mapy są ładowane hierarchicznie, z pcmapą jako katalogiem głównym i dowolnym językiem (np. en) Jako dzieckiem katalogu głównego.

W moim konkretnym przypadku fizycznie zamieniłem Page Up with Home i Page Down with End na klawiaturze, więc bardzo nieuprzejmie wprowadziłem zmiany w pcmapie całego systemu , jak następuje:

 key <HOME> {    [  Prior        ]   };
 key <PGUP> {    [  Home         ]   };
 key  <END> {    [  Next         ]   };
 key <PGDN> {    [  End          ]   };

UWAGA: Aby zmusić Xorg do korzystania z nowej mapy klawiatury, może być konieczne usunięcie istniejących wstępnie skompilowanych map (* .xkm) w

/var/lib/xkb/

a następnie uruchom ponownie Xorg.

Istnieją różne zasoby xkb, ale ten jest związany z Ubuntu.

Daniel
źródło
9
Począwszy od Ubuntu 14.04, jest to niestety najłatwiejszy sposób zamiany kluczy. Możesz uruchomić xmodmap podczas logowania, dodając go do aplikacji startowych, ale jeśli zawiesisz, hibernujesz itp., Musisz ręcznie uruchomić go lub utworzyć skrypty demona startowego.
holocronweaver
Mogę przemapować klawiszy w zależności od modyfikatorów: unmodified shift altgr* shift+altgr. Ale co left alti super key?
Farzher
7
Nie sądzę, żeby twoje pierwsze zdanie było prawdziwe. Czy masz jakieś źródło? Trudno mi uwierzyć, że „sposobem Ubuntu” ponownego mapowania klawiszy byłoby edytowanie map klawiatury xkb. Poza tym, że jest tajemniczy, ma to problem polegający na tym, że niestandardowe mapy są usuwane po xkbaktualizacji.
Mateus Araújo
1
To powiedziawszy, jest to jedyna niezawodna metoda zmiany mapowania kluczy na Ubuntu.
Mateus Araújo
1
Musi być lepszy sposób. Znam dokładny kod, który chcę zmapować, ale kod 217 nie jest nawet wymieniony w xkb. Nie widzę nawet sposobu na dodanie nowych kodów.
Jonathan
13

Dla mnie konfiguracja xkb jest zbyt skomplikowana, jeśli chcesz ponownie mapować 1 lub 2 klucze w sposób niedostępny w Ustawieniach systemu. Ponadto rozwiązanie powinno pozostać po stronie użytkownika, bez edycji „/ usr / share / X11 / xkb / symbols /” itd. Wymuś ładowanie „xmodmap ~ / .Xmodmap” przy użyciu aplikacji startowych działa tylko do zawieszenia, zmiany użytkowników lub zmień układ klawiatury. Tak więc, jak sugeruje holocronweaver, przy pomocy fragmentów kodu, które znalazłem, stworzyłem skrypt Pythona do załadowania przy uruchamianiu sesji, który w razie potrzeby ponownie ładuje „~ / .Xmodmap”.

Sprawdź raport o błędzie # 1243642 (komentarz # 6) i pobierz go tutaj .

dedalu
źródło
1
Nadal działa od 15.10 :-) Dzięki!
lalomartins
Link do tego legendarnego skryptu wydaje się być zepsuty. Czy ktoś mógłby umieścić to na githubie?
Epigene
Świetna - i jedyna realna - odpowiedź! Praca w 16.04. Aby działał w Python3, zmieniono: „importuj gobject” na „z gi.repository importuj GObject jako gobject”.
Craig Hicks
1
@Epigene - link już istnieje
Craig Hicks
Chwała niech będzie! Geniusz działa.
dmanexe
6

Miałem ten problem w Ubuntu 14.04 i znalazłem rozwiązanie tutaj . Najwyraźniej Ubuntu nie jest w stanie skonfigurować klawiatury od razu po zalogowaniu, ale jest to trochę później. Więc jeśli dodasz polecenie

sleep 4 && xmodmap ~/.Xmodmap &

do ~/.bash_profiletego powinien działać (działa dla mnie).

EDYCJA: Wydaje się, że działa to tylko po zalogowaniu, a nie po uruchomieniu. Będę musiał to zbadać później.

dremodaris
źródło
1
Jakieś szczęście, że ustawienie to działa po zawieszeniu / hibernacji?
Jonathan
Nie, niestety nadal nie mogę go uruchomić po uruchomieniu. Za każdym razem, gdy uruchamiam komputer, otwieram terminal i xmodmap ~/.Xmodmap
wpisuję
pamiętaj, że na Ubuntu 16.04 powinieneś używać .profile
Vitor Abella
5

Przekształć Caps Lockw Escdo vimużycia

Oto mój wariant skryptu uruchamiania mapowania kluczy. Przekształca Caps Locksię Escw dowolną klawiaturę do użytku z vi, vimlub gvim.

W przeciwieństwie do odpowiedzi z q4w56 , ta odpowiedź nie używa żadnej nieskończonej while; dopętli. W przeciwnym razie jeden rdzeń mojego dwurdzeniowego procesora uderzyłby o 42% co 5 sekund, znacznie zmniejszając ładowanie baterii laptopa.

#!/usr/bin/env bash
sleep 4
xmodmap -e "clear Lock"
xmodmap -e "keysym Caps_Lock = Escape"

Zapisz go jako skrypt. Udostępnij plik za pomocą chmod +x. Dodaj nazwę skryptu i lokalizację do Session and Startup → Application Autostart(w Xubuntu).

Zachowanie klawiatury dla tego użytkownika pozostanie trwałe po ponownym uruchomieniu i wylogowaniu, ale nie zostanie zawieszone. Trwałość poprzez zawieszenie można osiągnąć , ale niestety tylko na poziomie systemu, a nie na poziomie użytkownika.

Uzasadnienie zmiany mapowania klawiatury

W dzisiejszym świecie komputerów Caps Lockklucz jest bardzo mało przydatny . Ogólnie rzecz biorąc, należy powstrzymywać się od używania WSZYSTKICH CZASÓW z powodu zarówno netykiety, jak i oddzielenia prezentacji i treści . Co więcej, przypadkowe naciśnięcie Caps Lockklawisza podczas edytowania tekstu vimnie zawsze jest od razu zauważane, ale niezmiennie skutkuje raczej irytującym vimzachowaniem . Całkowite wyłączenie Caps Lockklucza i zmiana jego przeznaczenia na Escklucz łatwy do osiągnięcia skutkuje podwójną wygraną w vimużyciu.

Serge Stroobandt
źródło
Zastąpienie funkcji Caps Lockklucza może być prawdziwą oszczędnością dla vimużytkowników komputerów Apple MacBook bez Escklucza .
Serge Stroobandt
3
Lepiej przemapować capslockdo ctrl. To rozwiązuje wiele innych problemów, więc w Vimie możesz użyć capslock+ [dla EscPrzepraszam za wtrącanie się, ale czułem się zobowiązany do zasugerowania tego.
user907860,
Czym dokładnie jest zawieszenie? Czy to zamyka pokrywę twojego laptopa? Po tym Twoje rozwiązanie nie działa? Jak korzystać z vima po zamknięciu pokrywy laptopa?
Marko Avlijaš
@ MarkoAvlijaš Oczywiście How do you use vim after you close the lid on your laptop?otwierając pokrywę!
Serge Stroobandt
Haha, nigdy bym tego nie zgadł. Mam na myśli, że Caps Lock nie jest już mapowany na Esc, po czym?
Marko Avlijaš
3

Miałem też problem na Ubuntu 16.04 z fcitx i miałem rozwiązanie na wiki fcitx , ale potrzebuje fcitx w wersji 4.2.7 lub nowszej

  • touch ~/.Xmodmap
  • napisz konfigurację
  • uruchom się ponownie, a fcitx spróbuje go załadować automatycznie

Istnieje również wyjaśnienie przyczyny.

Bluethon
źródło
1
Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
Videonauth,
@Videonauth Zmodyfikowałem swoją odpowiedź
Bluethon,
Dziękuję bardzo :) Zostawiam tutaj swój komentarz, aby osoby w cue recenzji mogły zobaczyć, że coś zmieniłeś.
Videonauth,
@Videonauth to moja pierwsza odpowiedź i mam słabą znajomość języka angielskiego, więc popełniłem błąd. i dziękuję za radę. : P
Bluethon
Nie ma za co. Udzielanie odpowiedzi jest dobrym sposobem na przyczynienie się do społeczności.
Videonauth,
3

Odpowiedź Daniela wskazała mi właściwą drogę, ale chciałbym ją rozwinąć.

Działa dla mnie na Linux Mint 17.2 i Ubuntu 16.04.

Próbowałem wszystkich zwrotów, o których mogłem nadal myśleć xmodmap, ale wszystkie zawodzą, gdy system przechodzi w tryb uśpienia. To samo dotyczy nawet skryptów uruchamiania aplikacji, które są używane setxkbmapw przypadkach, gdy * demon ustawień (dla mnie jest to xfce4) działa później niż skrypt --- i tak naprawdę nie można wpływać na kolejność.

To, co w końcu wymyśliłem, zawiera następujące składniki:

1) Napisz minimalny plik mapowania klawiatury dla /usr/share/X11/xkb/symbols. Nazwijmy plik mylayoutMoże to być tak proste, jak

xkb_symbols "basic" {
  name[Group1] = "My Layout";
  include "us"
  key <AE03> { [ 3, numbersign, sterling, sterling] };
  include "level3(ralt_switch)"
}
  • basic to tylko nazwa, spotkamy się później.
  • name[Group1]Podobnie jest tylko nazwa wydaje, ale to nie odgrywają żadnej roli później.
  • include "us"zawiera zwykłą klawiaturę amerykańską. Właściwie usto inny plik w tym samym katalogu. Dostosowujemy układ klawiatury. Wybierz inny w razie potrzeby. Uwaga: brak średnika do zakończenia tego wiersza.
  • keyLinia jest adaptacja klawiaturze, bardziej może obserwować. <AE03>Można znaleźć w plikach poniżej /usr/share/X11/xkb/keycodes. Skorzystaj z xevprogramu, aby dowiedzieć się, że klawisz „3” ma kod 12 i w pliku kodów Xfree86jest mapowany <AE03>.
  • Wreszcie kolejna includedyrektywa aktywująca inną opcję klawiatury, w tym przypadku chcę mieć prawy klawisz Alt, który będzie klawiszem zmiany poziomu 3, tj. Klawiszem, który daje dostęp do sterlingznaku, który zdefiniowałem powyżej. level3to po prostu nazwa pliku w tym samym folderze z ralt_switchjedną jego częścią. Rozejrzyj się i wybierz, co musisz uwzględnić.

2) Ja nie nie umieścić mylayoutw folderze systemowym. Zamiast tego utworzyłem tylko miękkie łącze z folderu systemowego do folderu, który mi się podoba, aby natychmiast zobaczyć, że nie jest to oprogramowanie podstawowe.

3) Ponadto nie naprawiłem evdev.xml, ponownie, aby zapobiec problemom z aktualizacją. Ale byłoby to konieczne, aby znaleźć mylayout w edytorze konfiguracji klawiatury (w przypadku Xfce4 xfce4-keyboard-settings). Zamiast tego użyłem xfce4-settings-editori zmieniłem keyboard-layout->XkbLayoutna mylayout(nazwa pliku) i XkbVariantna basic(patrz wyżej). Następnie mylayout/basicwyświetla się również w edytorze ustawień klawiatury. Wpis evdev.xmlwydaje się być niezbędny, aby móc wybrać układ.

W ten sposób ustawienia klawiatury przetrwają teraz w trybie uśpienia i uruchomią się ponownie.

Więcej informacji można znaleźć tutaj: http://www.charvolant.org/~doug/xkb/html/node5.html .

Inne podejście do rozwiązania problemu z trybem uśpienia (sam nie próbowałem) można znaleźć tutaj: https://www.vinc17.net/unix/xkb.en.html .

AKTUALIZACJA: pracowałem z Mint 18.3 w tym samym momencie zmieniłem ustawienia w edytorze ustawień xfce4, jak opisano powyżej.

AKTUALIZACJA: Z 18.04, gdm3 jako menedżer wyświetlania i XFCE4 jako menedżer okien, wygląda na to, że ~ / .Xmodmap jest ponownie odczytywany i ustawienia wydają się przetrwać zawieszenie. (Rzadko używam zawieszenia i nigdy nie jestem pewien, w którym trybie jest naprawdę laptop).

Harald
źródło
2

REWIZJA

Aktualizacja na początku 2018 roku przerwała trwałość - automatyczne ponowne ładowanie mapy klawiszy po zawieszeniu lub hibernacji. Ponieważ metody wykorzystujące skrypty /etc/pm/sleep.d przestały działać (przestarzałe?), Pozostało tylko nowe podejście, używając / lib / systemd / system-sleep i nieco innych skryptów (które zaczęły działać na mapach klawiszy!).

Dlatego ten post został zaktualizowany do nowszej metody utrwalania i obejmuje normalne początkowe ładowanie mapy klawiszy, które również zaczęło działać. Procedura konwertowania pliku .Xmodmap na .xkbmap pozostaje niezmieniona.

Uwaga: jest to rozwiązanie dla użytkownika. Aby uzyskać odpowiedź na urządzenie, zobacz, jak zastosować mapę klawiszy do pojedynczego urządzenia . Metodę tę można dostosować do zastosowania tutaj.

Najpierw zmodyfikuj plik .Xmodmap zgodnie z potrzebami. Są one łatwiejsze do edycji bezpośrednio niż pliki .xkbmap. Po załadowaniu:

xmodmap .Xmodmap

następnie przekonwertuj na plik .xkb:

xkbcomp $ DISPLAY $ HOME / .xkbmap

Aby automatycznie załadować podczas uruchamiania, otwórz aplikacje startowe, kliknij Dodaj, aw wierszu polecenia wprowadź:

xkbcomp /home/user/.xkbmap ": 0"

(„użytkownik” zastępuje się rzeczywistą nazwą użytkownika.) W polu Nazwa wpisz prawdopodobnie Załaduj mapę klawiatury. W razie potrzeby dodaj komentarz i naciśnij Zapisz.

Mapa klawiszy będzie się teraz ładować przy każdym uruchomieniu systemu, ale nie przetrwa zawieszenia ani hibernacji. W tym celu utwórz nowy plik w / lib / systemd / system-sleep, prawdopodobnie o nazwie 60_xkbmap, który zawiera:

#!/bin/sh
case $1/$2 in
  pre/*)
    # Place pre-suspend commands here
    exit 0
    ;;
  post/*)
    # Place post-suspend commands here
    export DISPLAY=":0"
    export XAUTHORITY="/home/user/.Xauthority"
    su user -c "xkbcomp /home/user/.xkb/xkb-map $DISPLAY 2>/dev/null"
    ;;
esac

( Patrz. ) Jak wyżej, zastąp „użytkownik” rzeczywistą nazwą użytkownika.

Mapa klawiszy powinna się teraz automatycznie ładować i pozostać trwała. Uwaga:

  • Dotyczy aktualnej wersji LTS, 16.04 i prawdopodobnie także późniejszych.
  • Zaczerpnięte z postu 14 wyżej wymienionego wątku błędu.
  • Wcześniejsze komentarze dotyczyły oryginalnego postu.
u2n
źródło
Próbuję tej metody teraz i teraz, kiedy uruchamiam terminal, otrzymuję kilka takich wiadomości: Ostrzeżenie: Brak zdefiniowanych symboli dla <AB11> (kod klucza 97) Ostrzeżenie: Brak zdefiniowanych symboli dla <JPCM> (kod dostępu 103) Ostrzeżenie: Brak zdefiniowanych symboli dla <I120> (kod klucza 120) ...... wiele innych nie jest pewnych, jakie będą tego konsekwencje. Ktoś wie?
zaginione dziecko
Ta metoda pomimo wyżej wymienionych ostrzeżeń działa, ale tylko tymczasowo - po chwili mapowanie w jakiś sposób zostaje zapomniane, a superklucz powraca do domyślnej funkcji. Wypróbuję to na odwrót - ponownie mapuję podstawowe skróty edycji na moim komputerze Mac, aby używać klawisza Control zamiast klawisza Command i sprawdzać, czy to działa. Chcę tylko, aby moje polecenia cut-copy-paste-undo-redo były takie same na komputerach Mac i Ubuntu. Czuję się bardzo sfrustrowany, gdy menu wyszukiwania pojawia się na Ubuntu za każdym razem, gdy próbuję coś skopiować lub wkleić.
zaginione dziecko
1

To mnie też potknęło, kiedy zaktualizowałem system Ubuntu 12.04 do 13.04.

Na szczęście to ustawienie jest teraz (a może zawsze było) łatwo dostępne w preferencjach klawiatury i można je zmienić kilkoma kliknięciami myszy.

  1. Idź do Ustawienia systemowe > Układ klawiatury > Opcje ...
  2. W opcjach układu klawiatury kliknij strzałkę, aby wyświetlić opcje pozycji klawisza Ctrl .
  3. Umieść znacznik wyboru na Zamień Ctrl i Caps Lock .

Proszę bardzo: Lewy Control i Caps Lock zmieniły pozycje.

Nie zapomnij usunąć ~/.Xmodmappo dokonaniu zmiany.

glts
źródło
Być może zostało to zanegowane, ponieważ nie odnosi się do xmodmap, ale tak właśnie odkryłem, że użycie Gnome Tweak mogło być przyczyną niektórych dziwnych mapowań.
dragon788
Nie widzę tego w 16.04, czy to nadal możliwe?
chrismarx
1
@chrismarx Nie, usunęli go. Dziś (16.04) ustawić XKBOPTIONS="ctrl:swapcaps"w /etc/default/keyboard.
wtapia się
0

Uważam, że dodanie tego skryptu do uruchamiania jest satysfakcjonujące:

while true;do 
    xmodmap -e "keycode 87=Prior"
    xmodmap -e "keycode 88=Next"
    sleep 5
done

Próbowałem użyć xmodmap ./Xmodmap, ale za każdym razem, gdy jest wykonywana, wystąpi zauważalne opóźnienie.

golopot
źródło
4
while; doNależy unikać używania dowolnej nieskończonej pętli. Spowodowało to, że jeden rdzeń mojego dwurdzeniowego procesora uderzał o 42% co 5 sekund, znacznie zmniejszając ładowanie baterii laptopa!
Serge Stroobandt