come assegnare un altro modificatore al tasto Alt per X11?


9

Scopo:

Vorrei assegnare Alt al tasto CapsLock e Meta al tasto Alt. In tal modo, Alt-key non verrebbe più riconosciuto come Alt e CapsLock-key non verrebbe più riconosciuto come CapsLock.

openSUSE 11.4

In precedenza:

openSUSE 11.1 - dato che sono l'unico utente del mio computer, ho semplicemente "modificato" il file / usr / share / X11 / xkb / keycodes / xfree86 e ha funzionato senza problemi. Le chiavi erano collegate ai loro simboli al livello più basso.

I problemi:

  1. xkb

    Ho creato una variante del layout polacco (pl_ext) che (per il test) è costituito da tali voci:

    key <CAPS> { [ Alt_L ] };
    modifier_map Mod1 { Alt_L, Alt_R };
    

    Comunque questo semplicemente non fa nulla, il tasto CapsLock in xev viene riconosciuto (simbolo) come Alt_L, ma quando premo il tasto CapsLock si comporta come CapsLock (ad esempio, supponendo che tu abbia File nel menu, Alt + F dovrebbe aprire questo menu, non lo fa ).

    Domanda: Come definire un file di layout per impostare CapsLock-key come Alt e Alt-key come Meta?

    Modifica: metà del successo qui! Ora ho tali voci:

    key <CAPS> { [ Alt_L ] };
    modifier_map Mod1 { <CAPS> }; // this is a difference
    

    e questo funziona come desiderato. Questo non:

    key <LALT> { [ Meta_L ] } ;
    key <RALT> { [ Meta_R ] } ;
    modifier_map Mod5 { <LALT>,<RALT> };
    

    I tasti Alt sono riconosciuti come Meta da xev, ma posso ancora aprire i menu con Alt + F, cambiare finestra e non dovrei. E d'altra parte non posso inserire alcun carattere nazionale, e dovrei.

  2. xfree86

    Ma ora questo non funziona, immagino che venga letta altra tabella di file invece di xfree86.

    Domanda: Come scoprire quale file della tabella dei codici chiave viene utilizzato dal sistema (X / Gnome)?

    Modifica: l'opzione migliore per me - modificare le tabelle dei codici chiave - è stata risolta dalla risposta di macias !

  3. xmodmap

    La metà del successo qui. Questa parte funziona come desiderato:

    rimuovere Lock = Caps_Lock keysym Caps_Lock = Alt_L

    Ora, ho veramente CapsLock-key che è mappato su Alt. Ma questo:

    keysym Alt_L = Meta_L

    ... fa una cosa strana. xev mostra che il tasto Alt è mappato su Meta, ma quando premo Alt + F (questo dovrebbe essere mappato su Meta + F -> non fare nulla) si apre il menu File. Inoltre, quando premo Alt + Tab, ottengo il cambio di finestra (non dovrei - Alt è Meta ora).

    Domanda: Come "eliminare" il vecchio comportamento per il tasto Alt?

    Modifica: questa parte è risolta dalla risposta di Gilles .

Sommario:

Rispondere a qualsiasi domanda (si spera) risolverebbe il mio problema, tuttavia preferisco usare xkb interamente perché potrei quindi comprimere tutti i file per xkb e modificare il layout in un unico posto. Grazie in anticipo per qualsiasi aiuto!


