Dlaczego mój plik ~ / .Xmodmap nie ładuje się podczas logowania?

16

Utworzyłem następujący ~/.Xmodmapplik zgodnie z tą odpowiedzią .

keysym Delete = Menu
keysym Menu = Delete

clear Lock
keycode 0x42 = Escape

Innymi słowy, swap Deletei Menui uczynić Caps Lockdodatkowy Escape.

Podczas następnego logowania Ubuntu zapytał mnie, czy chcę załadować ~/.Xmodmapzgodnie z oczekiwaniami. Załadowałem go, ale nic się nie wydarzyło (ani wtedy, ani przy kolejnych logowaniach). Jeśli uruchomię ręcznie xmodmap ~/.Xmodmap, działa zgodnie z oczekiwaniami.

Wiem, że działało to na początku wersji 10.10 beta, ale nie działa w mojej nowej instalacji 10.10. Nie próbowałem niczego wcześniej niż 10.10. Jakieś pomysły?

Edycja: Wstawiłem kilka instrukcji debugowania, /etc/gdm/Xsessionaby upewnić się, że się ~/.Xmodmapładuje i wszystko magicznie zaczęło działać. Nie zmieniłem niczego oprócz dodania kilku echa, i wciąż działa teraz, kiedy cofnąłem moje zmiany i uruchomiłem ponownie. Najdziwniejsza rzecz, jaką kiedykolwiek widziałem.

Zrozumiałem, że część Xmodmap „remap Caps Lock to Escape” zawsze działała. Nie powiodła się tylko zamiana Usuń / menu. Na razie pozostawię to pytanie otwarte, na wypadek gdyby ktoś miał ten sam problem, ponieważ tak naprawdę nie wiem, dlaczego problem się zatrzymał.

Mateusz
źródło
Sam mam ten sam problem, doprowadzając mnie do szału. Jeśli odkryję przyczynę, z pewnością opublikuję odpowiedź.
Jorge Israel Peña

Odpowiedzi:

11

Wiem, że to głupie, ale jako obejście można po prostu uruchomić się automatycznie xmodmap ~/.Xmodmap.

Możesz także sprawdzić /etc/gdm/Xsessionlinię usermodmap="$HOME/.Xmodmap"i jeśli jej nie ma, po prostu dodaj ją na końcu pliku. Jeśli jesteś jedynym użytkownikiem systemu, po prostu wprowadź zmiany /etc/X11/Xmodmap.

turbo
źródło
2
Jak „autostart” polecenia?
miguel.martin
Zobacz Autostarting . Najłatwiej jest po prostu dodać wpis Settings->Session and Startuplub coś w tym stylu.
Mateen Ulhaq,
Lub na przykład dodaj go do swojej powłoki, więc jeśli często otwierasz powłoki, uruchomi się. Pierwszą rzeczą, którą robię, kiedy wchodzę do Gnome, jest otwarcie powłoki przez większość czasu, więc jest to jeden ze sposobów, który działa.
trusktr
3

Późno na imprezę, ale to również doprowadzało mnie do szału; i uparty jak ja, poddanie się nie było opcją.

Zasadniczo to właśnie próbowałem (jako mój użytkownik lub root, jeśli to konieczne)

  • ~ / .Xmodmap
  • ~ / .xsession, ~ / .xsessionrc
  • ~ / .gnomerc
  • ~ / .xprofile
  • ~ / .xinitrc
  • /etc/X11/Xsession.d/myscript
  • /usr/share/X11/xorg.conf.d/ ( pliki konfiguracyjne, nie dotknąłem )

(Właściwie dodanie xmodmappolecenia ~/.bashrcdziałało, ale wymaga uruchomienia terminala za każdym razem po zalogowaniu)

Kilka lat temu (?) xkbZostał wybrany do obsługi mapowania i konfiguracji kluczy (interfejs z X), ale xmodmapmoże również poprosić o zmiany związane z kluczami w X, po xkbtym jak wykonał swoją pracę podczas inicjowania sesji X.

Problem polega na tym, kiedy powinny się pojawić te ustawienia xmodmap? Wygląda na
to, że powyższe pliki są przetwarzane zbyt wcześnie, a albo X nie był gotowy na zaakceptowanie zmian xmodmap, albo xkb je nadpisze.

