Kann ich die Feststelltaste neu zuordnen, um Audio abzuspielen?

16

Ich versuche, die unbrauchbare Feststelltaste für etwas Nützliches am 16.04 MATE wiederzuverwenden. Ich bin gestoßen

setxkbmap -option ctrl:nocaps

um es zu deaktivieren, aber könnte es neu zugeordnet werden, um zum Beispiel VLC abzuspielen / anzuhalten? Danke für deine Antworten!

2BFrank
quelle
Ich glaube nicht, dass das funktionieren wird ... aus einer Reihe von Gründen ... zum Beispiel denke ich, dass Linux Capslock als Modifikator und nicht als separaten Schlüssel behandelt. Das wird wahrscheinlich der Grund sein, warum Sie es nicht in VLC binden können. Wenn Sie es deaktivieren, ist es auch deaktiviert. Aber Sie können auf der Kommandozeile herumspielen und versuchen, sie zu binden vlc --key-play-pause <key-string>, aber ich habe keinen String gefunden, den VLC als Capslock akzeptiert ...
Robert Riedl
1
Ich dconf-editorhabe ein paar Dinge xdotoolausprobiert, ein paar Dinge xbindkeysausprobiert und schließlich ein paar Dinge ausprobiert. Am Ende dieser erfolglosen Übung war meine Tastatur-Pause- / Wiedergabetaste defekt UND meine eigene Bildschirm-Wiedergabe- / Pausetaste ausgegraut, und Musik wurde nicht abgespielt. Ich habe dies in 16.04 getan, also habe ich es in 18.04 neu gestartet, um zu bestätigen, dass alles noch funktioniert und es waren die Software-Hacks, die es getan haben. Die einzige Rettung ist, dass ich nur Musik über das Android-Handy und nicht über den PC wiedergebe. Nur ein Köpfchen, damit andere aufpassen und besser als ich dokumentieren, was Sie mit Ihrer Maschine anstellen.
WinEunuuchs2Unix
1
@pbhj Danke für den Tipp. Ich habe es irgendwie geschafft, Play / Pause mit der On-Screen-Taste und der Tastatur-Pause / Play-Taste in Ubuntu 16.04 wieder zum Laufen zu bringen. Ich wollte die Leute nur vor möglichen Fallstricken warnen, die beim Experimentieren mit diesen einfachen Tastatur-Dienstprogrammen auftreten können.
WinEunuuchs2Unix
1
2BFrank: Stellen Sie sicher, dass Sie eine der Antworten akzeptieren, wenn dies Ihr Problem löst. Da es bei dieser Frage ein Kopfgeld gibt, wird @Sebastian Stark nur die Hälfte des Kopfgeldes gutgeschrieben, wenn eine Antwort nicht akzeptiert (und nicht manuell vergeben) wird, da seine Antwort die höchste Bewertung ist.
Nonny Moose
1
@NonnyMoose Danke für diesen Kommentar. Ich wollte es einfach so belassen, dass es automatisch zur akzeptierten Antwort oder zur höchsten Stimmenzahl weitergeleitet wurde, aber ich wusste nicht, dass es die Auszeichnung halbierte, also werde ich es in ungefähr zwei Stunden manuell zur höchsten Stimmenzahl weiterleiten, wenn Es wird keine Antwort akzeptiert.
Chai T. Rex

Antworten:

11

evtest und dbus

