Posso rimappare il tasto BLOC MAIUSC per riprodurre l'audio?


16

Sto cercando di riutilizzare l'inutile chiave di blocco maiuscole per qualcosa di utile il 16.04 MATE. Mi sono imbattuto

setxkbmap -option ctrl:nocaps

per disabilitarlo, ma potrebbe essere rimappato per riprodurre / mettere in pausa VLC per esempio? Grazie per le tue risposte!


Non penso che funzionerà ... per una serie di ragioni ... per esempio, penso che Linux tratti il ​​capslock come un modificatore e non come una chiave separata. Questo sarà probabilmente il motivo per cui non puoi vincolarlo in VLC. Inoltre, se lo si disattiva, viene disattivato. Ma puoi giocare sulla riga di comando e provare a legarlo vlc --key-play-pause <key-string>, ma non ho trovato una stringa che VLC accetta come capslock ...
Robert Riedl,

1
Ho installato dconf-editorprovato un paio di cose, installato xdotoolprovato un paio di cose e infine xbindkeyse provato un paio di cose. Alla fine di questo esercizio infruttuoso il mio pulsante di pausa / riproduzione della tastiera era rotto E il mio pulsante di riproduzione / pausa dello schermo era disattivato e la musica non veniva riprodotta. L'ho fatto nel 16.04, quindi riavviato nel 18.04 per confermare che tutto funziona ancora e sono stati gli hack del software a farlo. L'unica cosa che redime è che suono solo musica tramite telefono Android e non PC. Solo un avvertimento perché gli altri stiano attenti e documentino ciò che fai sulla tua macchina meglio di me.
WinEunuuchs2Unix,

1
@pbhj Grazie per la punta. In qualche modo sono riuscito a far funzionare nuovamente la riproduzione / pausa con il pulsante sullo schermo e il pulsante di pausa / riproduzione della tastiera in Ubuntu 16.04. Volevo solo avvertire le persone di possibili insidie ​​che sperimentavano queste utilità di tastiera di basso livello.
WinEunuuchs2Unix

1
2BFrank: assicurati di accettare una delle risposte se risolve il tuo problema. Poiché c'è una generosità su questa domanda, lasciare una risposta non accettata (e non assegnare manualmente la generosità) assegnerà solo metà della generosità a @Sebastian Stark, poiché la sua risposta è la più votata.
Nonny Moose,

1
@NonnyMoose Grazie per quel commento. Avevo intenzione di lasciarlo per autoaward alla risposta accettata o al punteggio più alto, ma non sapevo che ha dimezzato il premio, quindi lo assegnerò manualmente al punteggio più alto in circa due ore se nessuna risposta è accettata
Chai T. Rex,

Risposte:


11

evtest e dbus

Ecco una versione che coinvolge un piccolo script in esecuzione in background. Sono necessari alcuni semplici passaggi:

  • Installare il evtest del programma: sudo apt install evtest. Questo programma è in grado di decodificare e stampare eventi non elaborati dalla /dev/input/gerarchia dei dispositivi.

  • Aggiungi il tuo account utente al gruppo input. Esci e accedi di nuovo. (Questo è necessario perché leggeremo da qualche dispositivo sotto /dev/input/, che normalmente può essere fatto solo da root o utenti nel gruppo input. Potremmo eseguire lo script come root, ma poi dovremmo trovare un modo per dirlo a quale utente istanza dbus con cui deve parlare.)

  • Disabilita il tasto BLOC MAIUSC come hai fatto tu o usa la corrispondente preferenza Mate. Funzionerebbe anche se si mappa il tasto maiuscolo su ctrl, come fanno molte persone.

  • Conservare il seguente script da qualche parte, ad esempio $HOME/bin/capshacke renderlo eseguibile:

    #!/bin/bash
    
    KEYBOARD=/dev/input/by-path/platform-i8042-serio-0-event-kbd
    EVENT="type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 1"
    
    toggleVLC () {
            dbus-send \
                --type=method_call \
                --dest=org.mpris.MediaPlayer2.vlc \
                /org/mpris/MediaPlayer2 \
                org.mpris.MediaPlayer2.Player.PlayPause
    }
    
    evtest "$KEYBOARD" | \
    while read line
    do
        if [[ "$line" == *"$EVENT" ]]
        then
            toggleVLC
        fi
    done
    

