GNOME e tastiera

8 risposte [Ultimo contenuto]
Ritratto di mcortese
mcortese
(Guru)
Offline
Guru
Iscritto: 27/02/2009
Messaggi: 640

Una volta la tastiera sotto X era configurata dall'amministratore editando a mano l'apposita sezione del file di configurazione del server. Se un utente aveva desideri particolari, si faceva un suo file .Xmodmap nella home con le personalizzazioni del caso.

Oggi, con l'avvento degli ambienti desktop (io parlo di GNOME, ma altri sistemi hanno meccanismi simili), la configurazione della tastiera è vista come una preferenza dell'utente: c'è una comoda GUI per settarla e ci pensa gconf a tenerla archiviata e a far sì che sia caricata all'avvio.

La GUI permette all'utente di scegliere il layout e di attivare alcune opzioni da una lista predefinita, ad es. come funziona il Blocco Maiusc, se l'Alt di destra deve copiare quello di sinistra, cosa farsene del tasto Menù, ecc.

Ma se uno ha delle esigenze diverse, se vuole per esempio disabilitare il tasto Bloc Num che continua a premere per sbaglio, o rimappare quegli utilissimi tasti come ç e § o ancora finalmente trovare un degno uso per il tasto Ins... in questi casi come si fa?

Ritratto di olorian
olorian
(Junior)
Offline
Junior
Iscritto: 24/05/2009
Messaggi: 18

sicuramente questo metodo farà al caso tuo; è quello che ho usato per convincere X a vedere la rotella del volume del mio portatile, letta da xev come tasti 174 e 176 [che sono poi i codici "normali" per le rotelline, ma a saperlo prima..]

ecco la base: X memorizza ogni tasto con un codice, detto [indovina] Keycode.
Alla N corrisponde il keycode 57, alla x il 53, alla p il 33 ecc. ecc.
Per conoscere il keycode di un tasto qualunque si può usare il programma da terminale "xev", veramente molto intuitivo, ma per la necessità del topic forse eccessivo.

Per conoscere in un solo momento i keycode di tutti i tasti basta dare da terminale il comando:
xmodmap -pke
mentre con
xmodmap -pke > 'lista keycode'
otteniamo un file di testo più comodamente consultabile della finestra del terminale.

Il tasto ò/ç sulla mia tastiera è il 47; verosimilmente lo è su tutte le tastiere.
Dato che io uso in X i layout di tastiera italiana, tedesca e statunitense il comando per quel tasto mi dà:
keycode  47 = ograve ccedilla odiaeresis Odiaeresis at dead_cedilla dead_doubleacute dead_doubleacute semicolon colon
cioè indica, nell'ordine, i risultati di:
- pressione del tasto con tastiera italiana = ò
- pressione con maiusc = ç
- pressione con tastiera tedesca = ö
- pressione con tastiera tedesca + maiusc = Ö
- pressione con italiana + alt gr = @
- pressione con italiana + alt gr + maiusc = ¸ [è un "dead", cioè se premi alt gr + maiusc + ò non succede nulla, se subito dopo premi la s ottieni una ş]
- pressione con tedesca + alt gr = ˝
- pressione con tedesca + alt gr + maiusc = ˝
- pressione con americana = ;
- pressione con americana + alt gr = :
La tastiera americana non supporta il tasto compose, per cui premere il tasto alt gr è inutile, non permette di inserire caratteri aggiuntivi

con un solo layout di tastiera, la riga apparirebbe
keycode 47 = ograve ccedilla at dead_cedilla
cioè: tasto -- tasto + maiusc -- tasto + alt gr -- tasto + maiusc + alt gr

facciamo l'ipotesi di voler mettere una bella e utilissima [ma non in linux, in effetti, dove basta usare il caps lock..] Ò al posto della ç ed una & sopra alla @, al posto della ¸
a tal fine basterebbe usare il comando xmodmap -e [.....] per ogni tasto che si vuole modificare, ma così si rischierebbe di perdere il controllo di quali tasti si sono modificati, quindi meglio scrivere le modifiche in un solo file; nel nostro caso:

keycode 47 = ograve Ograve at sterling<br />..... [altre modifiche]
salviamo il file per esempio col nome Xmodificato47
per scrupolo salviamo la configurazione precedente del tasto in un altro file, diciamo Xoriginale47

