キーボードショートカットで音量調整を行う際にポップアップ表示が出るのを回避する方法(GNOMEデスクトップ環境)

簡単にGNOMEデスクトップ環境について(以下2段落はタイトルとは関係ないです)

Ubuntuのデスクトップ環境がUnityからGNOMEに変更されるそうなので、ここ最近はGNOMEを使ってみています。GNOMEに変更されるという流れは次の記事とかが参考になるかと。
2017年4月7日号 Ubuntuの大きな方針変更/Unity 8の終了・linux-awsリリース:Ubuntu Weekly Topics|gihyo.jp … 技術評論社

しばらく前はXfceデスクトップ環境を使っていた身からすると、GNOMEは結構クセが強い印象を受けました。ただクセが強いといってもカスタマイズ方法をある程度押さえておけば、結構自分好みの環境に持っていくことが出来ます。デフォルトで用意されている環境設定では大きくいじれる所は少ないのですが、GNOME Tweak Toolをインストールして使うことでカスタマイズの幅は広がります。そして GNOME Shell Extensions という拡張機能を入れることでかなりカスタマイズの幅は広がります。まぁShell Extensionsは種類が多くてどれを入れればいいか迷ったり、使っているGNOMEのバージョンによりインストール出来ないものがあったりするので、そのへんは試行錯誤する必要がありますが(いろいろ定番のShell Extensionsが紹介されてたりするので、そういった記事を読むといいかと思います)。


さて、GNOMEの紹介はこんなところにしてタイトルに書いた件について。

以前のブログでXfceデスクトップ環境で音量をキーボードショートカットから変更するという記事を書きました。
Xfce4でスピーカー音量をキーボード操作で変更する 
その流れとして以下の記事も書いています。
コマンドラインからpactlで音量を変更する件に関して

GNOMEではキーボードショートカット設定から音量変更が割り当てられるので、通常ではキーの割り当てさえ出来ていればそれを使って音量を変えることが出来ます。
ただ個人的にこの機能には少し不満があります。とりあえず以下の図.1を見て下さい。

図.1 キーボードショートカットによる音量変更

これはキーボードショートカットから音量変更したときの画面ですが、画面中央やや下にスピーカーアイコンと音量バーの音量変更通知のポップアップが表示されています。音量変更したのが分かりやすいといえば分かりやすいのですが、例えば動画を全画面で見ているときに音量変更をした際にこういった表示が出てくると結構邪魔に感じてしまいます。

そこで設定からこのポップアップ表示が出ないように出来ないかといろいろ調べてみたのですが、特にこれといった情報は見つけることが出来ませんでした。

そこで以前書いたXfceでの音量変更の記事を参考にして、GNOMEでも同様に設定してみることにしました。 まぁ単にカスタムキーボードショートカットを作成し、任意のキーボードショートカットから特定のコマンドを実行させるだけですが。
まず下の図.2のようにキーボードショートカットの設定で、デフォルトで用意されている音量変更のキー割り当てを無効にします。無効にするのはそのキーを後で作成するカスタムキーボードショートカットに割り当てるためです。

図.2デフォルトの音量変更ショートカットを無効にする

後は以下の図.3のように「独自のショートカット」設定で「Volume up」と「Volume down」のカスタムキーボードショートカットを作成します。
コマンド割り当てはXfceで設定していたときに使っていた以下のコマンドをそのまま設定しました。
pactl set-sink-volume @DEFAULT_SINK@ +5%

pactl set-sink-volume @DEFAULT_SINK@ -5%


図.3カスタムキーボードショートカットの割り当て

しかし、ここで問題が発生しました。カスタムキーボードショートカットで設定したキーを押しても音量が変更されないのです。試しに別のコマンド(例としてgedit)を割り当てると、それはちゃんと機能しました。またシェルから音量変更のコマンドを実行してもちゃんと機能しました。どうもキーボードショートカットで実行する際に、うまくコマンドがシステムに渡されていない模様。実行されない原因は渡すコマンドが長すぎるのか、それともエスケープシーケンスでも付ける必要があるのかだと思うのですが、調べてみてもいまいち分からず。こういうときはコマンドをシェルスクリプトファイルにして実行権限を付与して、それを割り当てれば大抵はうまくいきます。

しかし、シェルスクリプトにしても問題が発生。今度はシェルスクリプトファイルの場所の指定で問題が起こりました。ホームディレクトリを表すのに「~(チルダ)」を用いたのですが、それだと認識されない模様。こういうときはフルパスで指定すれば大抵はうまくいきます。
(フルパスを調べるときはpwdコマンドを使うと便利です)

ということでフルパスでシェルスクリプトファイルの場所を指定したら、ちゃんとキーボードショートカットから音量変更することが出来るようになりました。ちゃんと調べればもっとスマートな方法が見つかると思いますが、一応やりたいことは実現出来たのでひとまずこれで良しとします。


追記 2017年8月8日
なぜコマンドが無効になるのか確認していたところ、どうやら「%(パーセント)」文字があると処理に問題が生じるようです。具体的にはパーセント文字と直後の1文字が無視されるようになっていました。
例えば
gedit ab%cd.txt
を指定すると、geditはabd.txtのファイルを開いて起動します。
(端末ではなく、GNOMEのキーボードショートカットで指定する場合での話です)

そして
pactl set-sink-volume @DEFAULT_SINK@ +5%
をキーボードショートカットに指定した場合は
pactl set-sink-volume @DEFAULT_SINK@ +5
と認識されてしまっていると思われます。
なので、対策としては%を%として認識させればよいはずです。ただ「\(バックスラッシュ)」を%の前に置いても効果はありませんでした。ここで以前何かで読んだ%の前に%を置くという記述を思い出しました。そして
pactl set-sink-volume @DEFAULT_SINK@ +5%%
と指定することで、キーボードショートカットにより想定していたコマンドの実行が可能になりました。

GNOMEのキーボードショートカットを設定する書式がなぜこういう書式なのかはよく分かりませんでしたが、とりあえずはこれで対処出来るかと思います。


コメント