Soluzione usando udev
Poiché HAL è obsoleto e udevviene ora utilizzato, questo approccio è preferito rispetto all'altra mia risposta (anche se penso che la soluzione che utilizza HAL sia più semplice).
Tuttavia, per molti tasti funzione puoi semplicemente utilizzare Impostazioni di sistema> Tastiera> Tasti di scelta rapida per associare uno script, prova prima! Ti fa risparmiare un sacco di problemi. Ad esempio i tasti di luminosità non funzionano (non ho idea del perché), quindi se vuoi sapere come cambiare il comportamento dei tasti di luminosità, continua a leggere.
NOTA : se si utilizza un notebook Samsung, è possibile correggere tutti i tasti funzione (a seconda del modello) installando il samsung-toolspacchetto da http://www.voria.org/forum/
Questo howto presuppone che tu sappia usare un terminale e usa l' vimeditor. Se non lo sai vim, sostituiscilo nei comandi con gedito nano.
Determinare la tua tastiera
/lib/udev/findkeyboards
dovrei stampare le tastiere collegate al computer, nel mio caso
USB keyboard: input/event9
USB keyboard: input/event7
AT keyboard: input/event4
Ora ci sono due opzioni:
Tastiere USB :
se si desidera rimappare la tastiera USB, ispezionarle eseguendo
udevadm info --export-db | awk '/event9/' RS="" | grep -P 'ID_(VENDOR|MODEL)(?!_ENC)'
dove devi sostituire il 9 nell'istruzione awk con il numero corretto. L'output dovrebbe essere simile a
E: ID_MODEL=USB_Receiver
E: ID_MODEL_ID=c52b
E: ID_VENDOR=Logitech
E: ID_VENDOR_ID=046d
che indica correttamente che la mia tastiera è gestita tramite il mio ricevitore USB Logitech (input / event7 si è rivelato essere il mio mouse Logitech G9 che ha alcuni pulsanti programmabili).
Tastiera del laptop :
se si desidera rimappare la tastiera del laptop, è necessario ricordare il numero per il AT keyboardquale è 4 nel mio caso. Ottieni anche le informazioni dmi per il tuo laptop:
cat /sys/class/dmi/id/sys_vendor
che è nel mio caso
SAMSUNG ELECTRONICS CO., LTD.
e
cat /sys/class/dmi/id/product_name
che è nel mio caso
305U1A
Determina la tua attuale mappatura dei tasti funzione
Ora possiamo determinare la nostra attuale composizione dei tasti ascoltando la tastiera (inserire il numero corretto)
sudo /lib/udev/keymap -i input/event4
puoi uscire da questo comando usando Escsulla tastiera o Ctrl+ csu un'altra tastiera.
Se lo schermo inizia a scorrere molto verso il basso, premere Esce Ctrl+ calcune volte e riprovare con
sudo /lib/udev/keymap -i input/event4 2> /dev/null
o, se hai ancora il problema di scorrimento
sudo /lib/udev/keymap -i input/event4 > ~/keymap.log
Nell'ultimo caso avrai comunque lo scorrimento, ma se premi i tasti funzione dovrebbero andare ~/keymap.logdove puoi leggerli in seguito.
Ora possiamo controllare la mappatura attuale dei tasti funzione premendo su di essi, il che dovrebbe darti un elenco come (questo è il mio Fn+ F1attraverso Fn+ F12):
scan code: 0xCE key code: kpplusminus
scan code: 0x89 key code: brightnessdown
scan code: 0x88 key code: brightnessup
scan code: 0x82 key code: switchvideomode
scan code: 0xF9 key code: f23
scan code: 0xA0 key code: mute
scan code: 0xAE key code: volumedown
scan code: 0xB0 key code: volumeup
scan code: 0x43 key code: f9
scan code: 0x44 key code: f10
scan code: 0xB3 key code: prog3
scan code: 0x86 key code: wlan
Ora annota i codici di scansione per i quali desideri modificare il comportamento.
Modifica dei codici chiave per i codici di scansione
Se vedi che il codice chiave chiaramente non copre ciò che ti aspetti che faccia la chiave, puoi dare un'occhiata /usr/include/linux/input.hsotto Chiavi e pulsanti per vedere se c'è un codice chiave che meglio corrisponde a ciò che realmente vuoi che accada. I codici chiave ci sono nel formato KEY_KEYCODEe devi scrivere la parte dopo KEY_in minuscolo. A volte cambiare questo è sufficiente per risolvere il problema.
I tasti di luminosità, tuttavia, spesso hanno il giusto codice chiave associato a loro, e questo è ciò che non consente loro di essere rimappati. Quindi dobbiamo cambiarli in altri codici chiave. Useremo prog1e prog2per questo esempio perché questi non sono in uso sul mio computer, tuttavia puoi anche usarli f13attraverso f24o f20attraverso f24se hai una tastiera Apple che ha i tasti F1passanti F19.
Crea un keymap personalizzato :
crea un file keymap nella directory /lib/udev/keymapscon un nome adatto, dai un'occhiata all'output di ls /lib/udev/keymapsper vedere i nomi adatti. Vado con custom-brightnesslo scopo di questa domanda.
sudo vim /lib/udev/keymaps/custom-brightness
e inserisci i codici di scansione dei tasti che desideri modificare seguiti dagli scancodes che desideri che abbiano. Il mio custom-brightnessassomiglia a questo:
# /lib/udev/keymaps/custom-brightness
0x89 prog1
0x88 prog2
Creare un file di rilascio chiave personalizzato. Solo se stai cambiando la tastiera del tuo laptop : a
volte l'evento di rilascio dei tasti non viene inviato correttamente, causando il blocco del computer. Per evitare ciò, scriveremo anche un file di rilascio chiave personalizzato
sudo vim /lib/udev/keymaps/force-release/custom-brightness
questo file dovrebbe contenere gli stessi codici di scansione, il mio sembra
# /lib/udev/keymaps/force-release/custom-brightness
0x89
0x88
Assicurati che i nuovi mapping siano caricati nei file delle regole.
Ora dobbiamo assicurarci che i tuoi mapping siano caricati. Possiamo farlo modificando /lib/udev/rules.d/95-keymap.rules, quindi è intelligente fare un backup
Ancora una volta abbiamo due opzioni:
Tastiere USB :
poiché si dispone di una tastiera USB, è necessario aggiungere la voce in LABEL="keyboard_usbcheck"e dovrebbe essere oltre le altre voci del produttore della tastiera. Questo perché la mia tastiera con
E: ID_MODEL=USB_Receiver
E: ID_MODEL_ID=c52b
E: ID_VENDOR=Logitech
E: ID_VENDOR_ID=046d
è già associato a una delle regole e in caso contrario viene sovrascritto.
Aggiungi la seguente regola, dove dovresti cambiare opportunamente il ID_VENDOR_IDe ID_MODEL_IDe il nome della tua keymap
ENV{ID_VENDOR_ID}=="046d", ENV{ID_MODEL_ID}=="c52b", RUN+="keymap $name custom-brightness"
Tastiera del laptop :
se /lib/udev/findkeyboardssegnalato come la AT keyboardtua regola del laptop dovrebbe andare sotto LABEL="keyboard_vendorcheck", altrimenti mettilo sotto LABEL="keyboard_modulecheck". Mettilo di nuovo sotto le altre voci per il tuo produttore di laptop. Aggiungi la seguente regola ( SAMSUNG ELECTRONICS CO., LTD.è un po 'lunga, quindi ho usato un carattere jolly`)
ENV{DMI_VENDOR}=="SAMSUNG*", ATTR{[dmi/id]product_name}=="305U1A", RUN+="keymap $name custom_brightness"
Ora aggiungi anche una regola /lib/udev/rules.d/95-keyboard-force-release.rulesdopo averne eseguito il backup
sudo cp /lib/udev/rules.d/95-keyboard-force-release.rules /lib/udev/rules.d/95-keyboard-force-release.rules.bak
sudo vim /lib/udev/rules.d/95-keyboard-force-release.rules
Ancora una volta sotto le altre voci del produttore aggiungere
ENV{DMI_VENDOR}=="SAMSUNG*", ATTR{[dmi/id]product_name}=="305U1A", RUN+="keyboard-force-release.sh $devpath custom_test"
Assicurarsi che udev carichi le nuove regole
Per caricare le nuove regole eseguite
sudo adevadm trigger
NOTA: udevadm control --reload-rules(ancora nelle istruzioni su molti siti Web) non funziona.
Ora controlla se le regole sono state applicate correttamente
sudo /lib/udev/keymap -i input/event4
che dovrebbe ora segnalare i tasti luminosità
scan code: 0x89 key code: prog1
scan code: 0x88 key code: prog2
Rimappare le chiavi in Impostazioni di sistema
Se l'ultimo passaggio ha riportato i codici chiave corretti, entrambi i tasti iniziano a funzionare automaticamente (nel caso in cui avessero prima i codici chiave sbagliati).
Per la luminosità devi ancora associare i tasti a uno script che ora è possibile utilizzando Impostazioni di sistema> Tastiera> Tasti di scelta rapida .
Godere
Note :
Se le tue chiavi avevano il codice chiave sbagliato e sono state corrette con questo approccio, segui le istruzioni in /usr/share/doc/udev/README.keymap.txt.gz(puoi aprirlo senza estrarre utilizzando zless) e invia i tuoi risultati agli indirizzi e-mail menzionati lì, quindi le modifiche possono essere incluse nella prossima versione. Molti utenti ne trarranno beneficio!
Mille grazie a questo utile post di Vaidas Jablonskis.