dando da terminale - nella cartella in cui il file è salvato - il comando:
xmodmap Xmodificato47
si può verificarne immediatamente l'effetto

una volta riavviato X si tornerà alle impostazioni originali, ma nel caso si volesse ritornarci subito [download o videochiamata in corso, schiribizzo, ...], basterà ripristinarle col comando
xmodmap Xoriginale47

se le impostazioni piacciono si può mettere il comando all'avvio della sessione in mille modi, per esempio creando un lanciatore [eseguibile] che punti ad esso e mettendolo nella cartella ~/.config/autostart ...

con questo criterio si possono rimappare i tasti anche se si usano due o più layout di tastiera

il tasto bloc num è uno come tutti gli altri, dotato di un keycode proprio che risulterà dal xmodmap -pke
per disabilitarlo basta con lo stesso principio rimuovere dal tasto la sua funzione..
nonostante io non lo veda sulla mia tastiera, bloc num mi viene mappato come
keycode  75 = F9 XF86_Switch_VT_9<br />keycode  76 = F10 XF86_Switch_VT_10<br /><b>keycode  77 = Num_Lock Pointer_EnableKeys</b>
inserendo nel file Xmodifiche
keycode 47 = ograve Ograve at sterling<br />keycode  77 =<br />..... [altre modifiche]
otterrei contemporaneamente la modifica del tasto ò e la disabilitazione di bloc num

per "dare un degno uso" al tasto ins invece non c'è bisogno di mettere mano a X.. se usi gnome [kde o xfce, e magari anche con altri DE/WM], potrai impostare delle scorciatoie da tastiera a tuo gusto..

per esempio io [che uso xfce] ne ho impostate tante legate al tasto windows.. ma questa è un'altra storia...

Ritratto di mcortese
mcortese
(Guru)
Offline
Guru
Iscritto: 27/02/2009
Messaggi: 640

Sì, insomma, la solita trafila con xmodmap.

Quindi adesso parte X che si carica il suo layout come da Xorg.conf, poi gnome-settings glielo fa cambiare come da impostazioni gconf, e infine il mio script chiama xmodmap che lo modifica ancora interpretando un file locale.

Non esiste un modo per "compilare" la configurazione della tastiera e caricarla una volta sola? non si era parlato di qualcosa di simile in risposta al famoso esperimento di Arjan e Auke?

Ritratto di olorian
olorian
(Junior)
Offline
Junior
Iscritto: 24/05/2009
Messaggi: 18

Visto che nessun altro commenta, rispondo io [anche se nel mio topic ancora c'è l'aria che....]

Testato e Funzionante su Debian Lenny [stabile] con Xorg 7.3

Fai una copia del file /usr/share/X11/xkb/symbols/it, quindi modifica l'originale a piacimento, facendo attenzione ad inserire le modifiche nella sezione giusta [non che sia molto difficile, sono tutte commentate] ed ai tasti giusti [...], quindi riavvia X.

La modifica è stabile, permanente, facilmente reversibile, non appesantisce il sistema, non fa ingrassare e non è sovrascrivibile da GNOME né da nessun altro WM, DE o pincopallino qualunque.

Naturalmente fai bene i tuoi conti in modo da non rimanere poi con caratteri di cui hai bisogno ma non puoi inserire.

prego prego..~

P.S.: se ti interessa creare una nuova disposizione da affiancare alla standard [anche se mi sembra di aver capito che non è il tuo caso], puoi leggere la guida Creating custom keyboard layouts for X11 using XKB, anche se essendo un po' vecchia bisogna fare attenzione alle corrispondenze tra i file di XFree86 e Xorg [ma non è molto difficile]

Ritratto di olorian
olorian
(Junior)
Offline
Junior
Iscritto: 24/05/2009
Messaggi: 18

