Wie stelle ich Xmodmap beim Login ein?


46

Da mein Tastaturlayout nicht zu mir passt, starte ich xmodmapbeim Login. Das Skript trägt den Namen .profileund wird in Ordnung ausgeführt, unterbricht jedoch die Unity-Schnittstelle.

Ich möchte wissen, wo ich die xmodmapZeile platzieren soll, damit sie bei meinem Login ausgeführt wird und nichts kaputt geht.

Ich habe bereits versucht, es in die .bash_loginund .bash_profile-Dateien zu stellen, ohne Erfolg ( xmodmapmeine Tastatur wird nicht eingestellt).

Welche Möglichkeiten habe ich?


4
Wie bricht es die Unity-Schnittstelle?
Djeikyb

1
Ich möchte hinzufügen, dass Sie, wenn Ihre xmodmap-Ausführungszeit zu lang ist, alle Einträge entfernen sollten, die Sie nicht manuell geändert haben. Wenn Sie nur die Änderungen in Ihrer Eingabedatei behalten, wird xmodmap viel schneller ausgeführt.
user1071575

Antworten:


29

Der richtige Ort zum Speichern xmodmap ~/.Xmodmap(damit Ihre Änderungen beim Start gelesen werden) befindet sich in ~/.xinitrc(siehe Erklärung unten), obwohl Sie den xmodmapBefehl alternativ als Startelement ( /usr/bin/xmodmap /home/user/.Xmodmap) platzieren könnten . Ich kann für 12.04 (und vermutlich 12.10) sagen, dass diese beiden Alternativen definitiv funktionieren, da sie so oder so gelesen werden, nachdem Sie sich mit eingeloggt haben lightdm. (Ich habe Return to Right Shift geändert und die Änderung wurde erst wirksam, nachdem ich mein Passwort eingegeben und mich angemeldet hatte.)

Bitte beachten Sie: Wenn Sie auf Xfce sind, wird in den offiziellen Xfce-FAQ darauf hingewiesen, dass Sie möglicherweise ein Startelement erstellen müssen, anstatt es zu verwenden ~/.xinitrc, und dass Sie möglicherweise die Ausführung verzögern müssen, damit die xmodmapÄnderungen nicht von überschrieben werden setxkbmap. Sie können eine Verzögerung verwenden, um dies in Ihrem Starteintrag zu erreichen:

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

(Für den Startup-Eintrag müssen absolute Pfade angegeben werden)

Jedes Mal setxkbmap, wenn das Tastaturlayout geändert wird, müssen Sie es xmodmap ~/.Xmodmapim Terminal erneut ausführen .

Erstellen ~/.xinitrc

Erstellen Sie eine Datei in Ihrem Home-Ordner .xinitrcmit dem Namen

touch .xinitrc

und platziere darin:

xmodmap ~/.Xmodmap

Ihre XmodmapDatei sollte keine Einträge in dem xmodmap -e " "Stil enthalten, der im Terminal zum vorübergehenden Festlegen der Werte verwendet wird. Es muss Einträge in diesem Format haben:

keycode 65 = Tab
keycode 23 = Space

Es ist oft verwirrend, welche der verschiedenen XDateien (wie z. B. .xprofile, .xinitrcusw.) beim Start gelesen werden, .xinitrcscheint aber unter 12.04 noch gelesen zu werden, wohingegen sie von sich aus gelesen werden .Xmodmapoder .xinputrcnicht.


5
Beachten Sie, dass Sie, wenn Sie Änderungen mit vornehmen xmodmap -e '..., das richtige Format für xmodmap .Xmodmapmit abrufen können xmodmap -pke, wodurch das aktuelle Mapping ausgedruckt wird. Sie sollten dies jedoch auf die Zeilen beschränken, die für die vorgenommenen Änderungen gelten.
Barry Kelly

1
Das hat bei mir nicht geklappt. Ich habe .Xmodmap und .xinitrc | erstellt Dann habe ich xmodmap ~ / .Xmodmap in .xinitrc platziert und dann in .Xmodmad habe ich den Schlüsselcode 166 = Vorheriger Schlüsselcode 167 = Weiter
miguelmorales85

In Ubuntu 17.10 scheint .xinitrc nicht mehr automatisch gestartet zu werden. Sie müssen es mit folgendem Befehl automatisch starten: / bin / bash -c "sleep 15 && /home/USERNAME/.xinitrc"
thebunnyrules

9

Ich verwende ElementaryOS (mit seinem GNOME-basierten Fenstermanager) und habe mithilfe von xdgAutostart-Skripten eine Lösung gefunden . Viele Fenstermanager verwenden xdg, daher gehe ich davon aus, dass dieser Ansatz auch in anderen Umgebungen funktioniert. Zumindest sollte es mit GNOME funktionieren.