Hier ist eine Version mit einem kleinen Skript, das im Hintergrund ausgeführt wird. Ein paar einfache Schritte sind nötig:

  • Installieren Sie das evtest Programm: sudo apt install evtest. Dieses Programm ist in der Lage, unformatierte Ereignisse aus der /dev/input/Gerätehierarchie zu dekodieren und auszudrucken .

  • Fügen Sie der Gruppe Ihr Benutzerkonto hinzu input. Abmelden und erneut anmelden. (Dies ist erforderlich, weil wir von einem Gerät unter lesen werden /dev/input/, was normalerweise nur von root oder Benutzern in einer Gruppe durchgeführt werden kann input. Wir könnten das Skript als root ausführen, müssten dann aber einen Weg finden, um ihm zu sagen, welcher Benutzer es ist dbus-Instanz, mit der gesprochen werden muss.)

  • Deaktivieren Sie die Feststelltaste wie zuvor oder verwenden Sie die entsprechende Mate-Einstellung. Es würde auch funktionieren, wenn Sie die Feststelltaste wie bei vielen anderen Benutzern der Strg-Taste zuordnen.

  • Speichern Sie das folgende Skript irgendwo ab, $HOME/bin/capshackund machen Sie es ausführbar:

    #!/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
    

Das obige Skript hört Ihre Tastaturereignisse ab und führt einen Befehl aus, wenn die Feststelltaste gedrückt wird. Der ausgeführte Befehl verwendet dbus, um ein Wiedergabe- / Pausenereignis an eine ausgeführte VLC-Instanz zu senden. Möglicherweise müssen Sie die KEYBOARDVariable anpassen , um auf Ihre tatsächliche Tastatur zu verweisen, aber es ist wahrscheinlich, dass der obige Wert funktioniert.

Wenn Sie möchten, dass die Funktion toggleVLC () beim Loslassen der Feststelltaste aufgerufen wird, können Sie die EVENTVariable im Skript so ändern, dass sie mit value 0statt mit endet value 1.

Es ist auch möglich, dass sich der Schlüsselcode des Feststelltastens von 58 unterscheidet. Sie können dies überprüfen evtest, indem Sie ausführen, die Ausgabe anzeigen, wenn Sie die Feststelltaste drücken, und die Variable EVENT entsprechend anpassen. Sie müssen nicht einmal nach dem Schlüsselcode suchen und EVENT einfach auf einstellen (KEY_CAPSLOCK), value 1.

