公開日: 2021年7月4日 / 最終更新日: 2021年7月21日

タイル型ウィンドウマネージャ awesome のすすめ (後編)

前編に引き続き、ウィンドウマネージャ awesome の紹介です。後編はキーバインドを扱います。デフォルトのキーバインドとカスタマイズ例を、頑張ってレスポンシブな一覧表にまとめたので、見てやってください。

Mod4 キーについて

awesome のキーバインドは、修飾キーとして Mod4 キーを必ず使用します。例えば、端末エミュレータの起動は「Mod4 + Enter」にバインドされています。で、この Mod4 キーとは具体的にどのキーかというと、(環境にもよるらしいですが) たいていは Windows のロゴが印刷された Windows キーになっていると思います。通常はそれでよいのですが、VMware などの仮想環境でホスト OS が Windows の場合、Windows のキーバインドとかち合ってしまうことがあります。そこで Windows キー以外のキーにも Mod4 を割り当てる方法を別記事「Xorg のキーマップをカスタマイズしようと思う」で検討したので、必要に応じてご参照ください。

awesome のキーバインドを理解する上での豆知識

  • タグ

    前編の「外観のカスタマイズ」を参照。

  • クライアント

    前編の「設定ファイルを読み書きする上での豆知識」を参照。

  • マスターウィンドウとカラムウィンドウ

    これらの語について正確な定義がよくわからないので、ここではイメージとして説明します。図 1(a) ~ (d) のように、awesome が起動した状態からクライアント #1、#2、#3 を順番に起動したとき、画面左側のようにメインになる領域と、画面右側のように細かく分割されてゆく領域ができ、左側にあるウィンドウをマスターウィンドウ、右側にあるウィンドウをカラムウィンドウと呼びます。次の節で紹介しますが「Mod4 + h」「Mod4 + l」でマスターウィンドウの幅を変えたり、「Mod + Shift + h」「Mod + Shift + l」でマスターウィンドウの数を増減させたりすることができます。また、「Mod4 + Ctrl + h」「Mod4 + Ctrl + l」でカラムウィンドウのカラム数を増減させることができ、例えば図 1(d) の状態で「Mod4 + Ctrl + h」を押すと図 1(e) のようになります。下記の公式ドキュメントが参考になるかもしれません。

    図 1
    図 1
  • グローバルキーバインドとクライアントキーバインド

    awesome のキーバインドは「グローバルキーバインド」と「クライアントキーバインド」の 2 種類に分かれます。クライアントキーバインドはフォーカスされているクライアントだけに有効であるのに対して、グローバルキーバインドは awesome の起動中、常に有効です。詳細は下記の公式ドキュメントを参照してください。

キーバインド一覧

デフォルトのキーバインドと、その変更例を一覧表にまとめてみました。キーバインドの設定は ~/.config/awesome/rc.lua に書かれています。Lua で書かれていますが、下記の一覧表と照らし合わせて読んでいただければ、だいたい理解できると思います。また、変更例についての補足説明は一覧表の後にまとめて掲載します。変更例欄の "―" はデフォルトと同じキーバインドであることを表します。なお、表のレイアウトの都合上、機能欄の説明は超ざっくりです。気になる機能があったら実際に試してみてください。
グローバルキーバインド
デフォルト変更例機能
Mod4 + s

Mod4 + F1 (*1)

キーバインド一覧を表示する

Mod4 + Left (←)

左隣のタグへ移動する

Mod4 + Right (→)

右隣のタグへ移動する

Mod4 + Right (→)

Mod4 + i (*2)

右隣のタグへ移動する

Mod4 + Esc

前にいたタグへ戻る

Mod4 + j

Mod4 + n (*3)

次のクライアントへフォーカスを移動

Mod4 + k

Mod4 + p (*3)

前のクライアントへフォーカスを移動

Mod4 + w

Mod4 + Space (*4)

メインメニューを開く

Mod4 + Shift + j

Mod4 + Shift + n (*3)

クライアントの位置を入れ替える

Mod4 + Shift + k

Mod4 + Shift + p (*3)

クライアントの位置を入れ替える

Mod4 + Ctrl + j

?

Mod4 + Ctrl + k

?

Mod4 + u

?

Mod4 + Tab

前のクライアントへ戻る

Mod4 + Enter

端末エミュレータを起動する

Mod4 + Ctrl + r

Mod4 + Shift + r (*5)

awesome 再起動

Mod4 + Shift + q

awesome 終了

(デフォルトなし)

Mod4 + Ctrl + r (*6)

shutdown -r now

(デフォルトなし)

Mod4 + Ctrl + p (*6)

shutdown -p now

Mod4 + l

マスターウィンドウの幅を広げる

Mod4 + h

マスターウィンドウの幅を狭める

Mod4 + Shift + l

マスターウィンドウの数を減らす