xdg führt Skripte ~/.config/autostartbeim Anmelden in einer X-Sitzung aus. Fügen Sie das folgende Skript hinzu, um xmodmap config beim Anmelden zu laden ~/.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

Melden Sie sich dann ab und wieder an, und Ihre Xmodmap-Konfiguration sollte geladen worden sein.

Wenn es nicht funktioniert, versuchen Sie, xmodmap im Terminal auszuführen, um festzustellen, ob xmodmap sich beschwert:

$ xmodmap ~/.Xmodmap

Wenn Sie keine Fehlermeldung erhalten, führen Sie zum Debuggen den folgenden Befehl aus:

$ sudo cat /var/log/syslog | grep -B 5 -A 5 xmodmap

Unter Linux Mint 17 (basierend auf: Ubuntu 14.04.5) funktionierte der Autostart-Ansatz für mich perfekt, nachdem die Verwendung einer ~/.xinitrcDatei fehlgeschlagen war. Wie hxpax betonte, können Mint-Benutzer (wahrscheinlich die meisten / alle von Debian abgeleiteten Linuxe) einen GUI-Dialog verwenden, um Autostart-Einträge hinzuzufügen Main Menu --> Preferences --> Startup Applications.
Mattst

2
Worked Ubuntu 18.04
TooTone

2

Ich habe gerade nicht die Unity-Oberfläche vor mir, aber versuche, auf die Anwendungsschaltfläche im Launcher zu klicken, und tippe dann startup ein. Es sollte eine App namens Startup Applications (oder eine solche) geben. Klicken Sie darauf und fügen Sie Ihren xmodmap-Befehl hinzu (z xmodmap /home/thiago/.Xmodmap. B. ).


Ich habe es vor einiger Zeit versucht, aber es hat für mich nicht geklappt. Ich arbeite gerade unter Windows, versuche es aber später noch einmal. Ich melde mich hier, wenn es funktioniert. thx
Thiago Moraes

2
@Thiago Moraes Funktioniert dieser grundlegende Befehl (wenn nicht, den Fehler posten)? xmodmap .Xmodmap
DJEIKYB

+1 das funktioniert. Um genauer zu sein, habe ich den vollständigen Pfad für .Xmodmap
pwned

3
Das funktioniert nicht. Ich benutze 16.04
Miguelmorales85

@ miguelmorales85 Funktioniert der Basisbefehl in Ihrem Terminal? Haben Sie versucht, einen absoluten Pfad zu verwenden?
Djeikyb

2

Auf Mint 17/18 kann ich das erreichen, indem ich meine Skripte mit einer Verzögerung von 1 Sekunde in die Startup-Anwendung starte.

Da Mint 18 von Ubuntu 1604 abgeleitet ist, können Sie das Gleiche tun oder zuerst das Startup Application Managing Panel installieren, wenn es nicht vorhanden ist.

Ich hoffe es hilft.


+1 Funktioniert gut. Ich brauchte keine Verzögerung auf Linux Mint 17.
Mattst

@mattst Ja, die Verzögerung ist optional.
hxpax

Ich brauchte eine Verzögerung von 5 Sekunden, damit dies funktioniert. Ich habe daher das folgende Start-Shell-Skript verwendet: gist.github.com/ghagerer/58212241e37229f9d6fe3a133b34be97
Gerhard Hagerer

0

Ich hatte nicht viel Freude mit den oben genannten Vorschlägen (die .bashrc-Option war nicht wirklich brauchbar, da sie xmodmap auf jedem neuen Terminal ausführt)

Ich habe ein Skript berührt, das xmodstartup.shin meinem privaten Ordner aufgerufen wurde

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

mit gespart habe ich es dann gemacht sudo chmod +x xmodstartup.sh

dann habe ich einfach die ausführbare Datei zum Fenster "Startanwendungseinstellungen" von gnome hinzugefügt. bish bosh, Englisches Layout y Español on altgr:)


-1

Das Einfügen von xmodmap-Änderungen in ~/.bashrcoder unterbricht /etc/bash.bashrcnichts.

Der einzige Nachteil ist, dass man nach jedem Start ein Terminal öffnen muss, um es zu aktivieren.


3
Ich mache das schon, aber das Problem ist, dass bei jedem Terminal, das ich öffne, dieser Befehl ausgeführt wird. Es ist nur ein Moment, aber ein bisschen nervig und ich würde eine echte Lösung vorziehen. thx trotzdem
Thiago Moraes
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.