タイル型WM awesomeをマルチディスプレイで使ってみた


自宅のデスクトップにディスプレイを追加してみました。ディスプレイも2枚となり、作業効率も2倍に!!とか思ってたら、いろいろとイライラ感が募ります。原因は現在使っているタイル型WMのawesome。もともとディスプレイが1枚だったのを前提に設定していたので、自分が思っているところにピシッとウィンドウが決まってくれません。

それと、awesomeの仕様上の問題もあります。awesomeは各ディスプレイごとにGNOMEのワークスペースにあたるタグを管理するため、ディスプレイを横断してレイアウトを設定するということができません。Xmonadは、複数のディスプレイも集約的に管理できるようになっているみたいですね。羨ましいです。

タイル型ウィンドウマネージャ awesomeとXmonadの比較 – ナレッジエース

と言いましても、今さらXnomadに乗りかえる気力もHaskellを学ぶ意欲もなかったので、awesomeで何とかすることにしてみました。

awful.rules.rulesで開く位置を固定する

まず、アプリがどこで開くかが決まってないのが良くないです。どこで開くかルールを作るには awful.rules.rulesという変数を定義します。開き方はその中のpropertyオブジェクトで定義され、どのディスプレイのどのタグで開くか(tag)、フローティングで開くか(floating)、開いた時にフォーカスを移すか(swithtotag)などが指定できます。詳しくは公式wikiに詳しく説明があるので見ておくと良いと思います。

Reference

僕は次のような感じで設定してみました。ブラウザやファイラなどはサブディスプレイで開いて、メインではEmacsやその時折で必要なアプリを開くようにしています。

ここで指定するclassはxpropコマンドで知ることができます。
xprop | 美女リナックス
FAQ – awesome

run_or_raiseでアプリに瞬時にフォーカスを移す

awful.rules.rulesで開く位置は固まったのですが、次は開くのがまどろっこしいです。端末経由で開くのも面倒ですし、かと言ってdmenuなどのランチャで開く場合初回の起動は問題ないですが、既に開いているアプリを使いたい場合は使えないので、タイルの樹海から探す必要があります。awesomeの場合、これがすごく大変でディスプレイそれぞれで探す必要があるため、さらに面倒くささが増します。

こんな時に大変便利な機能がrun_or_raiseという機能(関数?)で特定のアプリについて、開いてない時は新しく起動して、起動している場合はそのアプリにフォーカスしてくれます。run_or_raiseについても公式wikiに詳しく書かれています。

Run or raise – awesome

というわけで、早速設定してみます。まずは以下のrun_or_raiseの関数をrc.luaにコピペします。公式wikiのコピペです。

後は任意のアプリをrun_or_raiseで起動するようにしておきます。参考までに僕の設定です。

これくらい設定するとマルチディスプレイでも快適に使えるようになります。