Perché i miei collegamenti xmodmap che coinvolgono AltGr funzionano solo su alcuni tasti?


12

Voglio rimappare il mio AltGR + Right_Windows ma non riesco a capire come. Indipendentemente da ciò che provo, premendo il tasto destro di Windows viene emesso il nome keysym quando si preme ALT destro o no.

Questi sono i contenuti del file xmodmap che sto testando in questo momento. Nella mia tastiera, 38 è il codice chiave per "a", 48 è il codice chiave per aportrophe / doublequote e 134 è il codice chiave per il tasto destro di Windows.

keycode  38 = 1 2 3 4 5 6 7 8
keycode  48 = 1 2 3 4 5 6 7 8
keycode 134 = 1 2 3 4 5 6 7 8

Quando premo Right_Alt + apostrofo, viene emesso 5 ma Right_Alt + a e Right_Alt + Right_Windows danno 1 (sia quando si preme alt destro che quando non lo è) che non è quello che volevo.

Il mio layout di tastiera attuale è us(alt-intl)e apparentemente l'alt destra è impostato per funzionare come AltGr / Iso_Level3_Shift. L'output di xmodmap -pmè il seguente:

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

Non ho idea di cosa stia succedendo, ma se non l'hai già fatto, potresti voler eseguire xeve premere le varie combinazioni di tasti per vedere se l'hardware e fino al livello di Xwindows sta iniziando a premere i tasti distintivi.
Joe,

Sto riscontrando lo stesso problema. Volevo modificare virgola e punto per supportare anche la stampa di virgolette doppie ceche e inglesi („/“ / ”) che dovrei scrivere usando il tasto compose altrimenti. Sto usando il us(cz_sk_de)layout della tastiera e xmodmap.
Pavel Šimerda,

Così quello che ora? Non è pratico sprecare un'altra taglia né iniziare una nuova domanda quando questa descrive abbastanza bene il problema. Sembra un bug in xorg ma non ho trovato riferimenti. La risposta esistente è chiaramente sbagliata nonostante sia stata automaticamente assegnata.
Pavel Šimerda,

Ho finito per rinunciare e usare diversi tasti che conosco funzionare: / Sono d'accordo che questo sembra un bug ma non so a quale sistema sia correlato e dove segnalarlo ...
hugomg

Risposte:


7

Utilizzo di xmodmap per configurare i mapping dei singoli tasti

È tempo di scrivere i risultati della mia ricerca.

Ho pensato di aver perso qualcosa in xmodmap e che non è ben documentato e che le persone sono confuse. Ma si è scoperto che il design di X.Org per XKB e xmodmap è semplicemente stupido.

Errore epico: xmodmap

È possibile utilizzare xmodmap per ridefinire i mapping esistenti purché tali mapping siano effettivamente presenti nel layout di tastiera originale. Nel caso descritto nella domanda non è possibile estendere il comportamento di alcun tasto per usare AltGr. È possibile modificare le chiavi della palestra AltGr solo per i codici chiave che già utilizzano AltGr.

Vedi anche: http://blog.azundris.com/archives/193-X-treme-pain-XKB-vs-XModMap.html

Soluzione alternativa: Mode_switch

Questa soluzione alternativa è descritta nella risposta di @ Ned64. Puoi rimappare AltGrda ISO_Level3_Shifta Mode_switch.

Ho usato con successo la seguente riga di comando per rimappare AltGr.

xmodmap -e 'keycode 108 = Mode_switch'

Lo svantaggio è che interromperà il layout della tastiera corrente ma è possibile ricreare tutti i mapping uno per uno utilizzando xmodmapcome @ Ned64 già menzionato.

Soluzione alternativa: layout tastiera modificato

Sto usando us(cz_sk_de)come layout di tastiera e ho provato a modificarlo aggiungendo la configurazione per i tasti che volevo estendere.

key <AB08>  { [ comma, less, doublelowquotemark, leftdoublequotemark ] };
key <AB09>  { [ period, greater, ellipsis, rightdoublequotemark ] };

(Nella sezione xkb_symbols "cz_sk_de"di /usr/share/X11/xkb/symbols/us)

Basta ripristinare il layout della tastiera per utilizzare la versione modificata.

setxkbmap 'us(cz_sk_de)'

Ora è possibile (1) tipo ceco e inglese virgolette ed ellissi utilizzando combinazioni di ,, ., Shifte AltGrle chiavi e / o (2) rimappare quelle chiavi che utilizzano xmodmapora che sono definiti.

Lo svantaggio principale è che setxkbmapnon sembra supportare posizioni arbitrarie per i layout di tastiera e quindi è necessario scrivere nella configurazione del sistema anziché nella home directory.

Conclusione

Questo sembra essere un esempio di progettazione eccessiva e mal progettata di X.Org in cui anche una cosa così banale come mappare un codice chiave e una combinazione di modificatori in un simbolo si rivela un problema. Gli strumenti non sembrano fornire un modo ragionevole per cambiare le singole mappature dei tasti nella configurazione dell'utente senza effetti collaterali.


"Non è possibile estendere il comportamento di alcun tasto per usare AltGr" - sembra che questo sia stato il problema da sempre! Grazie.
hugomg,

5

Fase 1: rendere AltGr utilizzabile

Ho scoperto che le chiavi modificate AltGr funzionano solo sul mio sistema se rimappo anche la chiave AltGr in Mode_switchquesto modo:

