Come vengono associati i codici chiave all'azione appropriata?


18

Dopo aver capito come modificare la mappatura dei codici di scansione in codici chiave usando udev, vedi questa domanda , mi chiedevo come quei codici chiave (o eventi, se vuoi) sono associati all'azione appropriata.

Ad esempio, se si preme volume upsulla tastiera, viene inviato un codice di scansione che verrà quindi convertito nel volumeupcodice chiave. Ma come viene intercettato questo codice chiave, il volume alzato e la notifica appropriata visualizzata?

La mia ipotesi è che da qualche parte debba essere chiamato uno script, quindi mi piacerebbe sapere dove sono quegli script.

EDIT: I codici chiave che menziono non devono essere confusi con i xevritorni dei codici chiave , ma sono anche interessato a quelli;)


3
Non sono d'accordo, ad esempio la notifica è molto specifica per Ubuntu, quindi voglio sapere come è stata inviata la notifica. La mia ipotesi è che da qualche parte debba essere chiamato uno script, quindi voglio sapere dove sono quegli script.
Gerhard Burger,

2
Questa è una domanda specifica specifica di Ubuntu poiché il modo in cui Ubuntu gestisce questo è cambiato negli anni IIRC. È molto interessante sapere quale sia la sequenza di eventi in Ubuntu sull'evento premendo un tasto di scelta rapida che avvia azioni appropriate. Possibili scopi: controlli di luminosità personalizzati , problemi con i tasti di scelta
rapida

2
@Seth Sembra obsoleto. HAL è obsoleto molto tempo fa, dal 10.04 . Manca anche di informazioni su come vengono attivate le notifiche desktop.
gertvdijk,

