Xmodmap permanente in Ubuntu 13.04

Non riesco a far funzionare xmodmap all’accesso in Ubuntu 13.04. Ho cercato in giro, incluso in askubuntu e tutte le risposte che ho trovato non funzionano.

Ho un file chiamato .Xmodmap nella mia cartella home che contiene i mapping desiderati. Se lo eseguo manualmente funziona bene, quindi non c’è nessun errore lì. Per farlo funzionare all’avvio, ho provato:

  1. Utilizzando vari .xinitrc contenente uno dei seguenti comandi:

    • xmodmap .Xmodmap
    • xmodmap ~/.Xmodmap
    • /usr/bin/xmodmap /home/NAME/.Xmodmap
    • if [ -s ~/.Xmodmap ]; then
      xmodmap ~/.Xmodmap
      fi
  2. Utilizzando .Xresources invece di .xinitrc con le stesse variazioni.

  3. Impostandolo come un’applicazione di avvio.

Nessuno dei precedenti funziona in Ubuntu 13.04 (64-bit). Ho anche visto alcune idee sul cambiamento globale delle mappature della tastiera, ma la maggior parte di esse non era applicabile in Ubuntu 13.04 (cioè i file corrispondenti non esistevano dove specificato) e preferisco non toccare comunque le impostazioni globali.

Ubuntu non usa più xmodmap , ma usa xkb (per quanto ho capito, questo facilita, tra le altre cose, i layout di tastiera per finestra).

I file di mappa a livello di sistema sono in

 /usr/share/X11/xkb/symbols/ 

Le mappe sembrano caricate gerarchicamente, con la mappa del pc come root e qualsiasi lingua (es. en ) come figlio della radice.

Nel mio caso specifico, ho scambiato pagina su Home e Page Down con End sulla mia tastiera, quindi ho apportato delle modifiche alla mappa del pc tutto il sistema, come segue:

  key  { [ Prior ] }; key  { [ Home ] }; key  { [ Next ] }; key  { [ End ] }; 

NOTA: per forzare Xorg ad usare la tua nuova tastiera, potresti dover rimuovere le mappe pre-compilate esistenti (* .xkm) in

 /var/lib/xkb/ 

e quindi riavviare Xorg.

Ci sono varie risorse su xkb , ma questo è legato a Ubuntu.

Per me, la configurazione xkb è troppo complicata se si desidera rimappare 1 o 2 chiavi in ​​un modo non disponibile nelle Impostazioni di sistema. Inoltre, la soluzione dovrebbe rimanere sul lato utente, senza modificare “/ usr / share / X11 / xkb / symbols /” ecc. Forzare il caricamento di “xmodmap ~ / .Xmodmap” utilizzando le applicazioni di avvio funziona solo finché non si sospende, si cambiano gli utenti o cambiare il layout della tastiera. Quindi, come suggerisce holocronweaver, con i frammenti di codice che ho trovato, ho creato uno script python da caricare all’avvio della sessione, che ricarica ‘~ / .Xmodmap’ quando necessario.

Controlla il bug report # 1243642 (commento # 6), e scaricalo qui .

Ho avuto questo problema in Ubuntu 14.04 e ho trovato la soluzione qui . Apparentemente, Ubuntu non è in grado di configurare la tastiera subito dopo l’accesso, ma è un po ‘più tardi. Quindi se aggiungi un comando

 sleep 4 && xmodmap ~/.Xmodmap & 

a ~/.bash_profile dovrebbe funzionare (lo fa per me).

EDIT: sembra funzionare solo dopo l’accesso, non dopo l’avvio. Dovrò indagare su questo più tardi.

Converti Caps Lock in Esc per utilizzare vim

Ecco la mia variante di uno script di avvio della mapping dei tasti. Converte Caps Lock in Esc su qualsiasi tastiera per l’uso con vi , vim o gvim .

A differenza della risposta di q4w56 , questa risposta non usa alcun tempo infinito while; do while; do ciclo. In caso contrario, un core della mia CPU dual core avrebbe colpito il 42% ogni 5 secondi, riducendo drasticamente la carica della batteria del portatile.

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

