web-dev-qa-db-ja.com

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

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

setxkbmap -option ctrl:nocaps

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

16
2BFrank

evtestおよびdbus

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

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

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

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

  • 次のスクリプトをどこかに保存します。e。 g。 $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キーをreleaseするときにtoggleVLC()関数を呼び出すことを好む場合は、スクリプト内のEVENT変数を変更できます。 value 0の代わりにvalue 1で終わること。

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

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

次に、ユーザー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のチームメイトでテストしました。しかし、理論的には、ウェイランドまたは他のデスクトップ環境でも機能するはずです。

11
Sebastian Stark

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でSettings >> Keyboard >> Shortcuts >> Custom Shortcutsに移動します:

audio pause-play shortcut.png

  • nameAudio Playに設定します
  • commandxdotool key XF86AudioPlayに設定します
  • 次に、 Apply ボタン

新しいオプションを追加すると、割り当てられたショートカットキーはDisabledになります。 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を使用する必要があります。これは、この設定がログインマネージャーによって読み取られるためです。

9

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

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. そうでない場合は、「ショートカット」セクションをクリックし、新しい再生/一時停止キーを押してショートカットを設定します。 helpful screenshot

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

3
Nonny Moose

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

"playerctl play-pause"
  Alt + F12
1
Enno

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

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

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

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

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

0

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

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

利点

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

欠点

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

前提条件

  • evtestSudo 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/(ルート権限が必要)に作成し、次のコンテンツを追加します。

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

...どこ

  • [bus]、[vendor]、[product]、および[version]には正確に4文字が必要で、文字はuppercaseである必要があります
  • [スキャンコード]はlowercaseでなければなりません
  • evdev:...行に先行スペースがない
  • KEYBOARD_KEY...行には正確に1つの先行スペースがあります

例えば:

evdev:input:b0003v046DpC228e0110*
 KEYBOARD_KEY_70039=playpause

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

Sudo systemd-hwdb update

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

Sudo udevadm trigger

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

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

0
danzel