Mod4 + Shift + h

マスターウィンドウの数を増やす

Mod4 + Ctrl + l

カラムウィンドウの数を減らす

Mod4 + Ctrl + h

カラムウィンドウの数を増やす

Mod4 + Space

削除 (*4)

タイル配置パターンを切り替える

Mod4 + Shift + Space

削除 (*4)

タイル配置パターンを切り替える

Mod4 + Ctrl + n

Mod4 + Ctrl + z (*1)

最小化されているクライアントを元に戻す

Mod4 + r

コマンドランチャー

Mod4 + x

Lua コードの実行

Mod4 + p

Mod4 + b (*7)

メニューバーを表示する

Mod4 + 1~9

数字で指定したタグに切り替える

Mod4 + Ctrl + 1~9

?

Mod4 + Shift + 1~9

?

Mod4 + Ctrl + Shift + 1~9

?

クライアントキーバインド
デフォルト変更例機能
Mod4 + f

削除 (*8)

クライアントをフルスクリーン化 (トグル)

Mod4 + Shift + c

クライアントを終了させる

Mod4 + Shift + c

Mod4 + k (*9)

クライアントを終了させる

Mod4 + Ctrl + Space

Mod4 + f (*10)

クライアントをフロート化 (トグル)

Mod4 + Ctrl + Enter

カラムウィンドウとマスターウィンドウの入れ替え

Mod4 + Ctrl + Enter

Mod4 + s (*11)

カラムウィンドウとマスターウィンドウの入れ替え

Mod4 + o

?

Mod4 + t

クライアントを最前面へ (トグル)

Mod4 + n

Mod4 + z (*1)

クライアントを最小化 (トグル)

Mod4 + m

クライアントを最大化 (トグル)

Mod4 + Ctrl + m

クライアントを垂直方向に最大化 (トグル)

Mod4 + Shift + m

クライアントを水平方向に最大化 (トグル)

(*1)デフォルトのキーバインドが覚えられないので Windows っぽくしました。
(*2)デフォルトの「Mod4 + Right」よりも使いやすいキーバインドがほしかったので追加しました。
(*3)「次へ」「前へ」は j、k よりも n、p のほうがしっくりくるので変更しました。ここだけ Emacs 風なのが統一感を欠きますが。
(*4)「Mod4 + Space」はデフォルトではタイル配置パターンの切り替えにバインドされていますが、たぶん滅多に切り替えることはなく、もったいないので、より頻繁に使いそうなメインメニューのオープンに割り当てました。タイル配置パターンを切り替えたくなったらマウスを使えばいいという考えです。
(*5)特に深い理由はありませんが、awesome の終了が「Mod4 + Shift + q」なので、それに合わせました。
(*6)PC の再起動とシャットダウンを実行できるようにしました。rc.lua の「globalkeys = gears.table.join(...)」の括弧内に次のコードを追加してください。
~/.config/awesome/rc.lua
awful.key({ modkey, "Control" }, "r", function () awful.spawn("/sbin/shutdown -r now")   end,
          {description = "shutdown -r now", group = "awesome"}),
awful.key({ modkey, "Control" }, "p", function () awful.spawn("/sbin/shutdown -p now") end,
          {description = "shutdown -p now", group = "awesome"}),
(*7)「Mod4 + p」を他で使いたかったので。
(*8)「Mod4 + f」を他で使いたかったのと、フルスクリーン化はあまり使わないかなあと思ったので、削除しました。
(*9)デフォルトの「Mod4 + Shift + c」が押しづらいので、押しやすいキーバインドを追加しました。kill の頭文字を取って「k」です。
(*10)(*8) で空けた「Mod4 + f」をフロート化に割り当てています。
(*11)デフォルトの「Mod4 + Ctrl + Enter」が押しづらいので、押しやすいキーバインドを追加しました。swap の頭文字を取って「s」です。

おまけ: rc.lua キーバインド変更箇所の差分