Lo script sopra ascolterà i tuoi eventi della tastiera ed eseguirà un comando quando viene premuto il tasto Capslock. Il comando eseguito utilizza dbus per inviare un evento play / pause a un'istanza VLC in esecuzione. Potrebbe essere necessario modificare la KEYBOARDvariabile per puntare alla tastiera effettiva, ma è probabile che il valore sopra funzionerà.

Se si preferisce che la funzione toggleVLC () venga chiamata quando si rilascia il tasto Capslock, è possibile modificare la EVENTvariabile nello script in modo che termini con value 0invece di value 1.

Inoltre, è possibile che per te il codice tasto del tasto maiuscolo sia diverso da 58. Puoi verificarlo eseguendo evtest, guarda l'output quando premi il tasto maiuscole e regola di conseguenza la variabile EVENT. Non è nemmeno necessario abbinare il codice chiave e impostare EVENT semplicemente su (KEY_CAPSLOCK), value 1.

Invece di usare lo script evtest e sopra puoi usare thd dal pacchetto triggerhappy (qualcosa del genere thd --dump /dev/input/*darebbe un output simile) ma ho scoperto che è un po 'meno educativo.

Ora creiamo un'unità systemd utente per avviare automaticamente lo script in background:

  • Creare la gerarchia di systemd utente: mkdir -p $HOME/.config/systemd/user

  • Aggiungi il seguente testo al file $HOME/.config/systemd/user/capshack.service

    [Unit]
    Description=Abuse capslock key
    
    [Service]
    ExecStart=%h/bin/capshack
    
    [Install]
    WantedBy=default.target
    
  • Abilita l'unità di servizio appena creata: systemctl --user enable capshack

  • Inizia il servizio: systemctl --user start capshack

Da ora in poi dovresti essere in grado di attivare / disattivare la riproduzione / pausa in VLC utilizzando il tasto BLOC MAIUSC. Lo script in background dovrebbe essere avviato automaticamente al momento dell'accesso.

triggerhappy

Come già accennato, puoi anche usare il pacchetto triggerhappy per farlo. Questo è il metodo preferito per le persone che vogliono giocherellare di meno con il sistema e preferiscono una soluzione più solida.

  • Aggiungi l'utente al inputgruppo come sopra

  • Installa il pacchetto: sudo apt install triggerhappy

  • Aggiungi una configurazione per triggerhappy a ~/.config/thd/capslock.conf:

    KEY_CAPSLOCK    1   dbus-send --type=method_call --dest=org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause
    
  • Esegui in questo modo: thd --triggers ~/.config/thd/capslock.conf /dev/input/event*

  • Fai correre il tuo utente in un modo simile a quello già descritto per Capshack.

  • Assicurati di avere solo uno dei metodi menzionati (capshack o thd) in esecuzione, per non alternare il doppio della pressione di ciascun tasto.

Ho provato tutto questo il 18.04 sotto la sessione standard e il compagno 16.04. Ma dovrebbe teoricamente funzionare anche sotto terra o con altri ambienti desktop.


@ WinEunuuchs2Unix grazie per la menzione. Personalmente preferisco lo stile più dettagliato della clausola if / then / else completa: è più esplicito, è più facile da estendere e non tende a fare linee troppo lunghe. Anche se in questo caso non sarebbe davvero molto importante.
Sebastian Stark,

Concordo sulle righe troppo lunghe. Di recente ho adattato lo stile di codifica a due righe con la prima riga [[ test ]] && \ e la seconda riga con rientro di quattro spazi <command>per eseguire il test positivo. Sono pienamente d'accordo sulla leggibilità perché la mia raccomandazione è estranea alla maggior parte dei linguaggi di programmazione.
WinEunuuchs2Unix

è fantastico! Anche se penso che triggerhappydovrebbe essere la strada da percorrere, dato che in evtestrealtà è un programma di debug :)
Robert Riedl,

sì, il più buono per l'apprendimento, il per fare :)
Sebastian Stark,

... Per me comunque, il keycode 58 è m, quindi quello script non funziona. Consiglio di verificare xmodmap -pke | grep Caps_Lockprima di utilizzare questo script per assicurarsi che il codice chiave sia corretto.
Nonny Moose,

9

In Ubuntu 16.04 dopo aver trascorso ore a cercare e giocherellare con Google dconf-editore xbindkeysho trovato una soluzione estremamente semplice:

  • Installazione molto rapida in 2 minuti
  • È necessario installare solo xdotool
  • Nessuno script necessario
  • Il blocco maiuscole è ancora riconosciuto ma non attiva il maiuscolo / minuscolo
  • Funziona con le impostazioni di scelta rapida personalizzate della tastiera Ubuntu standard

Se hai bisogno del XF86AudioPlaysupporto di Gnome di cui hai bisogno xdotool(non necessario per VLC come stipulato da OP):

sudo apt install xdotool

Ora ecco la parte difficile. Ogni volta che si preme il Caps LocKtasto per alternare la musica tra Riproduci e Pausa, anche le lettere maiuscole si attivano e disattivano.

Utilizzare questo metodo per disattivare la funzione Blocco maiuscole mantenendo la chiave attiva:

setxkbmap -option caps:none

Lettori musicali che aderiscono a Gnome

Quindi in Ubuntu 16.04 vai in Impostazioni >> Tastiera >> Scorciatoie >> Scorciatoie personalizzate :

audio pause-play shortcut.png

  • Imposta il nome suAudio Play
  • Impostare il comando suxdotool key XF86AudioPlay
  • Quindi fare clic sul Applypulsante

Dopo aver aggiunto la nuova opzione, il tasto di scelta rapida assegnato visualizzerà Disabilitato . Fare clic su Disabilitato e quando richiesto per assegnare il Caps LocKtasto premere il tasto.


Lettori musicali come VLC

Segui i passaggi per Gnome nella sezione precedente ma per il comando usa invece questo:

qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause

VLC non riconoscerà le chiavi multimediali: come far funzionare le chiavi multimediali della tastiera con VLC a livello globale? anche se incorporato nella tastiera. Pertanto, la scorciatoia da tastiera personalizzata per XF86 è inutile con AudioPlay xdotool.


Impostazione delle scorciatoie da tastiera personalizzate dalla riga di comando

Queste domande e risposte illustrano come impostare scorciatoie da tastiera personalizzate dalla riga di comando: Come impostare scorciatoie da tastiera personalizzate dal terminale?


Disattivando il blocco maiuscole in modo permanente

Il prossimo passo è rendere questo setxkbmap -option caps:nonepersistente attraverso i riavvii. Risultati di Google in questa risposta di Terdon: Salva le impostazioni di setxkbdmap :

Un modo semplice sarebbe aggiungere il comando al tuo $HOME/.profilefile (puoi crearlo se non esiste):

setxkbmap -option caps:none

Questo dovrebbe farlo funzionare ogni volta che accedi.

Si noti che si dovrebbe usare $HOME/.profile, piuttosto che $HOME/.bash_profile, $HOME/.bashrco qualche altro file simile. Questo perché questa impostazione dovrebbe essere letta dal tuo gestore degli accessi.


Semplice, elegante, fa il lavoro: la risposta perfetta per me!
Fabby,

@Fabby Beh, devo ammettere che è facile da configurare e testare e non richiede confusione a basso livello o l'esecuzione costante di script. Ho attraversato quattro diversi tentativi prima di imbattermi in questo metodo. Ancora non lo definirei perfetto ma GRAZIE! . Se mi lasciano di nuovo in Europa, ti comprerò una pinta.
WinEunuuchs2Unix

Funziona con Wayland?
danzel,

@dabzel Temo che Wayland non funzioni setxkbmap -option caps:none. Il programma di utilità è installato, tuttavia Wayland continua a alternare tra lettere maiuscole e minuscole. Potresti pubblicare una domanda separata su come far rispettare Wayland setxkbmap.
WinEunuuchs2Unix

3

Questa risposta è stata testata su Ubuntu MATE 16.04.4 LTS in una VM (ma la tastiera era una tastiera USB sul passthrough, quindi non dovrebbe fare la differenza). Inoltre non richiede software aggiuntivo e può essere eseguito su un'installazione vanilla senza installare alcun pacchetto ed è persistente tra gli stivali.

Rimappa il blocco maiuscole

  1. Modifica il file /usr/share/X11/xkb/symbols/pccome root. Fai attenzione a non fare un errore qui (come dimenticare la virgola) perché potresti non essere più in grado di usare la tastiera se lo fai. (Indovina cosa ho imparato a fatica?;)

  2. Commenta la riga

        key <CAPS> {    [ Caps_Lock     ]   };
    

    posizionando due barre ( //) all'inizio di esso.

  3. Aggiungi sotto la seguente riga:

        key <CAPS> {    [ XF86AudioPlay, XF86AudioPause ]   };
    
  4. Commenta la riga

        modifier_map Lock   { Caps_Lock };
    

    allo stesso modo di cui sopra.

  5. Reboot.

Nota: (merito a danzel per averlo sottolineato) Gli aggiornamenti del pacchetto xkb-datapossono sovrascrivere questo file. Un metodo ragionevolmente sicuro per impedirlo è deviare il percorso usando dpkg-divert. (Dico "ragionevolmente sicuro" perché l'origine a monte di questo file non è stata modificata da tre anni.)

Metodo alternativo

Disabilita manualmente il tasto BLOC MAIUSC nelle impostazioni del layout della tastiera, quindi utilizza l'approccio in questa risposta per aggiungere le tue mappature dei tasti.

I problemi?

Il tasto di blocco maiuscole non blocca più maiuscole, ed è stato rimappato su Play / Pause a questo punto. Ora dovresti essere in grado di riprodurre e mettere in pausa la musica in VLC. Se funziona a questo punto, puoi saltare il resto di queste istruzioni.

Tuttavia, quando l'ho provato, VLC non ha risposto al tasto Play / Pausa.

Assicurarsi che la scorciatoia da tastiera sia impostata correttamente

  1. Apri scorciatoie da tastiera (Sistema → Preferenze → Hardware → Scorciatoie da tastiera)

  2. Assicurati che "Riproduci (o Riproduci / Pausa)" sia impostato su "XF86AudioPlay"

  3. In caso contrario, fare clic sulla sezione "Collegamento" e premere il nuovo tasto Riproduci / Pausa per impostare il collegamento. schermata utile

  4. Se il problema persiste, riavviare un paio di volte per una buona misura. (Questo è ciò che l'ha risolto per me.)


Ciò può interferire con le xkbopzioni, in particolare caps:...quelle. Inoltre, potrebbe essere sovrascritto dagli aggiornamenti di sistema.
danzel,

Anzi, potrebbe. Un buon punto sugli aggiornamenti di sistema, comunque. Aggiungerò una nota al riguardo nella mia risposta. Grazie per il feedback!
Nonny Moose,

Carissimi, wow !! Mi dispiace è stato un po 'afk per un po' :-) e ora sto scoprendo tutto lo sforzo che tutti voi avete messo nella soluzione !! Proverò a rispondere @ WinEunuuchs2Unix e ti terremo aggiornato. Grazie, LLAP !!
2BFrank

@ 2BFrank Per curiosità, hai trovato una risposta che ha funzionato?
Nonny Moose,

1

Installa xbindkeys, xcape e playerctl . Assicurati che xcape(mappando CapsLocksu una chiave di riserva come Alt+F12da xcape -e 'Caps_Lock=Alt_L|F12) e playerctlsiano avviati automaticamente all'accesso, e aggiungi al file ~/.xbindkeysrcle due righe

"playerctl play-pause"
  Alt + F12

0

Trasforma il tuo tasto maiuscole in un tasto di riproduzione / pausa

Questa soluzione rimappa lo scancode della chiave capslock in un codice chiave diverso nel driver di input del kernel, in questo caso play / pause.

vantaggi

  • Non è necessario modificare i file di sistema esistenti (è necessario creare solo un nuovo file)
  • Le applicazioni non sapranno che si tratta in realtà di un tasto capslock ma pensano che sia stato premuto un vero tasto play / pause
  • Non è necessario disabilitare il maiuscolo, nessuna possibilità di confondere la xkbconfigurazione

svantaggi

  • Deve essere fatto per ogni tastiera singolarmente (che, a seconda della situazione, può anche essere un vantaggio)

Prerequisiti

  • evtest (può essere installato tramite sudo apt-get install evtest)

Procedura

In un terminale, esegui sudo evteste seleziona la tastiera. Se non viene visualizzato alcun output quando si preme un tasto, premere Ctrl+ Ce provare un altro dispositivo. Ricorda il numero di evento del dispositivo selezionato, ne avremo bisogno in seguito. Premere il tasto BLOC MAIUSC. Appariranno alcune linee come le seguenti:

Event: time 1529406021.187148, -------------- SYN_REPORT ------------
Event: time 1529406021.218427, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70039
Event: time 1529406021.218427, type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 0

Abbiamo bisogno del valore della MSC_SCANriga che precede la KEY_CAPSLOCKriga. Nell'esempio sopra, questo sarebbe 70039, ma lo scancode sulla tastiera è probabilmente diverso.

Ora esegui il comando seguente, ma sostituisci la X con il numero di evento del dispositivo che hai usato per il evtestcomando:

grep "" /sys/class/input/eventX/device/id/*

... questa uscita volontà bustype, product, vendore versiondella tastiera.

Creare un file denominato 65-keyboard-custom.hwdbin /etc/udev/hwdb.d/(autorizzazioni di root richieste) con il seguente contenuto:

evdev:input:b[bustype]v[vendor]p[product]e[version]*
 KEYBOARD_KEY_[scancode]=playpause

...dove

  • [bus], [fornitore], [prodotto] e [versione] hanno esattamente 4 caratteri e le lettere devono essere maiuscole
  • [scancode] deve essere in minuscolo
  • la evdev:...linea non ha spazio precedente
  • la KEYBOARD_KEY...linea ha esattamente uno spazio precedente

Per esempio:

evdev:input:b0003v046DpC228e0110*
 KEYBOARD_KEY_70039=playpause

Infine, compila la nuova configurazione nel database hardware:

sudo systemd-hwdb update

Se si desidera applicare immediatamente le modifiche, informare udev:

sudo udevadm trigger

Se si desidera ripristinare le modifiche, è sufficiente rimuovere il file creato e riavviare.

Puoi trovare informazioni più dettagliate nella mia risposta originale su questo argomento.


@Nonny Moose ecco perché ho scritto "Deve essere fatto per ogni tastiera singolarmente". Inoltre, puoi specificare tutte le tastiere che desideri, quindi devi farlo solo per ogni nuova tastiera che acquisti. D'altra parte, puoi omettere una tastiera, se lo desideri, ad esempio perché ha già un tasto di riproduzione / pausa fisico.
danzel,

... Beh, non stavo prestando attenzione. Sono corretto.
Nonny Moose,

0

Forse usando xbindkeyso XTEpotresti farlo. Ma prima assicurati di quali siano i Keycodes, puoi vedere il codice per il tasto Capslock usando il comando xevnel terminale e premendolo (puoi vedere il codice chiave di qualsiasi pulsante keu o mouse, inclusi i mouse di gioco). Con il keycode dei pulsanti capslock e play in mano puoi modificare il file confi di xbindkeys e inserire le tue modifiche. usare touch ~/.xbindkeysrcper creare il file di configurazione (se il sistema non lo crea automaticamente) e nano ~/.xbindkeysrcper modificarlo. L'ho usato il mese scorso e qui è un esempio. dai un'occhiata a questi link che potrebbero esserti molto utili.

https://help.ubuntu.com/community/MultimediaKeys

https://gist.github.com/jbonney/5743509

Rimappa un pulsante dal mio mouse da gioco a un tasto della tastiera

https://matmunn.me/post/binding-volume-control-mouse-buttons-ubuntu/

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.