Uwaga: Dodałem trochę „śledzenia” do tych plików, aby mieć pewność, że faktycznie zostały uruchomione w pewnym momencie!

Rozwiązanie, które wydaje się działać

.desktopPoczątkowo nie chciałem dodawać pliku (wystarczył prosty skrypt w jednym wierszu), ale to działa, więc oto jest.
Rozwiązanie pochodzi z Jak zmienić przypisanie lub zamianę specjalnych klawiszy klawiatury w systemie Linux? „rozwiązanie 1”

Zasadniczo utwórz ~/.config/autostart/my-xmodmap.desktopplik i umieść w nim:

[Desktop Entry]
Name=MyXmodmap
Exec=/usr/bin/xmodmap /home/me/.Xmodmap
Terminal=false
Type=Application
X-GNOME-Autostart-enabled=true

zastąp meswoją nazwą użytkownika (pamiętaj, że nie zadałem sobie trudu, aby spróbować ~/lub $HOMEże może równie dobrze działać zamiast /home/me, a pełna ścieżka xmodmap prawdopodobnie nie jest konieczna ...) i dodaj bit exec

chmod +x ~/.config/autostart/my-xmodmap.desktop

W ~/.Xmodmaptym przypadku polecenia xmodmap muszą znajdować się w pliku (lub skorzystać z -eopcji lub wybrać inną nazwę pliku!). Wyloguj się i zaloguj ponownie.

Pamiętaj, że możesz utworzyć program startowy z „Aplikacji startowych”.

Innym rozwiązaniem byłoby zapomnienie xmodmap i naucz się konfigurować xkb!

Edytuj (ponownie)

Czasami, może 25% logowania, xmodmapnadal wydaje się nie działać - podczas gdy polecenie jest faktycznie uruchomione (tracker to potwierdza). Jedynym wnioskiem, do jakiego mogę teraz dojść, jest to, że xkbproces działa późno w procesie logowania i może zakończyć się po jego xmodmapuruchomieniu. Wygląda jak warunek wyścigu ... W końcu zmieniłem execlinię pliku z autostartem pulpitu na

Exec=$HOME/bin/mystart &

(zwróć uwagę &) mystartto skrypt w nowym katalogu, binktóry utworzyłem

#!/bin/bash    
sleep 5
/usr/bin/xmodmap /home/me/.Xmodmap &
date >> /tmp/xmodmap-has-run

i

chmod u+x ~/bin/mystart

Skrypt śpi 5 sekund przed uruchomieniem Xmodmap i śledzi, kiedy się uruchomił (w pliku /tmp/xmodmap-has-run).

Mam nadzieję, że to wszystko!

Pierścień Ø
źródło
Edycja konfituracji xkb
postrational
2

Oto być może lepsza odpowiedź: http://cweiske.de/howto/xmodmap/ar01s06.html

Być może będziesz musiał trochę go ulepszyć, aby działał dla ciebie, ale instrukcje są już dostępne.

Robert Massaioli
źródło
1
Te instrukcje dotyczą KDE, ale jeśli spojrzę na ekwiwalent Gnome ( /etc/gdm/Xsession), linie, które link mówi, aby dodać, już tam są.
Matthew
2

Być może w ~/.Xmodmappliku występuje błąd składniowy ?

Spróbuj uruchomić:

$ xmodmap ~/.Xmodmap

To powinno wywołać błąd, jeśli taki istnieje.

gpmcadam
źródło
0

Miałem ten sam dziwny problem, próbując uruchomić Xmodmap podczas logowania do sesji (ubuntu 13.04). W końcu udało mi się pracować z plikiem .xinitrc w folderze domowym, w którym umieściłem polecenie, ale z bezwzględnymi ścieżkami do niego, to znaczy:

/ usr / bin / xmodmap /home/MYNAME/.Xmodmap

Następnie musiałem zrestartować komputer (nie tylko ponownie go zalogować), aby został wykonany.

greguti
źródło
2
Dla mnie to nie działa w systemie Ubuntu 14.04.
miguel.martin