Salvalo come una sceneggiatura. Rendi il file eseguibile con chmod +x . Aggiungi il nome e il percorso dello script a Session and Startup → Application Autostart (in Xubuntu).

Il comportamento della tastiera per questo utente rimarrà persistente tramite il riavvio e il logout, ma non la sospensione. La persistenza attraverso la sospensione può essere raggiunta , ma sfortunatamente solo a livello di sistema, non facilmente a livello di utente.

Razionale per questa rimapping della tastiera

Nel mondo informatico di oggi c’è rimasto poco uso del tasto Caps Lock . In generale, si dovrebbe astenersi dall’utilizzare ALL CAPS in virtù della netiquette e della separazione tra presentazione e contenuto . Inoltre, quando si preme accidentalmente il tasto BLOC MAIUSC mentre si modifica il testo con vim non sempre si nota immediatamente, ma si verifica invariabilmente un comportamento vim piuttosto fastidioso . Disabilitando il tasto Caps Lock tutti insieme e riutilizzandolo come un tasto Esc facile da raggiungere si ottiene una doppia vincita per l’uso di vim .

Ho avuto il problema anche su Ubuntu 16.04 con fcitx, e ho avuto la soluzione sul wiki fcitx , ma ha bisogno di fcitx con 4.2.7 o successive

  • touch ~/.Xmodmap
  • scrivi la configurazione
  • riavviare e il fcitx proverà a caricarlo automaticamente

C’è anche qualche spiegazione per il motivo.

@ La risposta di Daniel mi ha indicato la strada giusta, ma vorrei estenderla.

Funziona per me su Linux Mint 17.2 e Ubuntu 16.04.

Ho provato tutti i colpi di scena che potevo pensare di continuare a usare xmodmap , ma falliscono tutti quando il sistema entra in modalità sleep. Lo stesso vale anche per gli script di avvio-applicazione che usano setxkbmap nei casi in cui il * settings-demone (per me è xfce4) viene eseguito più tardi dello script — e l’ordine non può essere realmente influenzato.

Quello che ho finalmente trovato ha i seguenti ingredienti:

1) Scrivi un file di mapping della tastiera minimale per /usr/share/X11/xkb/symbols . Consente di chiamare il file mylayout Può essere semplice come

 xkb_symbols "basic" { name[Group1] = "My Layout"; include "us" key  { [ 3, numbersign, sterling, sterling] }; include "level3(ralt_switch)" } 
  • basic è solo un nome, lo incontreremo più tardi.
  • Il name[Group1] allo stesso modo è solo un nome, ma non giocherà più in seguito.
  • include "us" include la semplice tastiera di noi. In realtà us un altro file nella stessa directory. Questo è il layout della tastiera che stiamo adattando. Scegli un altro se necessario. Nota: nessun punto e virgola per terminare questa riga.
  • La linea key è un adattamento della tastiera, più può seguire. può essere trovato nei file sotto /usr/share/X11/xkb/keycodes . Usa il programma xev per capire che il tasto “3” ha keycode 12 e nel file Xfree86 è mappato su .
  • Infine un’altra direttiva include per triggersre un’altra opzione della tastiera, in questo caso voglio avere il tasto Alt corretto per essere il tasto shift di livello 3, cioè la chiave che dà accesso al segno sterling che ho definito sopra. level3 è solo un nome di file nella stessa cartella con ralt_switch una sezione di esso. Dai un’occhiata in giro e scegli ciò che devi includere.

2) Non ho messo il mylayout nella cartella di sistema. Piuttosto, ho fatto solo un collegamento soft dalla cartella di sistema a una cartella di mio gradimento per vedere immediatamente che questo non è un software di serie.

