~nabeken/diary/

Gentoo Linux(6年くらい)とFreeBSD(1年くらい)とOpenBSD(新参者)を使う日々。


IHANet BGP peering overview

今日からはじめるawesomeチュートリアル (3.4版)

Posted on Thu Mar 03 22:01:40 +0900 2011 by nabeken

今日からあなたもawesomeで快適ウインドウマネージャ生活!

awesomeとは

awesome とはDebian開発者でもあるJulien Danjouさんが2007年からdwmをベースに開発を開始した tiling window manager (タイル型ウインドウマネージャ)です。 作者はawesomeを a highly configurable, next generation framework window manager (高度にカスタマイズ可能な次世代のフレームワークウインドウマネージャ)と 謳っています。事実、ユーザはLuaによってウィンドウマネージャの挙動を制御することができます。

タイル型ウインドウマネージャの一般的な特徴は 日本タイルのWiki を参照してください。

awesomeの主な特徴:

  • たくさんの Freedesktop.org 標準を実装。
    • システムトレイに格納されるアプリケージョンも問題なく動作。
  • XRandR, Xinerama 対応。
  • マルチディスプレイ環境でも問題なし。
  • 設定ファイルにLuaを採用。
    • プログラマブルで自身で拡張可能。

2010年以降、開発ペースは落ちついており安定期に入っていると言えます。

インストール編

awesome のバージョンは2系と3系が存在します。2010年以降のディストリビューションであれば3系が使えるためバージョンを心配する必要はなくなりました。 awesome の2系の使用はお勧めしません。

Debian

JulienがDebian開発者ということもあり、彼自身がパッケージングしています。2011年3月現在、Debianにおけるバージョンは以下の通りです。

安定版 (squeeze)
3.4.6
テスト版 (wheezy)
3.4.9

インストールは apt-get から行なえます。

# aptitude install awesome

インストール後、ログアウトするとディスプレイマネージャのセッションでawesomeが選択できます。

Ubuntu

Ubuntu 10.10 (maverick)ではawesome 3.4.5が使用できます。Debian同様、インストールは apt-get から行えます。

# apt-get install awesome

インストール後、ログアウトするとディスプレイマネージャのセッションでawesomeが選択できます。

Gentoo

Gentooでは最新リリースがPortageツリーに入っています。

マスクなし
3.4.8
マスクあり
3.4.9

通常は3.4.8をインストールすることになるでしょう。

# emerge awesome

インストール後、ログアウトするとディスプレイマネージャのセッションでawesomeが選択できます。

awesome 体験編

このチュートリアルを印刷するか、もしくは別のパソコンで開いて、見ながら試してください。 VMwareやVirtualBoxなどの仮想化環境でawesomeを試すのもいいと思います。本チュートリアルでは、awesome 3.4に準じますが、 設定ファイルが一部異なるだけで、ほとんどは3.3にも当てはまります。

Mod4 キー

awesomeのキーバインドのprefixはMod4キーです。通常、このキーは左側のWindowsキー、または Command キーです。 この設定は変更できますが、awesome側はMod4のままで、xmodmapを使い、特定のキーをMod4に変更するのが得策です。 スペースキーの左隣りが無変換キーの人は

$ xmodmap -e 'keysym Muhenkan = Super_L'

で、無変換キーを左の Windows キーに割当てられます。英字配列のMacBookだと、Commandキーがちょうどいい位置にあります。 すばらしいですね。みなさん英字配列にしましょう。

Lesson 1: ターミナルを起動!

まずはターミナルを起動しましょう。ここでは未設定なので、xtermが起動します。

  • Mod4-Return (ターミナルを起動する)

ウインドウが最大サイズで現れたと思います。

$ date | less

date コマンドを実行して時刻を記録しておきましょう。ウインドウがどのように移動したかを追跡します。 もう1つターミナルを起動しましょう。

  • Mod4-Return (ターミナルを起動する)