xmodmap -e "keycode 108 = Mode_switch Mode_switch Mode_switch Mode_switch"

Se hai una tastiera diversa, potresti dover sostituire quella 108con il tuo codice, controlla digitando

xmodmap -pke | grep Alt_R

quindi usa quel numero. (La chiave viene normalmente chiamata Alt_Rsu sistemi che conosco.)

In alternativa, ciò può funzionare anche se Alt_R non è ancora assegnato a qualcos'altro:

xmodmap -e "keysym Alt_R = Mode_switch Mode_switch Mode_switch Mode_switch"

Il tuo modificatore AltGr ora servirà la posizione 3 (con Maiusc: 4) nell'elenco dei modificatori.

Passaggio 2: assegnare le chiavi come richiesto

Puoi assegnare le varianti AltGr per qualsiasi tasto della tastiera che desideri. Se disponi di altre chiavi che non corrispondono al codice desiderato ora, devi riassegnarle come le altre chiavi (quelle che hai testato).

Passaggio 3: convertire questo in uno script

Ora basta prendere i xmodmapcomandi e scrivere tutte (ma solo) le modifiche alla tastiera predefinita in un file, che è più veloce del caricamento di una mappa di tasti completa. Avvia questo script una volta dopo ogni accesso e ogni volta che la mappa dei tasti viene ripristinata da un processo.

Ho sperimentato molto con questo nel corso degli anni, sotto Solaris, IRIX e Linux, e per quanto ne so questa è l'unica soluzione per far funzionare AltGr - e ha funzionato bene per me per più di 20 anni.


1
Con questo, il tasto destro della finestra ha iniziato a fungere da "3" anziché "1". Tuttavia, ora tutti i modificatori altgr esistenti hanno smesso di funzionare (suppongo che avrebbe dovuto essere un "5" anziché un "3" per funzionare?)
hugomg

Grazie per aver provato questo. Si prega di pubblicare xmodmap -pme xmodmap -pke | grep -w SOMECHANGEDKEYin questa situazione, per una chiave che non funziona più.
Ned64,

(allora dovremo aggiungere il nuovo modificatore usando in xmodmapbase al tuo output)
Ned64

xmodmap -pke | grep Alt_Rnon restituisce alcun risultato sul mio sistema. Il mio sistema è Lenovo ThinkPad X230 con Gentoo stabile. Ho anche provato grep -isenza alcun risultato.
Pavel Šimerda,

L'ho provato e il problema è che le lettere accentate us(cz_sk_de)smettono di funzionare per me. Pertanto questa risposta non funziona per me e non funzionerà per molti altri.
Pavel Šimerda,

1

Apparentemente, xmodmap non legge l'AltGR predefinito come dovrebbe, potrebbe essere limitato a layout di tastiera specifici, forse sono tutti layout non statunitensi, in entrambi i casi, il vero problema è che mentre puoi sostituire il layout di tastiera, alcune persone potrebbero non vogliono davvero farlo in quanto hanno bisogno di usare caratteri speciali sul layout a cui sono abituati (come i layout di tastiera scandinavi che hanno caratteri come ðþæöáúíóåů e così via) che sarebbe difficile configurare per altri layout di tastiera.

Puoi correre

xmodmap -e "keycode 108 = Mode_switch"

Per ricollegare AltGR a qualcosa con cui xmodmap può funzionare, e in effetti, la terza assegnazione di un keycoad verrà emessa quando si preme AltGR ora, tuttavia interromperà completamente il layout originale della tastiera poiché nessuna associazione di tasti AltGR funzionerà più con il tasto AltGR.

Ho trovato due soluzioni alternative che non interrompono il layout di tastiera esistente e non comportano il cambio di layout , uno è quello di associare Mode_switch a un altro tasto.

La chiave ideale per questo è Super_R che si trova proprio accanto ad AltGR, il codice chiave per esso è 134. Tuttavia non tutte le tastiere li hanno e nel mio caso su un laptop non ce l'ho nemmeno, quindi ho deciso di legarlo all'ultimo chiave rimanente che non uso praticamente mai, Right Control.

xmodmap -e "keycode 105 = Mode_switch"

Ho un layout di tastiera fisica americano, ma la configurazione del layout europeo e il tasto less / maggiore / barra (noto anche come ISO_Backslash, sebbene non sia riconosciuto dalla stessa xmodmap) di solito manca vicino a Z su tali tastiere. L'ho legato a Menu (135) ma potrebbe servire come alternativa a R_Ctrl e Super_R

Questa è una soluzione sporca suppongo.

La seconda soluzione ha richiesto un po 'più di tempo per capire. Utilizzo di sxhkd (alternativa a xbindkeys)

Se lo aggiungi a ~ / .config / sxhkd / sxhkdrc :

~ISO_Level3_Shift
    xdotool key Mode_switch

AltGR funzionerà normalmente, ma quando viene premuto, Mode_switch viene attivato (un po 'come il maiuscolo, ma per Mode_switch) e tutti i tasti xmodmap che lo usano saranno bloccati in modalità AltGR fino a quando non si preme nuovamente AltGR per attivarlo. Dovrebbe essere semplice creare uno script per attivarlo automaticamente quando la chiave viene rilasciata, ma i miei tentativi di farlo sono stati piuttosto difettosi, per non dire altro.

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.