16.04 MATEで有用な何かのために、役に立たないCaps Lockキーを再利用しようとしています。私は出会った
setxkbmap -option ctrl:nocaps
それを無効にしますが、たとえばVLCを再生/一時停止するために再マップできますか?ご回答ありがとうございます!
これは、バックグラウンドで実行される小さなスクリプトを含むバージョンです。いくつかの簡単な手順を実行する必要があります。
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 package (thd --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のチームメイトでテストしました。しかし、理論的には、ウェイランドまたは他のデスクトップ環境でも機能するはずです。
Ubuntu 16.04でdconf-editor
とxbindkeys
をグーグルで操作した後、非常に簡単な解決策が見つかりました。
Gnome XF86AudioPlay
サポートが必要な場合、xdotool
が必要です(OPが規定するVLCには不要):
Sudo apt install xdotool
ここからが難しい部分です。押すたびに Caps LocK 音楽を再生と一時停止の間で切り替えるキー。大文字もオフとオンを切り替えます。
このメソッドを使用して、キーをアクティブにしたままCaps Lockの切り替えをオフにします。
setxkbmap -option caps:none
次に、Ubuntu 16.04でSettings >> Keyboard >> Shortcuts >> Custom Shortcutsに移動します:
Audio Play
に設定しますxdotool key XF86AudioPlay
に設定します新しいオプションを追加すると、割り当てられたショートカットキーはDisabledになります。 Disabledをクリックし、割り当てるキーの入力を求められたら Caps LocK キー。
前のセクションのGnomeの手順に従いますが、コマンドの代わりにこれを使用します。
qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause
VLCはメディアキーを認識しません: キーボードメディアキーをVLCでグローバルに動作させる方法 キーボードに組み込まれています。そのため、XF86AudioPlayへのカスタムキーボードショートカットはxdotool
を使用しても役に立ちません。
このQ&Aでは、コマンドラインからカスタムキーボードショートカットを設定する方法について説明します。 ターミナルからカスタムキーボードショートカットを設定する方法
次のステップは、このsetxkbmap -option caps:none
を再起動後も持続させることです。グーグルの結果は、Terdonによる次の答えになります。 setxkbdmap設定を保存 :
簡単な方法は、コマンドを$HOME/.profile
ファイルに追加することです(存在しない場合は作成できます)。
setxkbmap -option caps:none
これにより、ログインするたびに実行されるはずです。
注$HOME/.profile
、$HOME/.bash_profile
またはその他の類似ファイルではなく、$HOME/.bashrc
を使用する必要があります。これは、この設定がログインマネージャーによって読み取られるためです。
この回答は、Ubuntu MATE 16.04.4 LTSのVMでテストされています(ただし、キーボードはパススルーのUSBキーボードであるため、違いはありません)。また、追加のソフトウェアを必要とせず、パッケージをインストールせずにVanillaインストールで実行できます。また、ブート間で持続します。
ファイル/usr/share/X11/xkb/symbols/pc
をルートとして編集します。ここで間違いを犯さないように注意してください(コンマを忘れるなど)。そうすると、キーボードを使用できなくなる可能性があります。 (私が苦労して学んだことを推測してください?)
行をコメントアウトします
key <CAPS> { [ Caps_Lock ] };
先頭に2つのスラッシュ(//
)を配置します。
その下に次の行を追加します。
key <CAPS> { [ XF86AudioPlay, XF86AudioPause ] };
行をコメントアウトします
modifier_map Lock { Caps_Lock };
上記と同じ方法で。
リブート。
注:( danzel これを指摘したことに対するクレジット)パッケージxkb-data
への更新は、このファイルを上書きできます。これを防ぐ合理的に安全な方法は、dpkg-divert
を使用してパスを変更することです。 (このファイルのアップストリームソースが3年間変更されていないため、「かなり安全」と言います。)
キーボードレイアウト設定でCaps Lockキーを手動で無効にしてから、 この回答 のアプローチを使用して、独自のキーの再マッピングを追加します。
キャップロックキーはキャップをロックしなくなり、この時点で再生/一時停止に再マップされました。これで、VLCで音楽を再生および一時停止できるようになります。この時点で機能する場合は、これらの指示の残りをスキップできます。
ただし、試してみたところ、VLCが再生/一時停止キーに応答しませんでした。
おそらく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/
このソリューションは、capslockキーのスキャンコードをカーネル入力ドライバーの別のキーコード(この場合は再生/一時停止)に再マッピングします。
利点
xkb
設定を台無しにする可能性もありません欠点
前提条件
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/*
...これにより、キーボードのbustype
、product
、vendor
、およびversion
が出力されます。
65-keyboard-custom.hwdb
という名前のファイルを/etc/udev/hwdb.d/
(ルート権限が必要)に作成し、次のコンテンツを追加します。
evdev:input:b[bustype]v[vendor]p[product]e[version]*
KEYBOARD_KEY_[scancode]=playpause
...どこ
evdev:...
行に先行スペースがないKEYBOARD_KEY...
行には正確に1つの先行スペースがあります例えば:
evdev:input:b0003v046DpC228e0110*
KEYBOARD_KEY_70039=playpause
最後に、新しい構成をハードウェアデータベースにコンパイルします。
Sudo systemd-hwdb update
変更をすぐに適用する場合は、udevに通知します。
Sudo udevadm trigger
変更を元に戻したい場合は、作成したファイルを削除して再起動するだけです。
このトピックの私の 元の回答 で、より詳細な情報を見つけることができます。