xmodmap permanente in Ubuntu 13.04

66

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. Uso di vari .xinitrc contenenti uno dei seguenti comandi:

    • xmodmap .Xmodmap
    • xmodmap ~/.Xmodmap
    • /usr/bin/xmodmap /home/NAME/.Xmodmap
    • % Co_de%
      if [ -s ~/.Xmodmap ]; then
      xmodmap ~/.Xmodmap
  2. Uso di fi anziché .Xresources con le stesse varianti.

  3. Impostandolo come applicazione di avvio.

Nessuno dei precedenti funziona in Ubuntu 13.04 (64-bit). Ho anche visto alcune idee su come modificare globalmente le 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.

    
posta Alexander Karatarakis 27.07.2013 - 14:37

9 risposte

74

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

I file delle mappe di sistema sono in

/usr/share/X11/xkb/symbols/

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

Nel mio caso specifico, ho scambiato automaticamente Pagina su con Pagina iniziale e Pagina giù con Fine sulla mia tastiera, quindi ho apportato delle modifiche grossolanamente alla mappa pc di sistema, come segue:

 key <HOME> {    [  Prior        ]   };
 key <PGUP> {    [  Home         ]   };
 key  <END> {    [  Next         ]   };
 key <PGDN> {    [  End          ]   };

NOTA: Per forzare Xorg ad usare la tua nuova tastiera, potresti dover rimuovere le mappe precompilate esistenti (* .xkm) in

/var/lib/xkb/

e quindi riavvia Xorg.

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

    
risposta data Daniel 19.09.2013 - 09:08
12

Per me, la configurazione xkb è troppo complicata se si desidera rimappare 1 o 2 tasti 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 la segnalazione di bug # 1243642 (commento # 6), e scaricalo qui .

    
risposta data dedalu 21.08.2014 - 16:58
6

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 quindi dovrebbe funzionare (lo fa per me).

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

    
risposta data dremodaris 11.09.2014 - 17:45
4

Converti Bloc Maiusc in Esc per vim usa

Ecco la mia variante di uno script di avvio della mappatura dei tasti. Converte Caps Lock in Esc su qualunque tastiera da usare con vi , vim o gvim .

Diversamente dalla risposta di q4w56 , questa risposta non utilizza un ciclo while; do infinito. In caso contrario, un core della mia CPU dual core colpirà il 42% ogni 5 secondi, riducendo drasticamente la carica della batteria del laptop.

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

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

Il comportamento della tastiera per questo utente rimarrà persistente fino al riavvio e alla disconnessione, ma non alla 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 tastiera rimappatura

Nel mondo informatico odierno rimane pochissimo uso per il tasto Caps Lock . In generale, si dovrebbe astenersi dall'utilizzare TUTTI I MAIUSCOLI in virtù di entrambi netiquette e la separazione di presentazione e contenuto . Inoltre, premendo per errore il tasto Bloc Maiusc mentre si modifica il testo con vim non viene sempre notato immediatamente, ma invariabilmente risulta piuttosto fastidioso vim comportamento più avanti. Disabilitando il tasto Bloc Maiusc tutto e riutilizzandolo come un tasto Esc facile da ottenere si ottiene una doppia vincita per vim di utilizzo.

    
risposta data Serge Stroobandt 16.04.2016 - 23:22
3

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

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

Ci sono anche alcune spiegazioni per il motivo.

    
risposta data Bluethon 08.06.2016 - 09:35
3

@ 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 immaginare per continuare a usare xmodmap , ma falliscono tutti quando il sistema entra in modalità di sospensione. Lo stesso vale anche per gli script di avvio-applicazione che usano setxkbmap nei casi in cui il * settings-daemon (per me è xfce4) viene eseguito più tardi dello script --- e l'ordine non può essere influenzato.

Ciò che ho finalmente trovato sono i seguenti ingredienti:

1) Scrivi un file di mappatura 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 <AE03> { [ 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 tastiera normale. 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 riga key è un adattamento della tastiera, più può seguire. Il <AE03> 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 keycodes Xfree86 è mappato a <AE03> .
  • Finalmente un'altra direttiva include per attivare 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 e scegli ciò che devi includere.

2) Ho fatto non per inserire 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 riserva.

3) Inoltre ho non sistemato evdev.xml , di nuovo 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 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 al riavvio.

Più sfondo può essere trovato qui: link .

Un altro approccio per risolvere il problema della modalità di sospensione (non provato da solo), può essere trovato qui: link .

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

    
risposta data Harald 06.11.2016 - 13:09
2

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, consulta 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:

% Bl0ck_qu0te%

quindi converti in un file .xkb:

% Bl0ck_qu0te%

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

% Bl0ck_qu0te%

("utente" viene sostituito con il nome utente effettivo.) Per Nome, immettere eventualmente Carica 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 chiamato 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, sostituisci "utente" con il nome utente effettivo.

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 da post 14 del thread di bug sopraindicato.
  • Commenti precedenti applicati al post originale.
risposta data u2n 08.12.2016 - 05:16
0

Questo mi ha fatto inciampare anche quando sono passato 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 & gt; Layout tastiera & gt; Opzioni ...
  2. Nelle Opzioni di layout della tastiera, fai clic sulla freccia per visualizzare le ▸ posizione del tasto Ctrl .
  3. Inserisci il segno di spunta in Inverti Ctrl e Bloc Maiusc .

Ecco fatto: Left Control e Caps Lock hanno cambiato posizione.

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

    
risposta data glts 05.10.2013 - 14:27
0

Trovo che l'aggiunta di questo script all'avvio sia 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.

    
risposta data golopot 23.10.2014 - 13:29

Leggi altre domande sui tag