愛と勇気と缶ビール

ふしぎとぼくらはなにをしたらよいか

軽快なawesome

awesomeとは何か

X Window System上で動くタイル型ウィンドウマネージャです。

タイル型ウィンドウマネージャとはなんぞや

いわゆる普通のウィンドウマネージャというのは、「フロート型」と呼ばれるものです。フロート型ウィンドウマネージャでは、右上のボタンやウィンドウの縁などを操作することでウィンドウの大きさの変更が可能です。また、ウィンドウ同士の重なりを許すこともフロー型の大きな特徴です。

対照的に、タイル型ウィンドウマネージャでは基本的にウィンドウ同士が重なることはなく、ウィンドウマネージャによってウィンドウの大きさが決定されます。もちろんユーザ側からウィンドウの大きさを変更することも可能です。マウスでも操作は可能ですが、基本的にはキーボードで円滑にウィンドウを操作することを目的としています。

ものによるかもしれませんが、今回の記事で対象としているawesomeでは少なくとも「この仮想デスクトップ(というかタグ)に関してはフロート型でやってね」とか「このアプリケーションが起動した時はフロート型で」という設定が出来ます。タイル型で配置されちゃったらイヤンなアプリケーションに関してもアフターケアはばっちり。

どんな人におすすめですか

  • 仮想デスクトップ(あるいはワークスペース)を普段からバンバン切り替えて作業してる人
  • Alt+Tabって少しホームポジションから遠いよね、っていう人(そういう人は他のキーにマッピングしてるかもしれませんが)
  • ネットブック等で画面が狭いので仮想デスクトップをバンバン使ってデスクトップ空間を有効活用したい人
  • 重厚なデスクトップ環境はいらん!軽いウィンドウマネージャがいいのよ!という人
  • なんか普通のウィンドウマネージャに飽きた人

なんでawesomeやねんと

  • ナウいらしいので
  • 初期状態でも結構使える
  • 設定ファイルがLuaらしいけど、別にLua分かってなくても書けそうなので(というか書ける)
  • Xlibの代わりにXCB使ってるのでちょっと速いかもね!
  • 柔軟さで言うとXmonadがよさげだけども…試してみた友人いわくHaskell分かってないと設定無理らしい?

インストール

Gentooだと普通に最新版(3.4系?)があるらしい。Ubuntu系だと9.10のaptには新しいやつがある。
今回俺が入れたのはUbuntu9.04ベースのCrunchBang Linuxなので、新しいのがaptの標準リポジトリにない。なのでPPAのリポジトリを追加する。これ↓

http://launchpad.net/~klaus-vormweg/+archive/ppa

aptのリポジトリの追加の仕方はリンク先に書いてあると思うので割愛。

参考

基本的なキーバインド等は調べればすぐ分かると思うので割愛。標準のMod4(Windowsキー)は使いにくいので無変換キーをMod4にするのがお勧め。

インストールした後は、下記URLを参考にガシガシ設定ファイル(~/.config/awesome/rc.lua)を書き換えていく。ArchのWikiの上から4分の1のあたりにある他の人の設定ファイルも参考になる。イチから書き直すのでなければLuaについては特に分かってなくても書ける。現に俺が調べたのは文字列の結合(Luaでは ..)だけ。

http://awesome.naquadah.org/wiki/Main_Page
http://wiki.archlinux.org/index.php/Awesome3
http://awesome.naquadah.org/wiki/Main_Page

標準の設定ファイルを見れば分かるように、rc.luaにはawesome起動時に表示されるものやらキーバインドやらが文字通り「全て」書いてある。なのである意味わかりやすい。(理想的には自分でセクションごとに小分けにした方がいいかも)

設定ファイルのデバッグ

ウィンドウマネージャの設定ファイルなので、設定をミスったまま起動するとずっこけて何もできない宇宙空間に取り残されたりする。なので、awesomeの設定ファイルをデバッグするために何はなくともまずXephyrを入れませう。Xephyrを使えばXの中でXをネストできます。各プラットフォームごとの入れ方は調べてくださいな。

でまあ、ArchのWikiに書いてあるように

Xephyr -ac -br -noreset -screen 800x600 :1
DISPLAY=:1.0 awesome -c ~/.config/awesome/rc.lua

Xephyrの上でawesomeを動かすことで設定ファイルをテストする。awesomeならずとも、Xの上で動くウィンドウマネージャの設定ファイルの動作確認はXephyrを用いると楽だと思う。ちなみに俺は面倒なので

alias awetest="Xephyr -ac -br -noreset -screen 800x600 :1 & sleep 1 && DISPLAY=:1.0 awesome -c ~/.config/awesome/rc.lua"

とした。

設定ファイルの簡単な解説