3) Inoltre non ho evdev.xml , ancora una volta per evitare problemi di aggiornamento. Ma sarebbe necessario trovare mylayout nell’editor di configurazione della tastiera (per xfce4 è xfce4-keyboard-settings ). Invece ho usato xfce4-settings-editor e cambiato il keyboard-layout->XkbLayout in mylayout (il nome del file) e XkbVariant in basic (vedi sopra). Successivamente, mylayout/basic viene visualizzato anche nell’editor delle impostazioni della tastiera. Una voce in evdev.xml sembra essere necessaria solo per poter selezionare il layout.

In questo modo, le impostazioni della tastiera ora sopravvivono alla modalità sospensione e si riavviano.

Più sfondo può essere trovato qui: http://www.charvolant.org/~doug/xkb/html/node5.html .

Un altro approccio per risolvere il problema della modalità di sospensione (non provato da solo), può essere trovato qui: https://www.vinc17.net/unix/xkb.en.html .

AGGIORNAMENTO: ha lavorato con Mint 18.3 nello stesso momento in cui ho cambiato le impostazioni in xfce4-settings-editor come descritto sopra.

REVISIONE

Un aggiornamento all’inizio del 2018 ha interrotto la persistenza: l’auto-ricarica della mappa dei tasti dopo la sospensione o l’ibernazione. Poiché i metodi che usano gli script /etc/pm/sleep.d hanno smesso di funzionare (deprecato?), Questo ha lasciato solo il modo più nuovo, usando / lib / systemd / system-sleep e script leggermente diversi (che hanno iniziato a lavorare su keymap!).

Quindi questo post viene aggiornato al metodo più recente per la persistenza e per includere il normale caricamento iniziale della mappa di chiavi, che ha anche iniziato a funzionare. La routine per la conversione di un file .Xmodmap in .xkbmap rimane invariata.

Si noti che questa è una soluzione per utente. Per una risposta per dispositivo, vedere come applicare una mappa dei tasti a un singolo dispositivo . Questo metodo potrebbe essere adattato per l’uso qui.

Prima modifica il file .Xmodmap come desiderato. Questi sono più facili da modificare direttamente rispetto ai file .xkbmap. Quando è caricato:

xmodmap .Xmodmap

quindi convertire in un file .xkb:

xkbcomp $ DISPLAY $ HOME / .xkbmap

Per caricare automaticamente all’avvio, aprire Applicazioni di avvio, fare clic su Aggiungi e nella riga di comando immettere:

xkbcomp /home/user/.xkbmap “: 0”

(“utente” viene sostituito con il nome utente effettivo.) Per Nome, immettere Caricare mappa tastiera. Aggiungi un commento se lo desideri e premi Salva.

La keymap verrà caricata ogni volta che si avvia il sistema, ma non sopravviverà a una sospensione o ibernazione. Per questo, crea un nuovo file in / lib / systemd / system-sleep, forse denominato 60_xkbmap, che contiene:

 #!/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 

( Rif. ) Come sopra, sostituire “utente” con il nome utente reale.

La mappa dei tasti dovrebbe ora auto-caricarsi e rimanere persistente. Nota:

  • Si applica alla versione LTS corrente, 16.04 e probabilmente anche successive.
  • Tratto dal post 14 del thread di bug di cui sopra.
  • Commenti precedenti applicati al post originale.

Questo mi ha fatto inciampare, anche quando ho aggiornato da Ubuntu 12.04 a 13.04.

Fortunatamente questa impostazione è ora (o forse è sempre stata) facilmente accessibile nelle preferenze della tastiera e può essere modificata con pochi clic del mouse.

  1. Vai a Impostazioni di sistema > Layout tastiera > Opzioni …
  2. Nelle Opzioni di layout della tastiera, fare clic sulla freccia per visualizzare le opzioni di posizione del tasto ▸ Ctrl .
  3. Metti il ​​segno di spunta in Swap Ctrl e Caps Lock .

Ci si va: Left Control e Caps Lock hanno cambiato posizione.

Non dimenticare di eliminare ~/.Xmodmap dopo aver apportato la modifica.

Trovo l’aggiunta di questo script all’avvio soddisfacente:

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

Ho provato a utilizzare xmodmap ./Xmodmap , ma ogni volta che viene eseguito, si verificherà un ritardo notevole.