Jak mogę stale mapować klucze w Ubuntu 16.04?


23

Działa to dla bieżącej sesji:

costales@dev:~/Desktop$ xmodmap -e "keycode 166 = less"
costales@dev:~/Desktop$ xmodmap -e "keycode 167 = greater"

Następnie utworzyłem ten plik konfiguracyjny:

costales@dev:~/Desktop$ cat ~/.Xmodmap 
keycode 166 = less
keycode 167 = greater
costales@dev:~/Desktop$ 

Ale to nie działa po ponownym uruchomieniu. Jak mogę zmusić remap, aby przetrwał restart?


Właśnie odpowiedziałem na to xkbtutaj: askubuntu.com/a/960097/554991 .
danwild

Odpowiedzi:


15

Używam trochę 16.04 i wydaje się, że używa sddm jako menedżera pulpitu. Wcześniej były to LightDM i GDM. Oba jego poprzedniki są udokumentowane w celu ~/.Xmodmapautomatycznego ładowania, ale nie mogę znaleźć niczego, co wyraźnie mówi, że robi to sddm.

Dlatego może być wskazane wymuszenie załadowania go nowym skryptem. Musisz tylko uruchomić xmodmap ~/.Xmodmapi możesz to zrobić na kilka sposobów:

Istnieje prawdopodobnie kilkadziesiąt innych sposobów zarządzania tym, w zasadzie robiąc to samo.


2
Dzięki za wskazówkę! Dodawanie, aby uruchomić nie działało i ~ / .xinitrc nie wychodzi. Ale dołącz „xmodmap ~ / .Xmodmap” do ~ / .bashrc działało! :)
Costales

