Perché il mio file ~ / .Xmodmap non viene caricato all'accesso?


16

Ho creato il seguente ~/.Xmodmapfile secondo questa risposta .

keysym Delete = Menu
keysym Menu = Delete

clear Lock
keycode 0x42 = Escape

In altre parole, scambiare Deletee Menu, e fare Caps Lockun ulteriore Escape.

La prossima volta che ho effettuato l'accesso, Ubuntu mi ha chiesto se volevo caricare ~/.Xmodmapcome previsto. L'ho caricato, ma non è successo nulla (né allora né nei successivi accessi). Se corro manualmente xmodmap ~/.Xmodmap, funziona come previsto.

So che ha funzionato all'inizio della beta 10.10, ma non riesce sulla mia nuova installazione 10.10. Non ho provato nulla prima del 10.10. Qualche idea?

Modifica: ho inserito alcune dichiarazioni di debug /etc/gdm/Xsessionper assicurarmi che si ~/.Xmodmapstesse caricando e tutto ha iniziato magicamente a funzionare. Non ho cambiato nulla tranne l'aggiunta di alcuni echi, e funziona ancora ora che ho ripristinato le mie modifiche e riavviato di nuovo. La cosa più strana che abbia mai visto.

Una cosa che ho capito è che la parte "rimappa Caps Lock to Escape" di Xmodmap funzionava sempre. È stato solo lo scambio Elimina / Menu a fallire. Lascerò questa domanda aperta per ora nel caso in cui qualcun altro abbia lo stesso problema, dal momento che non so davvero perché il problema si sia fermato.


Sto vivendo questo stesso problema da solo, mi sta facendo impazzire. Se capisco la causa, sarò sicuro di pubblicare una risposta.
Jorge Israel Peña,

Risposte:


11

So che è sciocco ma come soluzione alternativa potresti semplicemente avviare automaticamente xmodmap ~/.Xmodmap.

Inoltre potresti controllare /etc/gdm/Xsessionla linea usermodmap="$HOME/.Xmodmap"e se non è lì basta aggiungerla alla fine del file. Se sei l'unico utente del sistema, inserisci le modifiche /etc/X11/Xmodmap.


2
Come si "avvia automaticamente" i comandi?
miguel.martin,

Vedi Avvio automatico . Il più semplice è probabilmente semplicemente aggiungere una voce Settings->Session and Startupo qualcosa del genere.
Mateen Ulhaq,

O ad esempio, aggiungilo alla tua shell, quindi se apri spesso le shell, lo eseguirà. La prima cosa che faccio quando entro in Gnome è aprire una shell per la maggior parte del tempo, quindi è un modo che funziona.
trusktr,

3

In ritardo alla festa, ma anche questo mi ha fatto impazzire; e, testardo come me, rinunciare non era un'opzione.

Fondamentalmente questo è quello che ho provato, (come il mio utente o root, se necessario)

  • ~ / .Xmodmap
  • ~ / .xsession, ~ / .xsessionrc
  • ~ / .Gnomerc
  • ~ / .Xprofile
  • ~ / .Xinitrc
  • /etc/X11/Xsession.d/myscript
  • /usr/share/X11/xorg.conf.d/ ( file di configurazione, non toccarlo )

(In realtà, aggiungendo il xmodmapcomando a ~/.bashrcfunzionato, ma richiede di avviare un terminale ogni volta dopo il login)

Alcuni anni fa (?), È xkbstato scelto per occuparsi della mappatura e della configurazione dei tasti (interfacciamento con X), ma xmodmappotrebbe anche richiedere modifiche relative ai tasti a X, dopo che xkbha funzionato durante l'inizializzazione della sessione X.

Il problema è quando dovrebbero verificarsi queste impostazioni xmodmap?
E sembra quei file di cui sopra sono trattati troppo presto nel processo, e sia X non era pronta ad accettare xmodmap modifiche o xkb li sovrascriverà.

Nota: ho aggiunto un po 'di "tracciamento" a questi file per assicurarmi che fossero effettivamente in esecuzione in qualche momento!

Una soluzione che sembra funzionare

.desktopInizialmente non volevo aggiungere un file (un semplice script di una riga doveva essere sufficiente), ma funziona, quindi eccolo qui.
La soluzione viene da Come rimappare o scambiare i tasti speciali della tastiera in Linux? "soluzione 1"

Fondamentalmente creare un ~/.config/autostart/my-xmodmap.desktopfile e inserirlo:

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

sostituisci mecon il tuo nome utente (nota che non mi sono preoccupato di provare ~/o $HOMEche potrebbe funzionare altrettanto bene al posto di /home/me, e il percorso completo di xmodmap probabilmente non è necessario ...), e aggiungi il bit exec

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

I comandi xmodmap devono essere in un ~/.Xmodmapfile in questo caso (o utilizzare l' -eopzione o scegliere un altro nome file!). Esci e rientra.

Si noti che è possibile creare il programma di avvio da "Applicazioni di avvio".

Un'altra soluzione sarebbe quella di dimenticare xmodmap e imparare a configurare xkb!

Modifica (di nuovo)

A volte, forse il 25% degli accessi, xmodmapsembra che non funzioni, mentre il comando viene effettivamente eseguito (un tracker lo dimostra). L'unica conclusione a cui potrei arrivare in questo momento è che il xkbprocesso viene eseguito in ritardo nel processo di accesso e può terminare dopo l' xmodmapesecuzione. Sembra una condizione di gara ... Quindi, finalmente, ho cambiato la execriga del file desktop di avvio automatico in

Exec=$HOME/bin/mystart &

(nota &) mystartè uno script in una nuova directory che binho creato che contiene

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

e

chmod u+x ~/bin/mystart

Lo script ha dormito 5 secondi prima di eseguire xmodmap e tiene traccia di quando è stato eseguito (nel file /tmp/xmodmap-has-run).

Spero che sia tutto!


La modifica della configurazione xkb ha funzionato per me: askubuntu.com/a/1090892/1021380
postrational


2

Forse hai un errore di sintassi nel tuo ~/.Xmodmapfile?

Prova a correre:

$ xmodmap ~/.Xmodmap

Ciò dovrebbe generare un errore se ce ne sono.


0

Ho avuto lo stesso strano problema, provando ad avviare Xmodmap mentre accedevo alla mia sessione (Ubuntu 13.04). Alla fine l'ho fatto funzionare con un file .xinitrc nella mia cartella Home dove ho messo il mio comando, ma con percorsi assoluti ad esso, ovvero:

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

Quindi ho dovuto riavviare (non solo riaccedere) in modo che venisse eseguito.


2
Questo non funziona con Ubuntu 14.04, per me.
miguel.martin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.