Se hai trovato una risposta, pubblicala come tale e fornisci informazioni sufficienti per altre persone che potrebbero essere interessate. (E 'perfettamente bene per rispondere alla tua domanda, se hai trovato altrove o da soli la risposta, si può anche contrassegnare la risposta come accettata, se volete.)
Gilles 'SO-tappa è male'

@Gilles, ok, ma mantengo la tua risposta come risposta, solo per evitare possibili accuse l'ho fatto per punti. Inoltre, mi hai aiutato molto.
Greenoldman,

Non ricevi comunque punti per accettare la tua risposta. (Ottieni punti per i voti sulla tua risposta, il che è giusto da quando hai svolto il lavoro.) La cosa più importante è avere le informazioni chiaramente presentate. Ora ci sono due risposte a questa domanda, una con xmodmap e una con xkb, e la pagina sarebbe più chiara se fossero entrambe pubblicate come risposte.
Gilles 'SO-smetti di essere malvagio' il

Risposte:


7

(Questa risposta riguarda solo xmodmap. Sono sicuro che è possibile farlo con XKB, non so proprio come.)

I modificatori e le palestre sono assegnati in modo indipendente. Ma ottieni strani effetti se non li imposti in modo coerente. Penso che tutto ciò che ti manca sia il addcomando a cui assegnare un modificatore Meta_L, anche se potresti dover cancellare e riassegnare i tasti modificatori. Si può sostituire Mod1e Mod2da Mod3, Mod4e Mod5: sono intercambiabili, basta assicurarsi di non utilizzare uno per due scopi diversi.

clear Mod1
clear Mod2
remove Lock = Caps_Lock
keysym Caps_Lock = Alt_L
keysym Alt_L = Meta_L
add Mod1 = Alt_L Alt_R
add Mod2 = Meta_L Meta_R

Grazie tante. Quindi, in effetti, ho usato Mod5 anziché Mod2 per Meta, e ora posso scrivere come previsto (uso il tasto meta + per molti caratteri nazionali). Ma stranamente, ora ho di nuovo problemi con CapsLock-key - è vincolato a ... Meta. Immagino perché, perché una volta esiste un legame con Alt, ma Alt viene ridefinito. Quindi, come fare la differenza e una volta insistere sul codice e la seconda volta sul simbolo? Vorrei non usare i codici chiave grezzi perché potrebbero cambiare da tastiera a tastiera. Non riesco a scambiare l'ordine di keysyms, perché nell'ultima riga otterrei un errore.
Greenoldman,

Il problema keysym Caps_Lock = Alt_Lè che se lo esegui due volte, riporta il sistema in uno stato indesiderato. Ecco perché uso i codici chiave ; variano tra sistemi operativi e architetture (non tra tastiere), ma non così spesso.
Gilles 'SO- smetti di essere malvagio' il

Grazie per la spiegazione, ho indovinato subito :-). Se non ti dispiace lo terrò un po 'più a lungo come una domanda senza risposta, forse qualcuno potrebbe risolvere il mio problema a livello di xkb, che sarebbe più flessibile (cambiare layout uccide xmodmaps).
Greenoldman,

Grazie enormi, ha continuato a combattere con simboli / pc senza successo.
Cody Craven,

9

Modifica approccio codici chiave

Ho trovato la risposta sul forum Ubuntu polacco. Ora non si modifica il file "xfree86" ma il file "evdev". In questo modo è possibile apportare modifiche permanenti che funzionano per tutti i layout.

Esempio (su richiesta Gilles) - accedi come root, vai a

/usr/share/X11/xkb/keycodes

fare un backup del file "evdev" e quindi modificarlo. Cambia i codici a tuo piacimento, ad esempio nel mio caso:

<LALT> = 66; // when I press CapsLock (66 code) system will report pressing LeftAlt
<LMTA> = 64; // I will get LeftMeta when pressing LeftAlt (64 code)

Puoi trovare quali sono i codici eseguendo il comando "xev", ma puoi semplicemente guardare il file "evdev" originale.

Esci, accedi, goditi la tua nuova tastiera :-).


questo è probabilmente il modo giusto di andare con XKB. sto eseguendo Linux Mint e ho riscontrato problemi in cui scrivo le Keyboard Preferencesopzioni per Capslocksovrascrivere la XKBconfigurazione personalizzata . Dal momento che è un pulsante di selezione, non riesco a vedere come impedire l'applicazione di una delle regole della GUI.
dcunited001,

Riesci a preservare il comportamento di LALT? Cioè, non cambiarlo in LMTA? Ho provato ma a quanto pare non puoi avere due incarichi del modulo <LALT> = ...
Daniel

con questo è stato così facile cambiare LALT e RALT su Ubuntu ... grazie mille. per tutti i googler: mappa alt su altri tasti ubuntu alt su altgr ubuntu rimappa alt su ctrl
Noel Schenk

4

prova questo:

    key <CAPS>  { [ Alt_L, Alt_L ] };
    key <LALT> { [ Meta_L, Meta_L ] };
    modifier_map Mod1 { Alt_L, Alt_R };
    modifier_map Mod5 { Meta_L, Meta_R };

notare le definizioni a due livelli. Questo perché il valore predefinito per LALT è [Alt_L, Meta_L]; se non si ridefinisce il secondo, rimarrà Meta_L.

Guarda questa risposta su xkb per come ridefinire alcune chiavi senza la necessità di modificare i file predefiniti principali (quindi, non è necessario essere root). In tal caso, nel file dei simboli locali sarà necessaria una piccola sezione come:

partial modifier_keys
xkb_symbols "capsasalt_altasmeta" {
        replace key <CAPS>  { [ Alt_L, Alt_L ] };
        replace key <LALT> { [ Meta_L, Meta_L ] };
        modifier_map Mod1 { Alt_L, Alt_R };
        modifier_map Mod5 { Meta_L, Meta_R };
};
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.