Anstatt evtest und ein höheres Skript zu verwenden, könnten Sie thd aus dem triggerhappy-Paket verwenden (so etwas thd --dump /dev/input/*würde eine ähnliche Ausgabe ergeben), aber ich fand, dass dies etwas weniger lehrreich ist.

Jetzt erstellen wir eine systemd-Benutzereinheit, um das Skript automatisch im Hintergrund zu starten:

  • Erstellen Sie die Benutzer-System-Hierarchie: mkdir -p $HOME/.config/systemd/user

  • Fügen Sie der Datei den folgenden Text hinzu $HOME/.config/systemd/user/capshack.service

    [Unit]
    Description=Abuse capslock key
    
    [Service]
    ExecStart=%h/bin/capshack
    
    [Install]
    WantedBy=default.target
    
  • Aktivieren Sie die soeben erstellte Serviceeinheit: systemctl --user enable capshack

  • Starten Sie den Dienst: systemctl --user start capshack

Ab jetzt sollten Sie in der Lage sein, die Wiedergabe / Pause in VLC mit der Feststelltaste umzuschalten. Das Hintergrundskript sollte automatisch gestartet werden, wenn Sie sich anmelden.

schießwütig

Wie bereits erwähnt, können Sie dazu auch das triggerhappy-Paket verwenden. Dies ist die bevorzugte Methode für Personen, die sich weniger mit dem System beschäftigen möchten und eine solideere Lösung bevorzugen.

  • Fügen Sie der inputGruppe wie oben einen Benutzer hinzu

  • Installieren Sie das Paket: sudo apt install triggerhappy

  • Fügen Sie eine Konfiguration für triggerhappy hinzu, um ~/.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
    
  • Führen Sie das so aus: thd --triggers ~/.config/thd/capslock.conf /dev/input/event*

  • Führen Sie das Programm für Ihren Benutzer auf ähnliche Weise aus, wie es bereits für capshack beschrieben wurde.

  • Stellen Sie sicher, dass nur eine der genannten Methoden (capshack oder thd) ausgeführt wird, um das Umschalten bei jedem Tastendruck nicht zu verdoppeln.

Ich habe das alles am 18.04. Unter der Standard Session und am 16.04. Mate getestet. Theoretisch sollte es aber auch unter Wayland oder mit anderen Desktop-Umgebungen funktionieren.

Sebastian Stark
quelle
@ WinEunuuchs2Unix danke fürs erwähnen. Ich persönlich bevorzuge den ausführlicheren Stil der vollständigen if / then / else-Klausel: Sie ist expliziter, lässt sich leichter erweitern und tendiert nicht dazu, Zeilen zu lang zu machen. Obwohl es in diesem Fall wirklich nicht viel ausmacht.
Sebastian Stark
Ich stimme zu langen Zeilen zu. Kürzlich habe ich den Codierungsstil an zwei Zeilen angepasst, wobei die erste Zeile [[ test ]] && \ und die zweite Zeile vier Leerzeichen eingerückt haben <command>, um bei positivem Test zu laufen. Ich stimme der Lesbarkeit von ganzem Herzen zu, da meine Empfehlung den meisten Programmiersprachen fremd ist.
WinEunuuchs2Unix
das ist toll ! Obwohl ich denke, es triggerhappysollte der richtige Weg sein, da evtestes sich tatsächlich um ein Debugging-Programm handelt :)
Robert Riedl
Ja, evtest zum Lernen, das zu tun :)
Sebastian Stark
... Für mich ist der Schlüsselcode 58 m, so dass das Skript nicht funktioniert. Ich empfehle, xmodmap -pke | grep Caps_Lockvor Verwendung dieses Skripts zu überprüfen , ob der Schlüsselcode korrekt ist.
Nonny Moose
9

In Ubuntu 16.04 nach Stunden googeln & Hantieren mit Ausgaben dconf-editorund xbindkeysfand ich eine sehr einfache Lösung:

  • Sehr schnelles Setup in 2 Minuten
  • Es muss nur xdotool installiert werden
  • Keine Skripte erforderlich
  • Die Feststelltaste wird weiterhin erkannt, die Groß- und Kleinschreibung wird jedoch nicht umgeschaltet
  • Funktioniert mit den Standardeinstellungen für benutzerdefinierte Ubuntu-Tastaturkürzel

Wenn Sie Gnome- XF86AudioPlayUnterstützung benötigen, benötigen Sie xdotool(nicht für VLC erforderlich, da OP dies vorsieht):

sudo apt install xdotool

Hier ist der schwierige Teil. Jedes Mal, wenn Sie die Caps LocKTaste drücken, um die Musik zwischen Wiedergabe und Pause umzuschalten, werden auch Großbuchstaben ein- und ausgeschaltet.

Verwenden Sie diese Methode, um das Umschalten der Feststelltaste zu deaktivieren, während die Taste weiterhin aktiv bleibt:

setxkbmap -option caps:none

Musik-Player, die an Gnome festhalten

Gehen Sie dann in Ubuntu 16.04 zu Einstellungen >> Tastatur >> Verknüpfungen >> Benutzerdefinierte Verknüpfungen :

Audio Pause-Wiedergabe shortcut.png

  • Setzen Sie den Namen aufAudio Play
  • Setzen Sie den Befehl aufxdotool key XF86AudioPlay
  • Klicken Sie dann auf die ApplySchaltfläche

Nach dem Hinzufügen der neuen Option lautet die zugewiesene Tastenkombination Deaktiviert . Klicken Sie auf Deaktiviert und drücken Sie die Caps LocKTaste, wenn Sie aufgefordert werden, die Taste zuzuweisen .


Musikspieler wie VLC

Befolgen Sie die Schritte für Gnome im vorherigen Abschnitt, aber verwenden Sie stattdessen diesen Befehl :

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

VLC erkennt Medientasten nicht: Wie werden die Tastaturmedientasten so eingerichtet, dass sie global mit VLC funktionieren? auch wenn in die Tastatur eingebaut. Daher ist die benutzerdefinierte Tastenkombination für XF86AudioPlay mit unbrauchbar xdotool.


Festlegen benutzerdefinierter Tastaturkürzel über die Befehlszeile

In dieser Frage und Antwort wird erläutert, wie benutzerdefinierte Tastaturkürzel über die Befehlszeile festgelegt werden: Wie werden benutzerdefinierte Tastaturkürzel über das Terminal festgelegt?


Feststelltaste dauerhaft deaktivieren

Der nächste Schritt besteht darin, dies setxkbmap -option caps:noneüber Neustarts hinweg persistent zu machen . Googeln führt zu dieser Antwort von Terdon: Speichere setxkbdmap-Einstellungen :

Eine einfache Möglichkeit wäre, den Befehl zu Ihrer $HOME/.profileDatei hinzuzufügen (Sie können ihn erstellen, wenn er nicht vorhanden ist):

setxkbmap -option caps:none

Damit sollte es jedes Mal ausgeführt werden, wenn Sie sich anmelden.

Beachten Sie, dass Sie verwenden sollten , $HOME/.profileanstatt $HOME/.bash_profile, $HOME/.bashrcoder einige andere ähnliche Datei. Dies liegt daran, dass diese Einstellung von Ihrem Anmeldemanager gelesen werden sollte.

WinEunuuchs2Unix
quelle
Einfach, elegant, macht den Job: Die perfekte Antwort auf mich!
Fabby
@ Fabby Nun, ich muss zugeben, es ist einfach einzurichten und zu testen und erfordert kein einfaches Mucken oder ständiges Ausführen von Skripten. Ich habe vier verschiedene Versuche durchlaufen, bevor ich auf diese Methode gestoßen bin. Trotzdem würde ich es nicht als perfekt bezeichnen, aber DANKE! . Wenn sie mich wieder nach Europa zurücklassen, kaufe ich dir ein Pint.
WinEunuuchs2Unix
Funktioniert das mit Wayland?
Tanzel
@ Dabzel Ich fürchte, Wayland arbeitet nicht mit setxkbmap -option caps:none. Das Hilfsprogramm ist installiert, Wayland wechselt jedoch immer zwischen Groß- und Kleinschreibung. Sie könnten eine separate Frage dazu stellen, wie Wayland dazu gebracht werden kann, Respekt zu zeigen setxkbmap.
WinEunuuchs2Unix
3

Diese Antwort wurde unter Ubuntu MATE 16.04.4 LTS in einer VM getestet (aber die Tastatur war eine USB-Tastatur beim Passthrough, sodass dies keinen Unterschied machen sollte). Es erfordert auch keine zusätzliche Software und kann bei einer Vanilla-Installation ohne Installation von Paketen ausgeführt werden, und es bleibt zwischen den Startvorgängen bestehen.

Feststelltaste neu zuordnen

  1. Bearbeiten Sie die Datei /usr/share/X11/xkb/symbols/pcals root. Achten Sie darauf, dass Sie hier keinen Fehler machen (z. B. das Komma vergessen), da Sie sonst möglicherweise Ihre Tastatur nicht mehr verwenden können. (Ratet mal, was ich auf die harte Tour gelernt habe?)

  2. Kommentiere die Zeile aus

        key <CAPS> {    [ Caps_Lock     ]   };
    

    durch Platzieren von zwei Schrägstrichen ( //) am Anfang.

  3. Fügen Sie darunter die folgende Zeile hinzu:

        key <CAPS> {    [ XF86AudioPlay, XF86AudioPause ]   };
    
  4. Kommentiere die Zeile aus

        modifier_map Lock   { Caps_Lock };
    

    auf die gleiche Weise wie oben.

  5. Starten Sie neu.

Hinweis: (Gutschrift auf Danzel für diesen Hinweis) Updates für das Paket xkb-datakann diese Datei überschrieben werden soll. Eine einigermaßen sichere Methode, um dies zu verhindern, ist das Umleiten des Pfades mit dpkg-divert. (Ich sage "ziemlich sicher", weil die Upstream-Quelle für diese Datei seit drei Jahren nicht mehr geändert wurde.)

Alternative Methode

Deaktivieren Sie manuell die Feststelltaste in den Tastaturlayouteinstellungen und fügen Sie dann mithilfe der in dieser Antwort beschriebenen Methode Ihre eigenen Tastenzuordnungen hinzu.

Probleme?

Ihre Feststelltaste sperrt keine Feststelltasten mehr und wurde zu diesem Zeitpunkt auf Wiedergabe / Pause umgestellt. Sie sollten jetzt in der Lage sein, Musik in VLC abzuspielen und anzuhalten. Wenn es zu diesem Zeitpunkt funktioniert, können Sie den Rest dieser Anweisungen überspringen.

Als ich es versuchte, reagierte VLC jedoch nicht auf die Wiedergabe / Pause-Taste.

Stellen Sie sicher, dass die Tastenkombination richtig eingestellt ist

  1. Öffnen Sie die Tastaturkürzel (System → Einstellungen → Hardware → Tastaturkürzel).

  2. Stellen Sie sicher, dass "Play (oder Play / Pause)" auf "XF86AudioPlay" eingestellt ist

  3. Ist dies nicht der Fall, klicken Sie auf den Bereich "Verknüpfung" und drücken Sie die neue Wiedergabe- / Pause-Taste, um die Verknüpfung festzulegen. hilfreicher Screenshot

  4. Wenn es immer noch nicht funktioniert, starten Sie es ein paar Mal neu. (Genau das hat es für mich behoben.)

Nonny Moose
quelle
Dies kann xkbinsbesondere Optionen beeinträchtigen caps:.... Es kann auch durch Systemaktualisierungen überschrieben werden.
Tanzel
In der Tat könnte es. Ein guter Punkt für Systemupdates. Ich werde dies in meiner Antwort vermerken. Danke für die Rückmeldung!
Nonny Moose
Hallo zusammen, wow !! Sorry war afk für eine Weile :-) und entdecke jetzt all die Mühen, die ihr alle in die Lösung gesteckt habt !! Werde versuchen @ WinEunuuchs2Unix zu beantworten und euch auf dem Laufenden halten. Danke, LLAP !!
2BFrank
@ 2BFrank Hast du aus Neugier eine Antwort gefunden, die funktioniert hat?
Nonny Moose
1

Installiere xbindkeys, xcape und playerctl . Stellen Sie sicher, dass xcape(Zuordnung CapsLockzu einem Ersatzschlüssel wie Alt+F12von xcape -e 'Caps_Lock=Alt_L|F12) und playerctlbeim Anmelden automatisch gestartet werden, und fügen Sie ~/.xbindkeysrcdie beiden Zeilen zur Datei hinzu

"playerctl play-pause"
  Alt + F12
Enno
quelle
0

Machen Sie aus Ihrer Feststelltaste eine Wiedergabe- / Pause-Taste

Diese Lösung ordnet den Scancode Ihres Capslock-Schlüssels einem anderen Schlüsselcode im Kernel-Eingabetreiber zu, in diesem Fall Wiedergabe / Pause.

Vorteile

  • Keine Notwendigkeit, vorhandene Systemdateien zu ändern (nur eine neue Datei muss erstellt werden)
  • Anwendungen wissen nicht, dass es sich tatsächlich um eine Feststelltaste handelt, denken jedoch, dass eine echte Wiedergabe- / Pause-Taste gedrückt wurde
  • Keine Notwendigkeit, die Feststelltaste zu deaktivieren, keine Möglichkeit, die xkbKonfiguration durcheinander zu bringen

Nachteile

  • Muss für jede Tastatur einzeln durchgeführt werden (was je nach Situation auch von Vorteil sein kann)

Voraussetzungen

  • evtest (kann via installiert werden sudo apt-get install evtest)

Verfahren

Führen sudo evtestSie in einem Terminal Ihre Tastatur aus und wählen Sie sie aus. Wenn beim Drücken einer Taste keine Ausgabe erfolgt, drücken Sie Ctrl+ Cund versuchen Sie es mit einem anderen Gerät. Merken Sie sich die von Ihnen gewählte Geräteereignisnummer, die wir anschließend benötigen. Drücken Sie die Feststelltaste. Einige Zeilen wie die folgenden werden angezeigt:

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

Wir benötigen den Wert aus der MSC_SCANZeile vor der KEY_CAPSLOCKZeile. Im obigen Beispiel wäre dies 70039, aber der Scancode auf Ihrer Tastatur ist wahrscheinlich anders.

Führen Sie nun den folgenden Befehl aus, ersetzen Sie jedoch das X durch die Geräteereignisnummer, die Sie für den evtestBefehl verwendet haben:

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

... dies wird ausgegeben bustype, product, vendorund versiondie Tastatur.

Erstellen Sie eine Datei mit dem Namen 65-keyboard-custom.hwdbin /etc/udev/hwdb.d/(Root-Berechtigungen erforderlich) mit dem folgenden Inhalt:

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

...wo

  • [bus], [vendor], [product] und [version] haben genau 4 Zeichen und Buchstaben müssen in Großbuchstaben geschrieben werden
  • [scancode] muss klein geschrieben sein
  • Die evdev:...Zeile hat kein vorangestelltes Leerzeichen
  • Die KEYBOARD_KEY...Zeile enthält genau ein vorangestelltes Leerzeichen

Beispielsweise:

evdev:input:b0003v046DpC228e0110*
 KEYBOARD_KEY_70039=playpause

Kompilieren Sie abschließend die neue Konfiguration in die Hardware-Datenbank:

sudo systemd-hwdb update

Wenn Sie die Änderungen sofort übernehmen möchten, informieren Sie udev:

sudo udevadm trigger

Wenn Sie die Änderungen rückgängig machen möchten, entfernen Sie einfach die erstellte Datei und starten Sie den Computer neu.

Weitere Informationen finden Sie in meiner ursprünglichen Antwort zu diesem Thema.

Tanzel
quelle
@Nonny Moose deshalb habe ich geschrieben "Muss für jede Tastatur einzeln gemacht werden". Außerdem können Sie so viele Tastaturen angeben, wie Sie möchten, sodass Sie dies wirklich nur für jede neue Tastatur tun müssen, die Sie kaufen. Andererseits können Sie eine Tastatur weglassen, wenn Sie möchten, z. B. weil sie bereits eine physische Wiedergabe- / Pause-Taste hat.
Tanzel
... Nun, ich habe nicht aufgepasst. Ich stehe korrigiert.
Nonny Moose
0

Vielleicht mit xbindkeysoder XTEdu könntest das tun. Aber stellen Sie zunächst sicher, dass Sie die Schlüsselcodes kennen. Sie können den Code für die Feststelltaste mit dem Befehl xevim Terminal anzeigen und drücken (Sie können den Schlüsselcode aller Keu- oder Maustasten, einschließlich Gaming-Mäuse, anzeigen). Mit dem Schlüsselcode der Feststelltasten und Wiedergabetasten in der Hand können Sie die Confi-Datei von xbindkeys bearbeiten und Ihre Änderungen dort ablegen. Verwenden Sie touch ~/.xbindkeysrcdiese Option, um die Konfigurationsdatei zu erstellen (falls das System sie nicht automatisch erstellt) und nano ~/.xbindkeysrczu bearbeiten. Ich habe es letzten Monat benutzt und hier ist es ein Beispiel. Schauen Sie sich diese Links an, die für Sie sehr hilfreich sein könnten.

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

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

Ordnen Sie eine Schaltfläche von meiner Gaming-Maus einer Tastaturtaste zu

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

Edmilson Gonçalves
quelle