初めに開いたウインドウがどうなったかを確認してください。ここで、もう1度 date | less を実行してください。 ウインドウが現れた後、どのウインドウにフォーカスが当たったかを確認してください。新しいウインドウにフォーカスが移動しているはずです。 また、ウインドウは縦に分割されたはずです。古いウインドウがどこに移動したかも確認してください。右へ移動したはずです。

しつこいですがもう1度ターミナルを起動します。

  • Mod4-Return (ターミナルを起動する)

同じく、 date | less を実行し、どのようになったか確認してください。一番古いウインドウは右下へ移動しているはずです。 一番新しいウインドウは常に左側に1つだけ出ることも確認してください。 この左側の領域を master と呼び、対して右側を slave と呼びます。作業領域が一番広いのがmasterです。通常はこのmaster領域で作業します。

awesomeの設定を編集しながら基本操作を覚えましょう。

Lesson 2: ウインドウサイズの制御

まず、masterのウインドウで q を押し、lessから抜けます。しばらくここで作業を行います。

とにもかくにも、ターミナルにxtermを使っている人は少数派だと思われるので、そこからカスタマイズします。

デフォルトの設定ファイルは /etc/xdg/awesome/rc.lua です。拡張子からもわかるように、設定ファイルは Lua を使っています。 Luaは軽量でアプリケーションの拡張用言語(アプリケーションそのものに組み込まれる)として広く使われています。 デフォルトの設定を自分のホームディレクトリへコピーします。

$ mkdir -p ~/.config/awesome
$ cp /etc/xdg/awesome/rc.lua ~/.config/awesome/

ユーザ用の設定ファイルは ~/.config/awesome/rc.lua です。

$ vi ~/.config/awesome/rc.lua

masterの領域が少し狭いと感じた人はウインドウを広げてみましょう。

  • Mod4-l (master領域にあるウインドウのサイズを増加させる)

1度押すとウインドウが広がります。広げすぎた場合は

  • Mod4-h (master領域にあるウインドウのサイズを減少させる)

これがウインドウサイズを変える方法です。この操作は頻出なので体に覚えさせましょう。マウスを使う方法もあります。

  • Mod4-右クリック+ドラッグ (フォーカスのあるウインドウのサイズを増減させる)

適当なサイズにできたら、編集に戻ります。

まず12行目の変数terminalを修正しましょう。私は "mlterm --sb=false" にしています。Ubuntu 系の人は "gnome-terminal" などがいいでしょう。

修正したら、awesomeを再起動します。

  • 上部一番左の a マークをクリック→awesome→restart

再起動するとウインドウサイズやフォーカスが元に戻ります。ターミナルも再設定したことなので、一旦すべて閉じましょう。 masterの vi を終了してください。ターミナルであれば、 exitC-d で閉じれますが、ここでは awesome 的な閉じ方を学びます。

  • Mod4-Shift-c (フォーカスのあるウインドウを終了する)

アプリケーションは基本的にこのキーバインドで閉じます。3つのウインドウすべてを同様に閉じましょう。

改めてターミナルを起動します。ここからは練習をかねてawesome内でFirefoxを立ち上げ、このページを見ながら操作してみましょう。 このページのアドレスは http://tinyurl.com/awesome-tutorial になります。

awesome 3.xからはランチャが内蔵されているので、

  • Mod4-r (awesome内蔵のランチャを起動する)

上部のタグ一覧の右にRun:というプロンプトが出ていることを確認してください。ここでfirefoxを入力し、 Return を押します。 (ちなみに、tabで補完もできます)

……では、awesome内のFirefoxからこのページを再び開いていただけだと思いますので、再開しましょう :-)。 (ただし、説明の都合上、最後まで紙などを併用してください…)

Lesson 3: タグを使う

上部左に数字が並んでいるのを確認してください。1から9の9つのタグがあらかじめ用意されています。タグは Gnome や KDE で言うワークスペースです。 ワークスペースと異なるのはそれぞれがマージできるという点です。たとえば、タグ1番と3番を表示する、またはタグ1、2、3、4を表示するなどです。