~/.config/awesome/rc.lua 差分
@@ -229,34 +230,36 @@

 -- {{{ Key bindings
 globalkeys = gears.table.join(
-    awful.key({ modkey,           }, "s",      hotkeys_popup.show_help,
+    awful.key({ modkey,           }, "F1",      hotkeys_popup.show_help,
               {description="show help", group="awesome"}),
     awful.key({ modkey,           }, "Left",   awful.tag.viewprev,
               {description = "view previous", group = "tag"}),
     awful.key({ modkey,           }, "Right",  awful.tag.viewnext,
               {description = "view next", group = "tag"}),
+    awful.key({ modkey,           }, "i",  awful.tag.viewnext,
+              {description = "view next", group = "tag"}),
     awful.key({ modkey,           }, "Escape", awful.tag.history.restore,
               {description = "go back", group = "tag"}),

-    awful.key({ modkey,           }, "j",
+    awful.key({ modkey,           }, "n",
         function ()
             awful.client.focus.byidx( 1)
         end,
         {description = "focus next by index", group = "client"}
     ),
-    awful.key({ modkey,           }, "k",
+    awful.key({ modkey,           }, "p",
         function ()
             awful.client.focus.byidx(-1)
         end,
         {description = "focus previous by index", group = "client"}
     ),
-    awful.key({ modkey,           }, "w", function () mymainmenu:show() end,
+    awful.key({ modkey,           }, "space", function () mymainmenu:show() end,
               {description = "show main menu", group = "awesome"}),

     -- Layout manipulation
-    awful.key({ modkey, "Shift"   }, "j", function () awful.client.swap.byidx(  1)    end,
+    awful.key({ modkey, "Shift"   }, "n", function () awful.client.swap.byidx(  1)    end,
               {description = "swap with next client by index", group = "client"}),
-    awful.key({ modkey, "Shift"   }, "k", function () awful.client.swap.byidx( -1)    end,
+    awful.key({ modkey, "Shift"   }, "p", function () awful.client.swap.byidx( -1)    end,
               {description = "swap with previous client by index", group = "client"}),
     awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end,
               {description = "focus the next screen", group = "screen"}),
@@ -276,10 +279,14 @@
     -- Standard program
     awful.key({ modkey,           }, "Return", function () awful.spawn(terminal) end,
               {description = "open a terminal", group = "launcher"}),
-    awful.key({ modkey, "Control" }, "r", awesome.restart,
+    awful.key({ modkey, "Shift"   }, "r", awesome.restart,
               {description = "reload awesome", group = "awesome"}),
     awful.key({ modkey, "Shift"   }, "q", awesome.quit,
               {description = "quit awesome", group = "awesome"}),
+    awful.key({ modkey, "Control" }, "r", function () awful.spawn("/sbin/shutdown -r now")   end,
+              {description = "shutdown -r now", group = "awesome"}),
+    awful.key({ modkey, "Control" }, "p", function () awful.spawn("/sbin/shutdown -p now") end,
+              {description = "shutdown -p now", group = "awesome"}),

     awful.key({ modkey,           }, "l",     function () awful.tag.incmwfact( 0.05)          end,
               {description = "increase master width factor", group = "layout"}),
@@ -293,12 +300,8 @@
               {description = "increase the number of columns", group = "layout"}),
     awful.key({ modkey, "Control" }, "l",     function () awful.tag.incncol(-1, nil, true)    end,
               {description = "decrease the number of columns", group = "layout"}),
-    awful.key({ modkey,           }, "space", function () awful.layout.inc( 1)                end,
-              {description = "select next", group = "layout"}),
-    awful.key({ modkey, "Shift"   }, "space", function () awful.layout.inc(-1)                end,
-              {description = "select previous", group = "layout"}),

-    awful.key({ modkey, "Control" }, "n",
+    awful.key({ modkey, "Control" }, "z",
               function ()
                   local c = awful.client.restore()
                   -- Focus restored client
@@ -325,28 +328,26 @@
               end,
               {description = "lua execute prompt", group = "awesome"}),
     -- Menubar
-    awful.key({ modkey }, "p", function() menubar.show() end,
+    awful.key({ modkey }, "b", function() menubar.show() end,
               {description = "show the menubar", group = "launcher"})
 )

 clientkeys = gears.table.join(
-    awful.key({ modkey,           }, "f",
-        function (c)
-            c.fullscreen = not c.fullscreen
-            c:raise()
-        end,
-        {description = "toggle fullscreen", group = "client"}),
     awful.key({ modkey, "Shift"   }, "c",      function (c) c:kill()                         end,
               {description = "close", group = "client"}),
-    awful.key({ modkey, "Control" }, "space",  awful.client.floating.toggle                     ,
+    awful.key({ modkey,           }, "k",      function (c) c:kill()                         end,
+              {description = "close", group = "client"}),
+    awful.key({ modkey,           }, "f",      awful.client.floating.toggle                     ,
               {description = "toggle floating", group = "client"}),
     awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end,
               {description = "move to master", group = "client"}),
+    awful.key({ modkey,           }, "s",      function (c) c:swap(awful.client.getmaster()) end,
+              {description = "move to master", group = "client"}),
     awful.key({ modkey,           }, "o",      function (c) c:move_to_screen()               end,
               {description = "move to screen", group = "client"}),
     awful.key({ modkey,           }, "t",      function (c) c.ontop = not c.ontop            end,
               {description = "toggle keep on top", group = "client"}),
-    awful.key({ modkey,           }, "n",
+    awful.key({ modkey,           }, "z",
         function (c)
             -- The client currently has the input focus, so it cannot be
             -- minimized, since minimized clients can't have the focus.