Caps Lockキーを再マップしてオーディオを再生できますか?


16

16.04 MATEで有用な何かのために、役に立たないCaps Lockキーを再利用しようとしています。私は出会った

setxkbmap -option ctrl:nocaps

それを無効にしますが、たとえばVLCを再生/一時停止するために再マップできますか?ご回答ありがとうございます!


私はこれがうまくいくとは思わない....いくつかの理由で...例えば、Linuxはcapslockを個別のキーではなく修飾子として扱うと思う。それがおそらくVLCでバインドできない理由です。また、非アクティブにすると、非アクティブになります。しかし、あなたはコマンドラインで遊んでとそれをバインドしようとすることができますvlc --key-play-pause <key-string>が、私は... VLCがCapsLockキーとして受け入れるという文字列を発見していない
ロバート・Riedlの

1
インストールdconf-editorしたxdotoolものをいくつか試し、インストールしたものをxbindkeysいくつか試し、最後にいくつか試しました。この実りのないエクササイズの終わりに、キーボードの一時停止/再生ボタンが壊れ、自分の画面の再生/一時停止ボタンがグレー表示になり、音楽が再生されなくなりました。私はこれを16.04に行ったので、18.04にリブートして、すべてがまだ機能していることを確認し、ソフトウェアハックがそれを行ったことを確認しました。唯一の恵みは、PCではなくAndroidスマートフォンでのみ音楽を再生できることです。他の人が注意を払って、あなたが私よりもあなたのマシンに何をするかを文書化するようにしてください。
WinEunuuchs2Unix

1
@pbhjヒントをありがとう。Ubuntu 16.04では、画面上のボタンとキーボードの一時停止/再生ボタンを使用して、どうにかして再生/一時停止を再び機能させることができました。これらの低レベルキーボードユーティリティで実験する落とし穴の可能性について人々に警告したかっただけです。
WinEunuuchs2Unix

1
2BFrank:問題を解決する場合は、必ず回答の1つを受け入れてください。この質問には賞金があるので、回答を受け入れないままにしておくと(賞金は手動で授与されません)、@ Sebastian Starkには賞金の半分しか授与されません。
ノニームース

1
@NonnyMooseそのコメントをありがとう。受け入れられた回答または最高得票数に自動授与するだけにしておきましたが、それが授与数を半分にしたことを知りませんでした。回答は受け入れられません。
チャイT.レックス

回答:


11

evtestおよびdbus

これは、バックグラウンドで実行される小さなスクリプトを含むバージョンです。いくつかの簡単な手順を実行する必要があります。

  • evtestプログラムをインストールしますsudo apt install evtest。このプログラムは/dev/input/、デバイスの階層から生のイベントをデコードおよび印刷できます。

  • ユーザーアカウントをグループに追加しますinput。ログアウトして再度ログインします。(これは/dev/input/、下のデバイスから読み取るために必要です。これは通常、rootまたはグループ内のユーザーのみinputが実行できます。スクリプトをrootとして実行できますが、どのユーザーにそれを伝えるかを見つける必要があります。対話する必要があるdbusインスタンス)

  • あなたがやったようにcapslockキーを無効にするか、対応する合致設定を使用します。多くの人がそうするように、capslockキーをctrlにマップする場合にも機能します。

  • たとえば、次のスクリプトをどこかに保存$HOME/bin/capshackして、実行可能にします。

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

上記のスクリプトは、キーボードイベントをリッスンし、capslockキーが押されるとコマンドを実行します。実行されるコマンドは、dbusを使用して、実行中のVLCインスタンスに再生/一時停止イベントを送信します。KEYBOARD実際のキーボードを指すように変数を調整する必要があるかもしれませんが、上記の値が機能する可能性が高いです。

capslockキーを放したときにtoggleVLC()関数が呼び出されるようにするEVENT場合は、スクリプトの変数を変更して、のvalue 0代わりにで終わるようにすることができvalue 1ます。

また、capslockキーのキーコードが58と異なる可能性があります。これを確認evtestするには、capslockを押したときに出力を確認し、それに応じてEVENT変数を調整します。キーコードで照合し、EVENTを単にに設定する必要さえありません(KEY_CAPSLOCK), value 1