ブラウザは大きく見たい時と、ブラウザを参照しながらmasterで作業をしたい時のどちらにも対応できるように、ブラウザ専用のタグを決めます。 ここでは、2番のタグをブラウザ専用とします。

今のタグは1番であることを確認した上で、

  • Mod4-Shift-2 (フォーカスのあるウインドウを2番のタグへ移動する)

Firefoxが消え、ウインドウがなにもなくなったことを確認してください。Firefoxがきちんと2番のタグに移動したかを確認しましょう。

  • Mod4-2 (2番のタグへ移動する)

Firefoxが現われたはずです。ほっとしたところで、もとのタグへ戻りましょう。

  • Mod4-Esc (ひとつ前のタグへ移動する) または
  • Mod4-1 (1番のタグへ移動する)

どちらも結果は同じです。そろそろ、キーバインドを追加したくてうずうずしている人はここで設定してみましょう。 ターミナルを起動します。

  • Mod4-Return (ターミナルを起動する)

さて、ここからブラウザを見ながら作業をしたいと思います。この機能はとても重要なので体に覚えさせましょう。

  • Mod4-Ctrl-2 (今のタグと2番のタグを**一時的に**マージ(合併)する)

ブラウザがあらわれたはずです。フォーカスを移動する手段をまだ伝えていませんでした。フォーカスの移動は

  • Mod4-j (次のウインドウへフォーカスを移動する)
  • Mod4-k (前のウインドウへフォーカスを移動する)

Firefoxとターミナル間のフォーカスがきちんと移動しているか確認してください。 フォーカスをターミナルにして

$ man awesomerc

とすると、設定ファイルに関する man が読めま……と思ったらまだ整備されていないようです。Luaを使っているので直接読めということでしょうか。 とりあえず、manを閉じて、再び rc.lua を開きます。

$ vi ~/.config/awesome/rc.lua

設定ファイルについては、 Wiki にまとまっています。各用語について定義されているので、一通り目を通してください。

キーバインドはAPI(awesomeの基本APIはawful)のawful.key関数を介して設定します。

見ればなんとなくわかるとようになっています。例えば、これまでに使用したキーバインドは以下のように定義されています。

awful.key({ modkey,           }, "Return", function () awful.util.spawn(terminal) end),
awful.key({ modkey,           }, "l",      function () awful.tag.incmwfact( 0.05) end),
awful.key({ modkey,           }, "h",      function () awful.tag.incmwfact(-0.05) end),
awful.key({ modkey, "Shift"   }, "c",      function (c) c:kill()                  end),

第1引数が修飾キーで、第2引数がそれに対応するキーです。そして、第3引数が実行する関数です。基本的な操作はawfulというライブラリにまとめられています。

特定のコマンドを起動させたい場合は awful.util.spawn(command) を使います。1つ例を挙げると、

awful.key({ modkey, "Control" }, "m",     function () awful.util.spawn("/home/nabeken/bin/twitter-update.sh") end),