P.P.S.: anche se io al tuo posto [nell'ipotesi di cui al P.S.] invece di imbarcarmi nella creazione di una nuova disposizione per poi inserirla nel file .lst ecc. ecc. [per quanto la cosa sia particolarmente sfiziosa], prenderei una disposizione che sono sicuro non userò mai, sostituirei il suo contenuto con quello del file ../it, quindi lo modificherei e la affiancherei ad it in xorg.conf..

P.P.P.S.: sempre allo scopo di essere più utile possibile a chi, con gli stessi problemi, si trovi a passare, nel mio caso basta, avanza ed è il migliore il metodo di Xmodmap, perché mi serviva solamente mappare la rotellina del volume del portatile, di modo da poter impostare le relative scorciatoie in xfce:
olorin@olorian:~$ cat .Xmodmap <br />keycode 174 = XF86AudioLowerVolume<br />keycode 176 = XF86AudioRaiseVolume

Ritratto di mcortese
mcortese
(Guru)
Offline
Guru
Iscritto: 27/02/2009
Messaggi: 640

Come al solito, la soluzione perfetta non esiste:
1) se modifichi la "it" originale poi tutti gli utenti si trovano con dei tasti che non fanno quello che si aspettano;
2) se invece ogni utente si fa il proprio .Xmodmap, ci vuole un passo e un'applicazione in più da lanciare all'avvio...

La (1) è preferibile su di un laptop che usi solo tu, la (2) per un sistema condiviso.

Io però mi stavo chiedendo (ed è più un pensiero filosofico che un reale problema pratico) come mai la configurazione della tastiera sotto X è ancora così complicata? Con tanti piccoli file che si integrano e richiamano a vicenda...

Ok, lo si fa per riusare certe sottoparti, così come un sorgente C è pieno di #include. Però il sorgente C viene compilato prima dell'uso. Considerando che difficilmente la tastiera cambia da un avvio e l'altro, perché il server X se li deve interpretare ogni volta?

Mi sembra che qualcuno avesse parlato di cambiare tutto ciò, un po' come in passato abbiamo abbandonato il formato termcap (in ASCII) per il formato terminfo (compilato). Qualcuno ne sa qualcosa?

P.S. riguardo XFCE: ha un programma che permette all'utente di cambiare l'impostazione della tastiera o si basa su quella che X ha già caricato sulla base del file xorg.conf?

Ritratto di olorian
olorian
(Junior)
Offline
Junior
Iscritto: 24/05/2009
Messaggi: 18

e dammelo un po' di sfizio xDDDDDDDDDD

Purtroppo non uso GNOME da un po', per cui non saprei dire, ma su xfce la soluzione sarebbe rapidissima anche per il problema del sistema condiviso.
In xfce non si possono maneggiare le impostazioni della tastiera [almeno non con la versione presente in Lenny], ci si appoggia a quelle di Xorg.
Tuttavia l'applet "Keyboard layout switcher" permette di impostare la disposizione predefinita per ogni utente..
Per cui, se più utenti utilizzassero un computer e non si volesse ricorrere al Xmodmap* si potrebbe come suggerivo modificare un'altra disposizione. L'utente che vuole usare quella al posto dell'italiana la indicherebbe come predefinita e sarebbe quella in uso all'avvio di xfce, solo per quell'utente..

*Fermo restando che nel caso di un solo utente che voglia usare una disposizione propria, figuriamoci poi se ognuno ne vuole una propria, tanto più che le modifiche a conti fatti riguarderebbero un paio di tasti, il sistema più pratico resta Xmodmap... chi se ne frega se si ha quell'effetto ping pong tra X, gnome-settings-daemon e Xmodmap -D

Purtroppo per le questioni filosofiche non posso aprire bocca -D non ho quasi alcuna esperienza in proposito xD

Ritratto di olorian
olorian
(Junior)
Offline
Junior
Iscritto: 24/05/2009
Messaggi: 18

Che stupido, come ho fatto a dimenticarlo...
In GNOME si può scegliere, dalle impostazioni della tastiera, la disposizione predefinita ed eliminare le altre.
Quindi prendendo la il, trasformandola nella disposizione personalizzata che si preferisce, ed impostandola da GNOME come predefinita eliminando la italiana, sarà lo stesso gnome-settings-daemon a caricare la propria disposizione all'avvio, senza che gli altri utenti ne siano in alcun modo influenzati!
In sostanza la stessa soluzione di xfce, ma senza il fastidio della doppia disposizione -))

Ritratto di mcortese
mcortese
(Guru)
Offline
Guru
Iscritto: 27/02/2009
Messaggi: 640

Hehe. Questo sì che è un hack! Se non fosse che al prossimo apt-upgrade i file della tastiera "il" vengono sovrascritti, sarebbe perfetto.