Xbindkeys

提供: ArchWiki
2023年3月1日 (水) 21:12時点におけるKgx (トーク | 投稿記録)による版 (→‎設定: 情報を更新)
ナビゲーションに移動 検索に移動

関連記事

Xbindkeys はコマンドをキーボードの特定のキーやキーの組み合わせに結びつけることができるプログラムです。Xbindkeys はマルチメディアキーを処理できます。ウィンドウマネージャやデスクトップ環境に依存しないので手軽に使うことが可能です。

インストール

xbindkeys パッケージをインストールしてください。

設定

空白の ~/.xbindkeysrc を作成するか、サンプルファイルを作成します (これには Ctrl+f のようないくつかのバインディングが含まれているので、編集または削除したい場合があることに注意してください):

$ xbindkeys -d > ~/.xbindkeysrc

あとは ~/.xbindkeysrc を編集してキーバインドを設定するか、GUIメソッド でそれを行うかです。

ヒント: xbindkeys は設定ファイルが変更されると再読み込みします。リロードを強制するには HUP シグナルを送ります。killall -HUP xbindkeys です。xbindkeys に HUP シグナルを送ると、マウスを動かした後でのみ変更が有効になります (xbindkeys(1) を参照。)

ボリューム操作

以下はノートパソコンで 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] を見てください。

ヒント: 複数キーモードを終了するときは q を押して下さい。

変更の永続化

キーの設定ができたら、xprofilexinitrc ファイルを編集して以下を記述してください (どちらのファイルを使用するかはウィンドウマネージャによって変わります):

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[リンク切れ: パッケージが存在しません] パッケージの xmacroxmodmap を使ってこれに対応するスクリプトです [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 では機能しなくなります。