といってもそんなに大して凝った設定をしたわけでもない。以下awesome v3.4.3前提。

デフォルトの設定ファイル(/etc/xdg/awesome/rc.lua)から追っていくと

12行目
beautiful.init("/usr/share/awesome/themes/default/theme.lua")

テーマを変えたい場合、ここの"default"を書き換える。デフォルトだとskyとzenburnがある。

壁紙はとりあえず変えたいよねー、ってことで

local wallpaper_path = os.getenv("HOME") .. "/.config/awesome/smoke.jpg"
theme = beautiful.get()
theme.wallpaper_cmd = { "awsetbg " .. wallpaper_path }

を追加。smoke.jpgが壁紙にしたい画像ファイル。
別にこうしなくても変えられるかもしれない。俺が一旦ローカル変数を作ってるのは後でもっぺん使うから。

ちなみに、theme.luaの一番上のほうにはawesome上部のバーの色の設定が書いてある。

15行目
terminal = "x-terminal-emulator"

デフォルトで使うターミナルは当然指定したいところ。ここを変更する。

46〜53行目
for s = 1, screen.count() do
    -- Each screen has its own tag table.
    tags[s] = awful.tag({ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, s, layouts[1])
    for tagnumber = 1, 9 do
        awful.layout.set(layouts[1], tags[s][tagnumber])
    end
end

{1, 2, 3, ... }で各ワークスペース(タグ)の名前を指定している。なのでここをいじれば表示されるタグの名前が変わる。
ちなみに、各タグごとにウィンドウの配置の仕方を変えたい場合は

tags = {
  names  = { "www", "work", "remote", "float", 5, 6, 7, 8, 9 },
  layout = { layouts[1], layouts[1], layouts[1], 
             layouts[12], layouts[1],layouts[1], 
             layouts[1], layouts[1], layouts[1] }
}
for s = 1, screen.count() do
  -- Each screen has its own tag table.
  tags[s] = awful.tag(tags.names, s, tags.layout)
end

みたいな感じに、少し上で定義されているlayouts配列を利用する。この場合、4番目のタグだけをフロート型の配置にしている。

167〜276行目

この辺に、標準のキーバインドが全部書いてある。なので、変更したい場合や新しいキーバインドを追加したい場合はこの辺を見てちょこちょこっといじればいける。

Altは修飾キーに指定できない。あと、Lock(Caps Lock)は修飾キーに指定できるけど、Caps自体の機能もちゃんと発動してくれやがるのであんまりうれしくない。

基本的に、

awful.key({ modkey,            }, "Up",    function () awful.util.spawn("amixer set PCM 2%+")   end),

のように、awful.util.spawn("command")で特定のコマンドをawesomeから投げられる。この場合、Mod4 + Upを「音量2%ましまし」に割り当てていることになる。

288〜305行目

ここらで、「このアプリケーションは常にフロート配置で」とか「このアプリケーションはここのタグで起動して」という指定をしている。標準では、

    { rule = { class = "gimp" },
      properties = { floating = true } },

Gimpはフロートにしていってね!

俺の場合、

    { rule = { name = "VLC" },
      properties = { tag = tags[1][4] } },

VLCは4番のフロート型指定のタグに飛んでいってね!

などなど。アプリケーションのclassとかnameに関しては頑張って調べるしかない、かな。

最後の方
os.execute("command")

と書いておくことで、自動起動させたいアプリケーションを指定できる。
例えば、俺のS101だとキーボード入力中にタッチパッドが反応してうざいので

os.execute("syndaemon -i 1.0 &")

でキーボード入力後1秒間タッチパッドを無効にしている。これは、「タッチパッドの有効・無効をトグルする」みたいなコマンドを何かのキーに割り当てた方が便利かもしれない。

あと、xcompmgrやらhsetrootを併用することによってウィンドウの透過が出来るんだけど、せっかくの仮想デスクトップ切り替えの軽快さが失われてしまうのでオススメはしない。透過したいものってターミナルが主だと思うので、ターミナルの擬似透過などで済ますのが吉。

総評

  • タイル型を使うと、仮想デスクトップを含めたデスクトップ空間の使い方に関する意識が変わる
  • っていうか別にウィンドウの大きさをうにょうにょマウスで変えられる必要ってそこまでなくね?
  • Alt+TabやらC-A-Left/RightやらがMod4+keyに一元化されて便利
  • フロート型の配置もできるし上位互換だね!(←ちょっと言い過ぎ)
  • 軽い!
  • 狭い画面だとタイル型ってどうなん?と思ってたけど、むしろ狭い画面でも仮想デスクトップを駆使しやすくなることで使いやすくなる
  • awesome is awesome!


ちなみに今のawesomeはこんな感じ