1
Dodanie go za pomocą graficznych narzędzi startowych (które tworzy nowy wpis ~/.config/autostart) działa o połowę krócej. Uruchomiłem ponownie około 10 razy i 5 razy polecenie zostało wykonane, a pozostałe 5 razy nie. :-(
Alexander Rechsteiner

1
@Alexander Rechsteiner: Wydaje się, że jest to problem w Ubuntu 16.04. Bawiłem się poleceniami uruchamiania i mapowaniem klawiszy, a zachowanie wydaje się bardzo niespójne. Nie jestem ekspertem w tego typu sprawach, ale wydaje się to absurdalne, że tak się dzieje ...
nicorellius

6

Dodałem plik /etc/X11/Xsession.d/80_xmodmapz następującą zawartością:

#!/bin/sh
# Set custom keycodes
#
# This file is sourced by Xsession(5), not executed.
# The "|| true" is to ensure that the Xsession script does not terminate on error

USRMODMAP="$HOME/.Xmodmap"

if [ -x /usr/bin/xmodmap ]; then
        if [ -f "$USRMODMAP" ]; then
                /usr/bin/xmodmap "$USRMODMAP" || true
        fi
fi

Działa to za każdym razem.


Wygląda na to, że działa, ale są to komunikaty, które dostaję w .xsessions-error: .Xmodmap: 1: zły klawisz w liście modyfikacji modyfikatora „Caps_Lock”, brak odpowiednich kodów to mój .Xmodmap: $ cat .Xmodmap remove Lock = Caps_Lock 9 =
Kod dostępu

4

otwórz właściwości sesji gnome. dodaj polecenie i nazwę. plik pulpitu zostanie utworzony w ~ / .config / autostart.

pamiętaj: użyj ścieżki bezwzględnej , np. /home/xxx/.Xmodmap. nigdy nie używaj „~” jako katalogu domowego.


2

W moim długim doświadczeniu z manipulowanie kluczy w Ubuntu, trwałe rozwiązanie polega na modyfikacji pliku o nazwie evdevw /usr/share/X11/xkb/keycodes.

Uruchom to polecenie w wierszu polecenia.

sudo gedit /usr/share/X11/xkb/keycodes/evdev

Pamiętaj, że gedit to edytor tekstowy Ubuntu, więc możesz używać nano lub vim zamiast gedit.

Plik ma format: ALIAS: CODE. Możesz zamieniać przyciski, wymieniając kody różnych kluczy. Na przykład, aby zamienić RCONTROL z RETURN, edytuj w tym evdev dwa wiersze:

<RTRN> = 105;

<RCTL> = 36;

Aby poznać kod numeryczny przycisku, uruchom xevterminal.

Więcej informacji znajduje się w dokumentacji. https://buildmedia.readthedocs.org/media/pdf/python-evdev/latest/python-evdev.pdf


1

Nawigować do

/usr/share/X11/xkb/symbols

Mając uprawnienia sudo, w edytorze otwórz układ, który chcesz edytować. Zamień wartości.

Po ponownym uruchomieniu zmiany zostaną zastosowane.


Oto przykład, którego używam do zmiany mapowania klawiatury z powodu problemów ze sprzętem.

przykład zmiany mapowania klawiatury


2
Te zmiany zostaną zastąpione przy następnej aktualizacji pakietów, które są właścicielami tych plików.
mur

To może być prawda, ale wątpię, aby były one bardzo często aktualizowane. Od czasu rozwiązania problemu jestem zadowolony z tego rozwiązania i ani razu nie musiałem robić nic więcej. Aby temu zapobiec, możesz zapisać plik i zastąpić go w przypadku takiego zdarzenia lub (co wydaje się bardziej bezpieczne) po prostu odtworzyć proces.
quaeched

1

Po wyszukaniu w Google udało mi się rozwiązać problem ponownego mapowania uszkodzonych kluczy mojego laptopa. Wszystkie wadliwe klawisze na moim Thinkpadie T400 działają poprawnie po zmianie mapowania. Ponadto jest trwały bez dodatkowego obciążenia rdzenia procesora.

  • Najpierw znajdź układ klawiatury lub kod klawiatury za pomocą poniższego polecenia.

    xevv -event keyboard 
    
  • Na przykład na moim kodzie Thinkpad T400 znaleziono następujący kod:

    Keycode of "z" key is 52
    Keycode of "x" key is 53
    Keycode of "c" key is 54
    Keycode of "v" key is 55
    Keycode of "F6" key is 72
    Keycode of "F10" key is 76
    Keycode of "F11" key is 95
    Keycode of "F12" key is 96 
    
  • Ponowne mapowanie klawiszy znakowych „z” „x” „c” „v” poprzez przypisanie klawiszy funkcyjnych „F6” „F10” „F11” „F12”.

  • Zmodyfikuj wiersze, jak poniżej (Utwórz kopię zapasową pliku, zanim wprowadzisz zmiany, aby łatwo cofnąć, jeśli coś pójdzie nie tak).

    sudo vi /usr/share/X11/xkb/keycodes/evdev
    
  • Znajdź linie i zmień wartość jak poniżej:

    <AB01> = 72;
    <AB02> = 76;
    <AB03> = 95;
    <AB04> = 96;
    
  • Skomentuj te linie lub usuń linie:

    //  <FK06> = 72;
    //  <FK10> = 76;
    //  <FK11> = 95;
    //  <FK12> = 96;
    
  • Zapisz i wyjdź.

  • Ponowne mapowanie klawiszy specjalnych.

  • Utwórz kopię zapasową pliku przed wprowadzeniem zmian w celu przywrócenia, jeśli coś pójdzie nie tak.

    cd /usr/share/X11/xkb/symbols/
    
    sudo vi pc
    
  • Dodaj lub zmodyfikuj poniższe wiersze w funkcji „xkb_symbols” edit „{”

    key [SCLK] {    [  Prior        ]   };
    key [PAUS] {    [  Next         ]   };
    
  • Zapisz i wyjdź.

  • Wyczyść pamięć podręczną.

    sudo rm -rf /var/lib/xkb/*
    
  • Restart.


Za pomocą tej techniki przyporządkowałem złamany klawisz kursora do innego klawisza. Jest to po prostu (xev) i naciśnij nowy klawisz, aby uzyskać jego skancode, a następnie edytuj / usr / share / X11 / xkb / keycodes / evdev, aby zastąpić oryginalny kod klawisza strzałki nowym kodem i usunąć linię nowego klawisza strzałki z oryginalnym scancode. Skomentowałem gdziekolwiek dokonałem zmiany i zachowałem kopię zapasową pliku. Po ponownym uruchomieniu działa idealnie, w tym kombinacje shift / ctrl / alt z nowym klawiszem strzałki. I zmiana powinna pozostać na miejscu, nawet podczas aktualizacji pakietów i aktualizacji wersji systemu operacyjnego.
Matthew

1

Edytor graficzny

gnome-tweaks > Klawiatura i mysz> Dodatkowe opcje układu

Kluczowe mapy


0

Ponieważ pliki .Xmodmap są znacznie łatwiejsze do edycji niż xkb, używam .Xmodmap jako pliku „źródłowego”, a następnie przekonwertuję go na xkb (obecny standard) i automatycznie ładuję przy starcie systemu .bashrc.

Oto kilka prostych kroków opublikowanych tutaj .

Działa idealnie, a przy użyciu xkb przyszłościowych, po odrzuceniu obsługi .Xmodmap.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.