コンテンツにスキップ

「Xbindkeys」の版間の差分

提供: ArchWiki
削除された内容 追加された内容
Pkg/AUR テンプレートの更新
校正(でき・出来)
 
(2人の利用者による、間の8版が非表示)
1行目: 1行目:
[[Category:キーボード]]
[[Category:キーボード設定]]
[[Category:X サーバー]]
[[Category:X サーバー]]
[[en:Xbindkeys]]
[[en:Xbindkeys]]
[[fr:Xbindkeys]]
[[fr:Xbindkeys]]
[[ru:Xbindkeys]]
[[ru:Xbindkeys]]
[[tr:Xbindkeys]]
{{Related articles start}}
{{Related articles start}}
{{Related|Xmodmap}}
{{Related|Xmodmap}}
{{Related|Sxhkd}}
{{Related|Sxhkd}}
{{Related|Xorg#自動化}}
{{Related articles end}}
{{Related articles end}}


18行目: 18行目:
== 設定 ==
== 設定 ==


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


また、次を実行することでサンプルファイルを作成することができます:
$ xbindkeys -d > ~/.xbindkeysrc
$ xbindkeys -d > ~/.xbindkeysrc


あとは {{ic|~/.xbindkeysrc}} を編集してキーバインドを設定するか、[[Xbindkeys#GUI による設定|GUIメソッド]] でそれを行うかです。
{{Note|サンプルファイルには {{ic|Ctrl+f}} などのバインディングが含まれています。}}


{{Tip|xbindkeys は設定ファイルが変更されると再読み込みします。リロードを強制するには {{ic|HUP}} シグナルを送ります。{{ic|killall -HUP xbindkeys}} です。xbindkeys に {{ic|HUP}} シグナルを送ると、マウスを動かした後でのみ変更が有効になります ({{man|1|xbindkeys}} を参照。)}}
{{ic|~/.xbindkeysrc}} を編集してキーバインドを設定するか、GUI を使って設定を行えます。

{{Tip|変更を加えた後は {{ic|xbindkeys -p}} を実行して設定ファイルをリロードすることで変更が適用されます。}}


=== ボリューム操作 ===
=== ボリューム操作 ===


以下はノートパソコンで Fn キーを使って、pactl コマンドを実行して音量を調整する設定例です。シャープ記号 (#) はコメントとして使えます。
以下はノートパソコンで Fn キーを使って、pactl コマンドを実行して音量を調整する設定例です。シャープ記号 (#) はコメントとして使えます。
# Increase volume
"pactl set-sink-volume @DEFAULT_SINK@ +1000"
XF86AudioRaiseVolume


{{hc|~/.xbindkeysrc|
# Decrease volume
# Increase volume
"pactl set-sink-volume @DEFAULT_SINK@ -1000"
"pactl set-sink-volume @DEFAULT_SINK@ +1000"
XF86AudioLowerVolume
XF86AudioRaiseVolume


# Mute volume
# Decrease volume
"pactl set-sink-mute @DEFAULT_SINK@ toggle"
"pactl set-sink-volume @DEFAULT_SINK@ -1000"
XF86AudioLowerVolume
XF86AudioMute


# Mute volume
上記以外の音量操作コマンドは [[PulseAudio#キーボードのボリュームコントロール]]や [[ALSA#キーボードのボリュームコントロール]]を見てください。
"pactl set-sink-mute @DEFAULT_SINK@ toggle"
XF86AudioMute


# Mute microphone
=== バックライト操作 ===
"pactl set-source-mute @DEFAULT_SOURCE@ toggle"
XF86AudioMicMute
}}


上記以外の音量操作コマンドは [[PulseAudio#キーボードのボリュームコントロール]] や [[ALSA#キーボードのボリュームコントロール]] を見てください。
画面の明るさを制御するために、キーバインドを定義することもできます。


=== バックライト操作 ===
# Increase backlight
"xbacklight -inc 10"
XF86MonBrightnessUp


バックライト制御のキーバインドは {{ic|XF86MonBrightnessUp}} と {{ic|XF86MonBrightnessDown}} キーを使って定義できます。利用可能なバックライト制御ユーティリティについては [[バックライト#バックライトユーティリティ]] を参照してください。
# Decrease backlight
"xbacklight -dec 10"
XF86MonBrightnessDown


=== GUI による設定 ===
=== GUI による設定 ===
72行目: 67行目:
$ xbindkeys --multikey
$ xbindkeys --multikey


空のウィンドウが開きます。コマンドを割り当てたいキーを押すと ''xbindkeys'' は {{ic|~/.xbindkeysrc}} に記述することが出来るスニペットを出力します。例えば、空のウィンドウが開いた時に、{{ic|Alt+o}} を押すと以下のように出力されます (出力結果は異なることがあります):
空のウィンドウが開きます。コマンドを割り当てたいキーを押すと ''xbindkeys'' は {{ic|~/.xbindkeysrc}} に記述することができるスニペットを出力します。例えば、空のウィンドウが開いた時に、{{ic|Alt+o}} を押すと以下のように出力されます (出力結果は異なることがあります):
"(Scheme function)"
"(Scheme function)"
m:0x8 + c:32
m:0x8 + c:32
Alt + o
Alt + o


# 最初の行はコマンドを表します。
最初の行がコマンドです。2番目の行には {{ic|xev}} による状態 (0x8) とキーコード (32) が含まれます。3番目の行はそのキーコードと関連付けられているキーシムです。上記の出力を使う場合、後ろの2行のうち、どちらかを {{ic|~/.xbindkeysrc}} にコピーして "(Scheme function)" を実行したいコマンドに置き換えます。
# 2 行目には、ツール ''xev'' によって報告された状態 (0x8) とキーコード (32) が含まれています。
# 3 行目には、指定されたキーコードに関連付けられた keysyms が含まれています。

この出力を使用するには、最後の 2 行のいずれかを {{ic|~/.xbindkeysrc}} にコピーし、"(Scheme 関数)" を実行するコマンドに置き換えます。


マウスのボタンを確認したい場合は xev を使います。[https://blog.hanschen.org/2009/10/13/mouse-shortcuts-with-xbindkeys/] を見てください。
マウスのボタンを確認したい場合は xev を使います。[https://blog.hanschen.org/2009/10/13/mouse-shortcuts-with-xbindkeys/] を見てください。


{{Tip|複数キーモードを終了するときは {{ic|q}} を押して下さい。}}
{{Tip|複数キーモードを終了するときは {{ic|q}} を押して下さい。}}
{{Note|''xev'' は {{Pkg|xorg-xev}} パッケージ内で提供されます。詳細については、{{man|1|xev}} を参照してください。}}


== 変更の永続化 ==
== 変更の永続化 ==
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" (戻る) イベントが生成されます。


== トラブルシューティング ==
== トラブルシューティング ==

2024年7月10日 (水) 20:10時点における最新版

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

インストール

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

設定

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

$ xbindkeys -d > ~/.xbindkeysrc

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

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

ボリューム操作

以下はノートパソコンで Fn キーを使って、pactl コマンドを実行して音量を調整する設定例です。シャープ記号 (#) はコメントとして使えます。

~/.xbindkeysrc
# 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

# Mute microphone
"pactl set-source-mute @DEFAULT_SOURCE@ toggle"
   XF86AudioMicMute

上記以外の音量操作コマンドは PulseAudio#キーボードのボリュームコントロールALSA#キーボードのボリュームコントロール を見てください。

バックライト操作

バックライト制御のキーバインドは XF86MonBrightnessUpXF86MonBrightnessDown キーを使って定義できます。利用可能なバックライト制御ユーティリティについては バックライト#バックライトユーティリティ を参照してください。

GUI による設定

グラフィカルに設定したい場合 xbindkeys_config-gtk2AUR パッケージをインストールして次のコマンドを実行してください:

$ xbindkeys_config

キーコードの確認

特定のキーのキーコードを確認するには、以下のコマンドを実行:

$ xbindkeys --key

または、複数のキーを取得するには、次のようにします:

$ xbindkeys --multikey

空のウィンドウが開きます。コマンドを割り当てたいキーを押すと xbindkeys~/.xbindkeysrc に記述することができるスニペットを出力します。例えば、空のウィンドウが開いた時に、Alt+o を押すと以下のように出力されます (出力結果は異なることがあります):

"(Scheme function)"
    m:0x8 + c:32
    Alt + o
  1. 最初の行はコマンドを表します。
  2. 2 行目には、ツール xev によって報告された状態 (0x8) とキーコード (32) が含まれています。
  3. 3 行目には、指定されたキーコードに関連付けられた keysyms が含まれています。

この出力を使用するには、最後の 2 行のいずれかを ~/.xbindkeysrc にコピーし、"(Scheme 関数)" を実行するコマンドに置き換えます。

マウスのボタンを確認したい場合は xev を使います。[1] を見てください。

ヒント 複数キーモードを終了するときは q を押して下さい。
ノート xevxorg-xev パッケージ内で提供されます。詳細については、xev(1) を参照してください。

変更の永続化

キーの設定ができたら、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 では機能しなくなります。