「Xbindkeys」の版間の差分
Kusakata.bot2 (トーク | 投稿記録) (Pkg/AUR テンプレートの更新) |
(マウスコーディングを翻訳して追加) |
||
110行目: | 110行目: | ||
上記の設定は全ての XF86 マルチメディアキーに適用できます (例: XF86AudioRaiseVolume, XF86AudioLowerVolume, XF86AudioPlay, XF86AudioPrev, XF86AudioNext)。 |
上記の設定は全ての XF86 マルチメディアキーに適用できます (例: XF86AudioRaiseVolume, XF86AudioLowerVolume, XF86AudioPlay, XF86AudioPrev, XF86AudioNext)。 |
||
+ | |||
+ | == マウスコーディング == |
||
+ | |||
+ | マウスの1つのボタンを "コード" キー(キーボードの Shift キーのように)専用にすることで、 xbindkeys を使用して、他の方法よりも多くのアクションを実行するようにマウスを構成できます。これには、単純化された xbindkeys 構文ではなく、 Scheme を使用する必要があります。 |
||
+ | |||
+ | {{hc|1=.xbindkeysrc.scm|2= |
||
+ | (define (define-mouse-chords chord-key . definitions) |
||
+ | (define (start-mouse-chord) |
||
+ | (let ((cmd #f)) |
||
+ | (for-each |
||
+ | (lambda (definition) |
||
+ | (let ((key (list-ref definition 0)) (binding (list-ref definition 1))) |
||
+ | (xbindkey-function key (lambda () (set! cmd binding))))) |
||
+ | definitions) |
||
+ | (xbindkey-function `(release ,chord-key) |
||
+ | (lambda () |
||
+ | (remove-xbindkey `(release ,chord-key)) |
||
+ | (for-each |
||
+ | (lambda (definition) |
||
+ | (let ((key (list-ref definition 0))) |
||
+ | (remove-xbindkey key))) |
||
+ | definitions) |
||
+ | (if cmd |
||
+ | (begin |
||
+ | (run-command cmd) |
||
+ | (set! cmd #f)) |
||
+ | ))))) |
||
+ | (xbindkey-function chord-key start-mouse-chord)) |
||
+ | }} |
||
+ | |||
+ | この関数を定義すると、いくつかのコードコマンドを設定できるようになります。 |
||
+ | |||
+ | {{bc| |
||
+ | (define-mouse-chords "b:10" |
||
+ | (list '(release "b:1") "xdotool click 8") |
||
+ | (list '(release "b:2") "xdotool click 9") |
||
+ | ) |
||
+ | }} |
||
+ | |||
+ | これは、 "ボタン10" をマウスのキーのコーディングとして定義します。ボタン10が押されると、ファンクションはブロック内で定義されたボタンのバインディングを作成します。ボタン10を放すと、これらのバインドは削除されます。例えば、ボタン10を押したまま、ボタン1を押して放し、次にボタン10を放した場合、仮想的な "ボタン8" (戻る) イベントが生成されます。 |
||
== トラブルシューティング == |
== トラブルシューティング == |
2021年6月20日 (日) 16:16時点における版
Xbindkeys はコマンドをキーボードの特定のキーやキーの組み合わせに結びつけることができるプログラムです。Xbindkeys はマルチメディアキーを処理できます。ウィンドウマネージャやデスクトップ環境に依存しないので手軽に使うことが可能です。
目次
インストール
設定
ホームディレクトリに .xbindkeysrc
という名前のファイルを作成してください:
$ touch ~/.xbindkeysrc
また、次を実行することでサンプルファイルを作成することができます:
$ xbindkeys -d > ~/.xbindkeysrc
~/.xbindkeysrc
を編集してキーバインドを設定するか、GUI を使って設定を行えます。
ボリューム操作
以下はノートパソコンで Fn キーを使って、pactl コマンドを実行して音量を調整する設定例です。シャープ記号 (#) はコメントとして使えます。
# Increase volume "pactl set-sink-volume @DEFAULT_SINK@ +1000" XF86AudioRaiseVolume
# Decrease volume "pactl set-sink-volume @DEFAULT_SINK@ -1000" XF86AudioLowerVolume
# Mute volume "pactl set-sink-mute @DEFAULT_SINK@ toggle" XF86AudioMute
上記以外の音量操作コマンドは PulseAudio#キーボードのボリュームコントロールや ALSA#キーボードのボリュームコントロールを見てください。
バックライト操作
画面の明るさを制御するために、キーバインドを定義することもできます。
# Increase backlight "xbacklight -inc 10" XF86MonBrightnessUp
# Decrease backlight "xbacklight -dec 10" XF86MonBrightnessDown
GUI による設定
グラフィカルに設定したい場合 xbindkeys_config-gtk2AUR パッケージをインストールして次のコマンドを実行してください:
$ xbindkeys_config
キーコードの確認
特定のキーのキーコードを確認するには、以下のコマンドを実行:
$ xbindkeys --key
または、複数のキーを取得するには、次のようにします:
$ xbindkeys --multikey
空のウィンドウが開きます。コマンドを割り当てたいキーを押すと xbindkeys は ~/.xbindkeysrc
に記述することが出来るスニペットを出力します。例えば、空のウィンドウが開いた時に、Alt+o
を押すと以下のように出力されます (出力結果は異なることがあります):
"(Scheme function)" m:0x8 + c:32 Alt + o
最初の行がコマンドです。2番目の行には xev
による状態 (0x8) とキーコード (32) が含まれます。3番目の行はそのキーコードと関連付けられているキーシムです。上記の出力を使う場合、後ろの2行のうち、どちらかを ~/.xbindkeysrc
にコピーして "(Scheme function)" を実行したいコマンドに置き換えます。
マウスのボタンを確認したい場合は xev を使います。[1] を見てください。
変更の永続化
キーの設定ができたら、xprofile や xinitrc ファイルを編集して以下を記述してください (どちらのファイルを使用するかはウィンドウマネージャによって変わります):
xbindkeys
ウィンドウマネージャや DE を起動する行の前に書いて下さい。
マルチメディアキーのシミュレート
XF86Audio* などのマルチメディアキー [2] は主要な DE なら大抵は認識されます。マルチメディアキーが存在しないキーボードを使っている場合、他のキーで同じような動作をするようにシミュレートできます:
# Decrease volume on pressing Super-minus "amixer set Master playback 1-" m:0x50 + c:20 Mod2+Mod4 + minus
実際にキーを呼び出すために xdotool (公式リポジトリ) や xmacroAUR (AUR) などのツールを使うことができます。残念ながら、修飾キー (Super や Shift など) を押している場合、X には Super-XF86AudioLowerVolume
のように認識されるため動作しません。以下は xorg-server-utils[リンク切れ: パッケージが存在しません] パッケージの xmacro と xmodmap を使ってこれに対応するスクリプトです [3]。
#!/bin/sh echo 'KeyStrRelease Super_L KeyStrRelease minus'
上記の設定で XF86AudioLowerVolume を使うことができますが (Super+minus
を使用)、Super キーを話さずに (ボリュームボタンを叩くように) 何度も呼び出すことはできません。その場合、以下の行をスクリプトの末尾に追加してください:
echo 'KeyStrPress Super_L' | xmacroplay :0
スクリプトを修正した場合、キーを素早く押すことで Super_L キーがオンのままになることがあります。それによって面白い副作用が発生することがあります。状態を解除するにはもう一度キーを入力するか、ボリュームアップ・ダウンのマルチタップを気にしない場合は元のスクリプトを使ってください。
上記の設定は全ての XF86 マルチメディアキーに適用できます (例: XF86AudioRaiseVolume, XF86AudioLowerVolume, XF86AudioPlay, XF86AudioPrev, XF86AudioNext)。
マウスコーディング
マウスの1つのボタンを "コード" キー(キーボードの Shift キーのように)専用にすることで、 xbindkeys を使用して、他の方法よりも多くのアクションを実行するようにマウスを構成できます。これには、単純化された xbindkeys 構文ではなく、 Scheme を使用する必要があります。
.xbindkeysrc.scm
(define (define-mouse-chords chord-key . definitions) (define (start-mouse-chord) (let ((cmd #f)) (for-each (lambda (definition) (let ((key (list-ref definition 0)) (binding (list-ref definition 1))) (xbindkey-function key (lambda () (set! cmd binding))))) definitions) (xbindkey-function `(release ,chord-key) (lambda () (remove-xbindkey `(release ,chord-key)) (for-each (lambda (definition) (let ((key (list-ref definition 0))) (remove-xbindkey key))) definitions) (if cmd (begin (run-command cmd) (set! cmd #f)) ))))) (xbindkey-function chord-key start-mouse-chord))
この関数を定義すると、いくつかのコードコマンドを設定できるようになります。
(define-mouse-chords "b:10" (list '(release "b:1") "xdotool click 8") (list '(release "b:2") "xdotool click 9") )
これは、 "ボタン10" をマウスのキーのコーディングとして定義します。ボタン10が押されると、ファンクションはブロック内で定義されたボタンのバインディングを作成します。ボタン10を放すと、これらのバインドは削除されます。例えば、ボタン10を押したまま、ボタン1を押して放し、次にボタン10を放した場合、仮想的な "ボタン8" (戻る) イベントが生成されます。
トラブルシューティング
何らかの理由で、~/.xbindkeysrc
に設定したホットキーが使えない場合、ターミナルを開いて次を入力してください:
$ xbindkeys -n
動作しないキーを押すと、xbindkeys のエラーが表示されます (例: コマンドやキーコードが間違っている、など)。
コマンドラインの xdotool でキーバインドのコマンドが動作するのにホットキーでは有効にならない場合、ホットキーに "+ Release" を追加してみてください (特に GNOME でこの問題が発生します):
"xdotool key --clearmodifiers XF86AudioPlay" Mod2 + F7 + Release
上記の設定では F7 キーで音楽を再生・停止します。"xdotool" コマンドはコマンドラインで動作しますが "+ Release" を取ると xbindkeys では機能しなくなります。