これを設定すると Mod4+Ctrl+m で今amarokで聞いている音楽をtwitterへポストしてくれます。(http://blog.guillermoamaral.com/2007/03/18/twitter-amarok-update/)

Lesson 4: ウインドウの移動

ここまでで、たどたどしいですが、なんとか使えるようになったはずです。しかし、あと1つ教えなければならないことがあります。 それはウインドウの入れ替えです。

これにはいくつか方法があります。今、ターミナルがmasterとします。Firefoxをmasterにしたい時は、まずフォーカスをFirefoxへ合せます。

  • Mod4-j (次のウインドウへフォーカスを移動する)
  • Mod4-k (前のウインドウへフォーカスを移動する)

Firefox上で、

  • Mod4-Ctrl-Return (フォーカスのあるウインドウをmasterへ移動する)

これで Firefoxがmasterに移動したはずです。フォーカスもFirefoxにあることを確認してください。

もう1つの方法は手動で入れ替える方法です。わかりやすくするために、もう1つターミナルを起動させます。

  • Mod4-Return (ターミナルを起動する)

ウインドウが3つになり、新たに起動したターミナルがmasterに来たはずです。ここで

  • Mod4-Shift-j (フォーカスのあるウインドウを次のウインドウと入れ替える)

をすると、ターミナルとFirefoxが入れ替わったと思います。そして、フォーカスはターミナルのままのはずです。もう1度するとどうなるでしょうか。

  • Mod4-Shift-j (フォーカスのあるウインドウを次のウインドウと入れ替える)

次はそのとなりのターミナルと入れ替わり、新たに起動したターミナルは右下に移動したはずです。もう1度するとどうなるか考えてみましょう。

最初の位置、つまりmasterへ戻ります。これと逆方向の操作が、

  • Mod4-Shift-k (フォーカスのあるウインドウを前のウインドウと入れ替える)

結果はそれぞれで試してみてください。これでとりあえず使うには問題ないはずです。今日の操作をまとめましょう。

Lesson 5: Tutorial 1 のまとめ

  • Mod4-Return (ターミナルを起動する)
  • Mod4-Shift-c (フォーカスのあるウインドウを終了する)
  • Mod4-j (次のウインドウへフォーカスを移動する)
  • Mod4-k (前のウインドウへフォーカスを移動する)
  • Mod4-Ctrl-Return (フォーカスのあるウインドウをmasterへ移動する)
  • Mod4-h (master領域にあるウインドウのサイズを減少させる)
  • Mod4-l (master領域にあるウインドウのサイズを増加させる)
  • Mod4-1 (1番のタグへ移動する)
  • Mod4-2 (2番のタグへ移動する)
  • ..... (n番のタグへ移動する)
  • Mod4-9 (9番のタグへ移動する)
  • Mod4-Ctrl-2 (今のタグと2番のタグを'''一時的に'''マージ(合併)する)
  • Mod4-Esc (ひとつ前のタグへ移動する) または
  • Mod4-Shift-2 (フォーカスのあるウインドウを2番のタグへ移動する)
  • Mod4-Shift-j (フォーカスのあるウインドウを次のウインドウと入れ替える)
  • Mod4-Shift-k (フォーカスのあるウインドウを前のウインドウと入れ替える)
  • Mod4-F1 (awesome 内蔵のランチャを起動する)

他のチュートリアルとしては

が簡単な例とともに画像付きで解説されています。設定ファイルは変わっていますが、キーバインドは変わっていません。こちらも併せてどうぞ。

Tutorial 2 の予定

awesome にはまだまだ機能があります。設定ファイルを読むとまだまだしらない機能があることがわかると思います。

Layout
今回、ウインドウの配置はmasterが左側にくるものでした。実はmasterが右、下、上にくるものもあります。 これらの配置方法を定めているのが layout という仕組みです。
Floating
Mplayer や gimp などのアプリケーションと awesome は一般的に相性が悪いです。 Mplayer はファイルによってウインドウサイズを替えたりするためです。 そのため、特定のアプリケーション、または layout としてこれまでの従来のウインドウマネーと同じ動作モードがあります。それが Floating です。
Widget
時計、タスクバー、システムトレイは Widget という仕組みで管理されています。これは自由に組合せることができ、 従来のタイル型ウインドウマネージャと awesome が一線を画く仕組みです。
Theme
フォーカスのあるウインドウは外枠に線が見えると思います。また、タスクバーなどの色も自由変えることができます。 これらの管理を beautiful ライブラリが担っています。外枠の色だけ変えたいという要求に答えることができる仕組みです。

これらを次回のチュートリアルで紹介できればと思います。

なお、本記事は github 上で公開しています。フィードバックがあれば編集、コミット後、pullリクエストをお願いします。(もちろん、指摘のみでも構いません)

更新履歴

  • reStructuredTextでリライト && OSC 2011/Tokyo Sprint向け修正 (Thu, 3 Mar 2011 22:01:40 +0900)