evtestおよび上記のスクリプトを使用する代わりに、triggerhappyパッケージの thdを使用できます。thd --dump /dev/input/*同様の出力を提供するようなもの)を、少し教育的ではないことがわかりました。

次に、ユーザーsystemdユニットを作成して、スクリプトをバックグラウンドで自動的に開始します。

  • ユーザーsystemd階層を作成します。 mkdir -p $HOME/.config/systemd/user

  • 次のテキストをファイルに追加します $HOME/.config/systemd/user/capshack.service

    [Unit]
    Description=Abuse capslock key
    
    [Service]
    ExecStart=%h/bin/capshack
    
    [Install]
    WantedBy=default.target
    
  • 作成したサービスユニットを有効にします。 systemctl --user enable capshack

  • サービスを開始します。 systemctl --user start capshack

これからは、capslockキーを使用してVLCで再生/一時停止を切り替えることができるはずです。ログインすると、バックグラウンドスクリプトが自動的に開始されます。

引き金

既に述べたように、triggerhappyパッケージを使用してこれを行うこともできます。これは、システムをいじるのではなく、より強固なソリューションを好む人に適した方法です。

  • input上記のようにグループにユーザーを追加します

  • パッケージをインストールします。 sudo apt install triggerhappy

  • triggerhappyの設定を追加します~/.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
    
  • 次のようにthdを実行します。 thd --triggers ~/.config/thd/capslock.conf /dev/input/event*

  • すでにcapshackについて説明したのと同様の方法で、ユーザーに対してthdを実行します。

  • 上記のメソッド(capshackまたはthd)のいずれか1つのみが実行されていることを確認してください。

私はこれをすべて標準セッションの18.04と16.04のチームメイトでテストしました。しかし、理論的には、ウェイランドまたは他のデスクトップ環境でも機能するはずです。


@ WinEunuuchs2Unix言及してくれてありがとう。私は個人的には、より冗長なスタイルの完全なif / then / else節を好みます。より明示的で、拡張しやすく、行を長くしすぎない傾向があります。この場合、実際にはそれほど重要ではありませんが。
セバスチャン・スターク

行が長すぎることに同意します。最近、1行目[[ test ]] && \ と2行目で4行のインデントで2行にコーディングスタイルを適合させ、<command>テストを実行しました。私の推奨事項はほとんどのプログラミング言語とは異なるため、読みやすさについて心から同意します。
WinEunuuchs2Unix

これは素晴らしい !私はそれtriggerhappyが進むべき道であると思われるけれども、evtest実際にはデバッグプログラムだからです:)
ロバート・リードル

はい、学習のために、テストのためにevtest :)
セバスチャンスターク

...とにかく、キーコード58はmですので、スクリプトは機能しません。xmodmap -pke | grep Caps_Lockこのスクリプトを使用する前に、キーコードが正しいことを確認することをお勧めします。
ノニームース

9

Ubuntuの16.04で過ごす時間後にグーグル&いじるdconf-editorxbindkeys私は非常に簡単な解決策が見つかりました:

  • 2分で非常に迅速なセットアップ
  • xdotoolのみをインストールする必要があります
  • スクリプトは不要
  • Caps Lockは引き続き認識されますが、大文字と小文字を切り替えません
  • 標準のUbuntuキーボードのカスタムショートカット設定で動作します

必要なGnome XF86AudioPlayサポートが必要な場合xdotool(OPが規定するVLCには不要):

sudo apt install xdotool

ここからが難しい部分です。押すたびにCaps LocKキーを音楽の再生と一時停止を切り替える、大文字もオンとオフを切り替えます。

このメソッドを使用して、キーをアクティブにしたままCaps Lockの切り替えをオフにします。

setxkbmap -option caps:none

Gnomeに準拠した音楽プレーヤー

次に、Ubuntu 16.04で、[設定] >> [キーボード] >> [ショートカット] >> [カスタムショートカット]に移動します。

音声ポーズ再生shortcut.png

  • 名前を設定しますAudio Play
  • 設定するコマンドxdotool key XF86AudioPlay
  • 次に、Applyボタンをクリックします

新しいオプションを追加すると、割り当てられたショートカットキーはDisabledになります。[ 無効]をクリックし、割り当てるキーの入力を求められたら、Caps LocKキーを押します。


VLCのような音楽プレーヤー

前のセクションのGnomeの手順に従いますが、コマンドの代わりにこれを使用します。

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

VLCはメディアキーを認識しません:キーボードメディアキーをVLCでグローバルに動作させる方法は?キーボードに組み込まれている場合でも。そのため、XF86AudioPlayへのカスタムキーボードショートカットはで使用できませんxdotool


コマンドラインからカスタムキーボードショートカットを設定する

このQ&Aでは、コマンドラインからカスタムキーボードショートカットを設定する方法について説明します。ターミナルからカスタムキーボードショートカットを設定する方法は?


Caps Lockを永続的に無効にする

次のステップは、これsetxkbmap -option caps:noneを再起動後も持続させることです。グーグルの結果は次のとおりです。Terdon:setxkbdmap設定を保存します

簡単な方法は、コマンドを$HOME/.profileファイルに追加することです(存在しない場合は作成できます)。

setxkbmap -option caps:none

これにより、ログインするたびに実行されるはずです。

、または他の類似のファイル$HOME/.profileではなく、使用する必要があることに注意してください。これは、この設定をログインマネージャーが読み取る必要があるためです。$HOME/.bash_profile$HOME/.bashrc


シンプルでエレガントな仕事をしてくれます
ファビー

@Fabbyまあ、セットアップとテストが簡単であり、低レベルのいじりやスクリプトの継続的な実行を必要としないことを認めなければなりません。この方法につまずく前に、私は4つの異なる試みを経験しました。それでも完璧とは言いませんが、ありがとう!。彼らが再び私をヨーロッパに戻してくれたら、私はあなたにパイントを買う。
WinEunuuchs2Unix

Waylandで動作しますか?
ダンゼル

@dabzel Waylandが動作しないのではないかと心配していsetxkbmap -option caps:noneます。ユーティリティプログラムはインストールされますが、Waylandは大文字と小文字を切り替え続けます。Waylandを尊重する方法については、別の質問を投稿できsetxkbmapます。
WinEunuuchs2Unix

3

この回答は、VMのUbuntu MATE 16.04.4 LTSでテストされています(ただし、キーボードはパススルーのUSBキーボードであるため、違いはありません)。また、追加のソフトウェアを必要とせず、パッケージをインストールせずにバニラインストールで実行でき、ブート間で持続します。

Caps Lockの再マップ

  1. /usr/share/X11/xkb/symbols/pcルートとしてファイルを編集します。ここで間違いを犯さないように注意してください(コンマを忘れるなど)。そうすると、キーボードを使用できなくなる可能性があります。(私が苦労して学んだことを推測してください?)

  2. 行をコメントアウトします

        key <CAPS> {    [ Caps_Lock     ]   };
    

    //先頭に2つのスラッシュ()を配置します。

  3. その下に次の行を追加します。

        key <CAPS> {    [ XF86AudioPlay, XF86AudioPause ]   };
    
  4. 行をコメントアウトします

        modifier_map Lock   { Caps_Lock };
    

    上記と同じ方法で。

  5. リブート。

注:(これを指摘したのはdanzelの功績です)パッケージを更新すると、xkb-dataこのファイルが上書きされる可能性があります。これを防ぐための合理的に安全な方法はを使用して経路をそらすことdpkg-divertです。(このファイルのアップストリームソースが3年間変更されていないため、「かなり安全」と言います。)

代替方法

キーボードレイアウト設定でCaps Lockキーを手動で無効にし、この回答のアプローチを使用して独自のキーの再マッピングを追加します。

問題?

キャップロックキーはキャップをロックしなくなり、この時点で再生/一時停止に再マップされました。これで、VLCで音楽を再生および一時停止できるようになります。この時点で機能する場合は、これらの指示の残りをスキップできます。

ただし、試してみたところ、VLCが再生/一時停止キーに応答しませんでした。

キーボードショートカットが適切に設定されていることを確認します

  1. キーボードショートカットを開きます(システム→環境設定→ハードウェア→キーボードショートカット)

  2. 「再生(または再生/一時停止)」が「XF86AudioPlay」に設定されていることを確認します

  3. そうでない場合は、「ショートカット」セクションをクリックし、新しい再生/一時停止キーを押してショートカットを設定します。 役に立つスクリーンショット

  4. それでも機能しない場合は、数回再起動してください。(それが実際に私にとってそれを修正したものです。)


これはxkbオプション、特にオプションに干渉する可能性がありますcaps:...。また、システムの更新によって上書きされる可能性があります。
ダンゼル

確かに、それは可能です。しかし、システムの更新についての良い点。これについてのメモを回答に追加します。フィードバックをお寄せいただきありがとうございます!
ノニームース

親愛なるすべて、すごい!! 申し訳ありませんがしばらくの間afkでした:-)そして今、あなたが解決策に注ぐすべての努力を発見しています!@ WinEunuuchs2Unixの回答を試して、投稿を続けます。ありがとう、LLAP !!
2BF18年

@ 2BFrank好奇心から、うまくいく答えを見つけましたか?
ノニームース

1

インストールしxbindkeysxcapeplayerctlxcape(のCapsLockように予備のキーにマッピングする)およびログイン時に自動起動Alt+F12されることを確認し、ファイルに2行追加します。xcape -e 'Caps_Lock=Alt_L|F12playerctl~/.xbindkeysrc

"playerctl play-pause"
  Alt + F12

0

capslockキーを再生/一時停止キーにします

このソリューションは、capslockキーのスキャンコードをカーネル入力ドライバーの別のキーコード(この場合は再生/一時停止)に再マッピングします。

長所

  • 既存のシステムファイルを変更する必要はありません(新しいファイルを1つだけ作成する必要があります)
  • アプリケーションは、それが実際にcapslockキーであることを知りませんが、実際の再生/一時停止キーが押されたと思います
  • capslockを無効にする必要はなく、xkb設定を台無しにする可能性もありません

短所

  • キーボードごとに個別に実行する必要があります(状況によっては、利点もあります)

前提条件

  • evtest(経由でインストール可能sudo apt-get install evtest

手順

ターミナルで、sudo evtestキーボードを実行して選択します。キーを押しても出力が表示されない場合は、Ctrl+ Cを押して別のデバイスを試してください。選択したデバイスイベント番号を覚えておいてください。後で必要になります。capslockキーを押します。次のような行が表示されます。

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

MSC_SCAN行の前のKEY_CAPSLOCK行の値が必要です。上記の例では、これは70039になりますが、キーボードのスキャンコードはおそらく異なるでしょう。

次に、次のコマンドを実行しますが、Xをevtestコマンドに使用したデバイスイベント番号に置き換えます。

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

...この意志出力bustypeproductvendorおよびversionキーボードの。

名前のファイルを作成65-keyboard-custom.hwdb中に/etc/udev/hwdb.d/、以下の内容を(root権限が必要):

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

...どこ

  • [バス]、[ベンダー]、[製品]、および[バージョン]には正確に4文字が含まれ、文字は大文字である必要があります
  • [スキャンコード]は小文字でなければなりません
  • evdev:...行はありません何の前のスペースを
  • KEYBOARD_KEY...行があり、正確に1つの前のスペースを

例えば:

evdev:input:b0003v046DpC228e0110*
 KEYBOARD_KEY_70039=playpause

最後に、新しい構成をハードウェアデータベースにコンパイルします。

sudo systemd-hwdb update

変更をすぐに適用する場合は、udevに通知します。

sudo udevadm trigger

変更を元に戻したい場合は、作成したファイルを削除して再起動するだけです。

このトピックに関する元の回答で、より詳細な情報を見つけることができます。


@Nonny Mooseだから、「キーボードごとに個別に行う必要があります」と書きました。さらに、好きなだけキーボードを指定できるため、購入する新しいキーボードごとにこれを行うだけで済みます。一方、必要に応じてキーボードを省略できます。たとえば、既に物理的な再生/一時停止キーがあるためです。
ダンゼル

...まあ、私は注意を払っていませんでした。私は立ち直る。
ノニームース

0

たぶん使用するxbindkeysか、XTEそれを行うことができます。ただし、最初にキーコードが何であるかを確認してください。xev端末でコマンドを使用してそれを押すと、capslockキーのコードを確認できます(ゲーミングマウスを含むkeuまたはマウスボタンのキーコードを確認できます)。capslockと再生ボタンのキーコードを手にすると、xbindkeys confiファイルを編集してそこに変更を加えることができます。使用touch ~/.xbindkeysrcして、構成ファイルを作成し(システムが自動的に作成しない場合)、nano ~/.xbindkeysrc編集します。私は先月それを使用しました、そして、ここにexableがあります。あなたにとって非常に役立つかもしれないこれらのリンクを見てください。

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

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

ゲーミングマウスのボタンをキーボードキーに再マップする

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.