1
Oggi mi sono imbattuto in wiki.ubuntu.com/Hotkeys/ Risoluzione dei problemi , che fornisce alcuni suggerimenti utili (c'è un link a wiki.ubuntu.com/Hotkeys/Architecture che è molto informativo). Penso che la risposta di Stephen Ostermiller sia nella giusta direzione, ma voglio trovare quegli script ed essere in grado di cambiarli;)
Gerhard Burger,

1
^^ questa informazione sembra essere obsoleta, nessuna associazione di tasti sotto il demone gnome-settings qui ... Un sacco di successi per la luminosità nella sezione compiz (sto indovinando l'unità?) Chi sa come notify-osdfunziona? Penso che sia qui che vengono inviate le notifiche di luminosità ...
Gerhard Burger,

Risposte:


6

Ok, l'ho trovato su https://help.ubuntu.com/community/MultimediaKeys

Quando si preme un tasto sulla tastiera, il kernel di Linux genera uno scancode grezzo per esso (se assegnato). Ogni scancode può essere mappato su un codice chiave. Questo è a livello di kernel. X ha un modo (quasi) totalmente indipendente di mappare le chiavi: X legge la tabella dei codici chiave del kernel all'avvio, quindi mappa il codice chiave alla sua tabella dei codici chiave indipendente (è lo stesso dei codici chiave del kernel ma diverso :)). Quindi ogni codice chiave può essere mappato su un keysym, cioè una stringa che rappresenta una chiave o suggerisce un'azione. Quindi, per avere le nostre chiavi perfettamente funzionanti, hanno bisogno di un kernel scancode / keycode più un X keycode / keysym. Può sembrare strano, ma gli sviluppatori X hanno il motivo per mantenere una mappatura della tastiera separata dal kernel. Non è affatto difficile, solo una procedura abbastanza noiosa.

Quindi i keycode sono mappati su keysym, quindi dove sono i keysym? Ho trovato e rispondo a questa domanda: dove trovo un elenco di tutti i tastierini X in questi giorni? Dato che stiamo parlando dei tasti del volume, questo si trova nel XF86keysym.hcodice sorgente menzionato nella risposta.

In quel file sul mio computer ho trovato quanto segue per il volume:

#define XF86XK_AudioLowerVolume 0x1008FF11   /* Volume control down        */
#define XF86XK_AudioMute    0x1008FF12   /* Mute sound from the system */
#define XF86XK_AudioRaiseVolume 0x1008FF13   /* Volume control up          */

Strano ... valori diversi da qualsiasi altra cosa, forse ci sono più sistemi per la gestione delle chiavi? http://crunchbang.org/forums/viewtopic.php?id=16656


Sto usando Xubuntu e per controllare i tasti, devo mappare le azioni manualmente (in questo modo Come posso cambiare le scorciatoie da tastiera in xubuntu? ). Tuttavia le notifiche sembrano indipendenti, come se stessero rilevando la pressione dei tasti e agendo di conseguenza, Potrebbe significare che altri programmi in Ubuntu sono impostati in questo modo, quindi non è necessario mappare gli script sui tasti.

Quindi sono abbastanza sicuro che i programmi stiano rilevando il tasto (quindi non è possibile trovare script).

In Xubuntu ho avuto questo problema con Pulse Audio e usando script personalizzati per cambiare il volume. Sembrava che Pulse stesse intercettando il tasto Mute , il tasto Mute silenziava Alsa e PulseAudio, ma riattiva solo Alsa per soluzioni alternative interessanti.


Dai un'occhiata a NotifyOSD https://wiki.ubuntu.com/NotifyOSD#Volume_changes

Se guardi questi diagrammi: https://wiki.ubuntu.com/NotifyOSD#Architecture

Soprattutto questo: inserisci qui la descrizione dell'immagine

Mostra che esiste un "listener di chiavi hardware" che riceve il modulo DBus o HAL? Quindi "recupera l'elemento visivo dal sistema" che le icone di suono e luminosità sono nella fonte di Notify-OSD, e quindi crea la bolla da lì.


Tutto ciò è pazzesco e confuso, ma per quanto ne capisco (finora):

raw scancode (ex. e016)> keycode (ex. 160)> keysym (ex. XF86AudioMute)> gnome-settings-daemon (es. volume-up)> segnale DBus> hardware-keys-listener per notification-osd (o altro programma di ascolto)


Sembra che questo stia arrivando da qualche parte! Contrassegnato come CW dall'inizio, quindi suppongo che stai ancora migliorando? :)
gertvdijk,

sì, ho bisogno di esaminare un po 'di più, il diagramma contiene molti punti interrogativi.
Mateo,

A proposito, sei riuscito a trasformarlo in una risposta wiki della community? Forse chiedi a una mod di annullarla ... Oh, e quei grafici sono molto probabilmente un po 'obsoleti, perché HAL è deprecato da molto tempo ... Beh, almeno stiamo arrivando da qualche parte: D
Gerhard Burger


@gertvdijk Lo so, ma sarebbe un peccato per tutti i voti che gli mancheranno;)
Gerhard Burger

1

Nella maggior parte dei casi, non ci sono script eseguiti. Fanno sì che gli eventi vengano inviati al gestore finestre o al demone delle impostazioni. L'unica volta in cui sono a conoscenza degli script nel processo è quando si configurano associazioni di tasti personalizzate. Per le combinazioni di tasti personalizzate, è possibile aggiungere righe di comando (eseguibili o script) e vincolarle alle chiavi.

Si prega di vedere questa risposta che ho scritto a una domanda sul backup delle combinazioni di tasti in Ubuntu: dove sono archiviate le scorciatoie da tastiera di GNOME? Ho uno script che esegue il backup o ripristina tutte le combinazioni di tasti, comprese le combinazioni di tasti personalizzate. Se esegui lo script, puoi vedere dove sono archiviati i keybinding in dconf e quale applicazione viene informata dell'evento chiave.


allora come vengono attivate le notifiche desktop?
Gerhard Burger

Credo che il demone delle impostazioni di gnome sia responsabile per innescare quelli nel caso di volume e luminosità, ad esempio.
Stephen Ostermiller,

2
Ho eseguito il tuo script, ma tutto ciò che sembra fare è ottenere le scorciatoie a cui puoi accedere con Impostazioni di sistema> Tastiera> Scorciatoie , ad esempio non ho trovato alcun riferimento alla luminosità.
Gerhard Burger,

bel copione per ottenere i tasti dello script.
Mateo,

0

La risposta si riferisce ai driver .

Ogni hardware deve avere un driver per interagire con il sistema operativo.

Citando http://www.linuxforu.com/2010/11/understanding-linux-device-drivers/ :

Un driver guida, gestisce, controlla, dirige e monitora l'entità sotto il suo comando. Cosa fa un driver di autobus con un bus, un driver di dispositivo fa con un dispositivo (qualsiasi componente hardware collegato a un computer) come un mouse, una tastiera, un monitor, un disco rigido, una videocamera Web, un orologio e altro.

Inoltre, un "pilota" potrebbe essere una persona o persino un sistema automatico monitorato da una persona (ad esempio un sistema di pilota automatico su aerei di linea). Analogamente, un determinato componente hardware potrebbe essere controllato da un componente software (un driver di dispositivo) o potrebbe essere controllato da un altro dispositivo hardware, che a sua volta potrebbe essere gestito da un driver di dispositivo software. In quest'ultimo caso, tale dispositivo di controllo viene comunemente chiamato controller di dispositivo. Questo, essendo un dispositivo stesso, spesso necessita anche di un driver, che viene comunemente definito driver del bus.

Un dispositivo ha un registro dispositivi che memorizza i bit di controllo / stato e i bit di dati. Ogni volta che alcuni dati devono essere trasferiti, di solito vengono inviati impostando i bit di dati.

Quindi, ogni volta che premi un tasto sulla tastiera, alcuni dati vengono scritti sul registro. Questi bit vengono letti dal driver del dispositivo e viene eseguita l'azione appropriata. Questa è la breve spiegazione

link:


3
Uhm ... Non penso che i conducenti in realtà abbiano alcuna idea del significato del tasto che premo sulla tastiera. Alcuni dispositivi speciali di tasti di scelta rapida nei notebook potrebbero aver bisogno di un driver per questo - ma questo non copre i tasti di scelta rapida multimediali regolari come "volume su". Questo deve essere coperto in un'area più comune del kernel / X / DE. Penso anche che i riferimenti siano molto ampi sulla programmazione del driver del dispositivo kerner Linux.
gertvdijk,

Penso che per la maggior parte delle tastiere moderne Ubuntu utilizzi il evdevdriver, ma non vedo come sarebbe utile qui ...
Gerhard Burger
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.