awesome
awesome のウェブサイト より:
- awesome は高度に設定可能な、次世代の X フレームワークウィンドウマネージャです。高速に動作し、拡張しやすく、GNU GPLv2 ライセンスを使っています。awesome はパワーユーザーや開発者など、日常的に PC を使い、きめ細かいグラフィカル環境を求めている全ての人をターゲットにしています。
インストール
awesome パッケージをインストールしてください。開発版を使うには、AUR の awesome-gitAUR をインストールしてください。開発版は不安定で、設定 API が異なっている可能性があります。
xinitrc から awesome を起動するには、~/.xinitrc
に exec awesome
を追加してください。パッケージに含まれている xsession ファイルを使用する場合は、ディスプレイマネージャを見てください。
KDM
root で作成:
/usr/share/apps/kdm/sessions/awesome.desktop
[Desktop Entry] Name=Awesome Comment=Tiling Window Manager Type=Application Exec=/usr/bin/awesome TryExec=/usr/bin/awesome
GNOME のウィンドウマネージャとして使う
GNOME には"すぐに使える"というアドバンテージがあります。awesome をビジュアルインターフェースとして使うために GNOME をセットアップすることもできますが、GNOME がバックグラウンドで動いているということはあなたのプレッシャーになるかもしれません。GNOME 3 を使っているならば、シンプルに awesome-gnomeAUR をインストールして、GDM でログインするときに "Awesome GNOME" セッションを選ぶということもできます。詳しくは awesome wiki を見て下さい。
XFCE
Xfce#デフォルトウィンドウマネージャを見てください。
設定
Awesome にはすぐに使えるデフォルト設定がありますが、遅かれ早かれあなたは設定を変更したくなるでしょう。lua ベースの設定ファイルが ~/.config/awesome/rc.lua
にあります。
設定ファイルを作成
まず、以下を実行して次のステップで必要なディレクトリを作成します:
$ mkdir -p ~/.config/awesome/
コンパイルした時はいつでも、awesome は ~/.config/awesome/rc.lua に含まれている全てのカスタム設定を使おうとします。デフォルトではこのファイルは作られないので、最初にテンプレートファイルからコピーしてくる必要があります:
$ cp /etc/xdg/awesome/rc.lua ~/.config/awesome/
awesome がアップデートされると設定ファイルのシンタックスはしばしば変更されます。よって、awesome に問題が起こったり、設定を変更しようとする時は、上のコマンドを繰り返すことを覚えておいて下さい。
awesome の設定について詳しくは、awesome のドキュメントの設定セクション を見て下さい。
設定のサンプル
rc.lua のサンプルは以下にあります:
- https://github.com/setkeh/Awesome-Laptop-3.5 - Setkeh の 3.5 の設定。
- http://awesome.naquadah.org/wiki/User_Configuration_Files - awesome ホームページに載っているユーザー設定コレクション。
拡張
awesome (3.5+) にはいくつか拡張が存在します:
拡張 | 機能 |
---|---|
開かれているクライアントを一望する | |
動的タグ | |
ポップアップ通知 | |
追加 ウィジェット | |
インスタンスが存在しない場合にプログラムを起動、またはジャンプ |
キーボードレイアウトの変更
awesome wiki や Xorg でのキーボード設定を見て下さい。
テーマ
Beautiful という lua ライブラリを使うことで awesome にテーマを適用するのに外部ファイルを使うことができるようになります。rc.lua
を修正せずに動的に awesome のカラーや壁紙を変更できるためとても便利です。
デフォルトのテーマは /usr/share/awesome/themes/default
です。これを ~/.config/awesome/themes/default
にコピーして rc.lua
の theme_path
を変更してください。
beautiful.init(awful.util.getdir("config") .. "/themes/default/theme.lua")
壁紙
Beautiful が壁紙を管理できるので、.xinitrc
や .xsession
などのファイルで壁紙を設定する必要はありません。またテーマごとに特定の壁紙を使うようにすることもできます。
Awesome バージョン 3.5 では awsetbg コマンドが存在しません。代わりに gears モジュールを使います。theme.lua
で壁紙を設定するには:
theme.wallpaper = "~/.config/awesome/themes/awesome-wallpaper.png"
壁紙をロードするには、rc.lua
に以下が記述されている必要があります:
beautiful.init("~/.config/awesome/themes/default/theme.lua") for s = 1, screen.count() do gears.wallpaper.maximized(beautiful.wallpaper, s, true) end
ランダムに背景画像を変えるには、[3] を rc.lua
(v3.5+) に追加してください。特定のディレクトリから自動的に画像を取得するには [4] を使って下さい。
Tips and tricks
wibox を表示・隠す
Modkey-b でデフォルトステータスバーの表示を切り替えるようマップするには (awesome 2.3 でのデフォルト)、rc.lua
の globalkeys に以下を追加してください:
awful.key({ modkey }, "b", function () myscreen = awful.screen.focused() myscreen.mywibox.visible = not myscreen.mywibox.visible end, {description = "toggle statusbar"} ),
printscreen を有効にする
awesome で PrtScr ボタンを有効にするにはスクリーンキャプチャプログラムが必要です。Arch リポジトリから簡単に使える Scrot がいいでしょう。
次を実行してください:
# pacman -S scrot
必要な依存ライブラリもインストールしてください。
次に PrtScr のキーの名前を調べます、ほとんど場合 "Print" ですが確認するに越したことはありません。
次を実行してください:
# xev
PrtScr ボタンを押すと、次のように出力されるはずです:
KeyPress event .... root 0x25c, subw 0x0, ... state 0x0, keycode 107 (keysym 0xff61, Print), same_screen YES, ....
上の場合、キーの名前は Print です。
さあ awesome の設定をしましょう!
globalkeys がある場所に次の Lua コードを加えて下さい:
awful.key({ }, "Print", function () awful.util.spawn("scrot -e 'mv $f ~/screenshots/ 2>/dev/null'") end),
また、上のコードでは ~/screenshots/ にスクリーンショットを保存します、あなたが保存したい場所に編集してください。
動的タグ
Eminent は小さな lua ライブラリで、wmii-スタイルの動的タグを簡単に使えるようにするためのモンキーパッチです。shifty とは違い、eminent は完全なタグシステムを提供することは目指しておらず、動的タグをできるだけシンプルに実装しています。実際、eminent ライブラリを使うのに、rc.lua を修正する必要は全くありません。eminent は自立して働きます。
Shifty は動的タグ機能の Awesome 3 拡張です。また、2つのシンプルな設定変数とキーバインドを設定するだけで、あなたをデスクトップのマスターたらしめる、設定に匹敵する素晴らしいクライアントを実装しています。
スペースインベーダー
Space Invaders は Awesome Lua API の可能性を示すためのデモです。
3.4-rc1 リリースからの Awesome パッケージには含まれていません。
Naughty ポップアップ通知
naughty についての awesome wiki ページを見て下さい。
ポップアップメニュー
awesome3 ではデフォルトでシンプルなメニューがありますが、メニューをカスタマイズすることも簡単にできます。ただし、あなたが 2.x の awesome を使っている場合は、awful.menu を見て下さい。
freedesktop.org メニューが作りたいのなら、awesome-freedesktop を見て下さい。
サンプル:
myawesomemenu = { { "lock", "xscreensaver-command -activate" }, { "manual", terminal .. " -e man awesome" }, { "edit config", editor_cmd .. " " .. awful.util.getdir("config") .. "/rc.lua" }, { "restart", awesome.restart }, { "quit", awesome.quit } } mycommons = { { "pidgin", "pidgin" }, { "OpenOffice", "soffice-dev" }, { "Graphic", "gimp" } } mymainmenu = awful.menu.new({ items = { { "terminal", terminal }, { "icecat", "icecat" }, { "Editor", "gvim" }, { "File Manager", "pcmanfm" }, { "VirtualBox", "VirtualBox" }, { "Common App", mycommons, beautiful.awesome_icon }, { "awesome", myawesomemenu, beautiful.awesome_icon } } })
awesome のウィジェット
awesome において、ウィジェットとはウィジェットボックス (ステータスバーやタイトルバー) に追加することができるオブジェクトのことであり、システムに関する様々な情報を表示できます。ウィンドウマネージャから情報を読むのに便利です。ウィジェットは簡単に使うことが可能でありながら柔軟性があります。 -- ソース Awesome Wiki: Widgets.
Wicked と呼ばれる広く使われているウィジェットライブラリがあり、MPD ウィジェット、CPU 使用量、メモリ使用量などの多くのウィジェットを提供します。詳しくは Wicked page を見て下さい。
awesome v3.4 で Wicked の代わりになるものとしては Vicious, Obvious, Bashets などがあります。vicious を使うのなら、vicious documentation も見るといいでしょう。
透過
Xorg#コンポジットを見て下さい。
awesome 3.5 では、ウィンドウ透過はシグナルを使って動的に設定することもできます。例えば、あなたの rc.lua
に以下を加えることができます:
client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus c.opacity = 1 end) client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal c.opacity = 0.7 end)
Conky
conky を使っていて、デスクトップの代わりに conky にウィンドウを持たせたい場合、~/.conkyrc
を次のように編集してください:
own_window yes own_window_transparent yes own_window_type desktop
上記のように設定していないと、全てのウィンドウが完全に透過してしまうなどの不可思議な現象が発生します。また、conky がデスクトップ上に透過ウィンドウを作成すると、awesome の rc.lua
で定義したアクションは conky が存在する場所では動作しないので注意してください。
wiboxes
Awesome 3.1 現在、wiboxes 用に擬似透過がビルドインされています。これを有効にするには、テーマファイルに (~/.config/awesome/themes/default
, /usr/share/awesome/themes/default
のコピー) 次のように色の部分に16進数の値を2つ加えて下さい:
bg_normal = #000000AA
"AA" が透明度になります。
Modkey + PgUp/PgDown
によって選択されたウィンドウの透明度を変更するために、community パッケージリポジトリにある transset-df を使って、以下のように rc.lua
を修正することもできます:
globalkeys = awful.util.table.join( -- your keybindings [...] awful.key({ modkey }, "Next", function (c) awful.util.spawn("transset-df --actual --inc 0.1") end), awful.key({ modkey }, "Prior", function (c) awful.util.spawn("transset-df --actual --dec 0.1") end), -- Your other key bindings [...] )
ImageMagick
imagemagick の display コマンドで壁紙を設定すると問題が起こるかもしれません、xcompmgr との互換性に問題があるためです。awsetbg に display を使うのは他のオプションを設定していないときだけにしましょう。habak, feh, hsetroot などの代わりのプログラムをインストールしてください (grep -A 1 wpsetters /usr/bin/awsetbg で他のオプションが見れます)。
Autorun プログラム
Awesome wiki の Autostart ページも見て下さい。
GNOME や KDE とは異なり、awesome は Freedesktop の仕様による autostart にセットされたプログラムを起動しません。しかし、awesome にはプログラムを起動するための機能が (Lua の標準ライブラリの関数である os.execute
に加えて) 少しばかりあります。GNOME や KDE のようにスタートアップで同じプログラムを起動するには、AUR から dex をインストールして rc.lua から dex を実行してください:
os.execute"dex -a -e Awesome"
スタートアップ時に awesome が起動するアプリケーションのリストをセットアップすることもできます。全てのコマンドの表を作成して、spawn をループで回します:
do local cmds = { "swiftfox", "mutt", "consonance", "linux-fetion", "weechat-curses", --and so on... } for _,i in pairs(cmds) do awful.util.spawn(i) end end
(os.execute
コマンドに '&
' を付けて実行呼び出しをすることもできますが、ちゃんとした spawn 関数を使ったほうがおそらくベターでしょう。)
実行していないプログラムだけを走らせるには、pgrep
で実行中のプロセスに同じ名前がない見つからないときだけプログラムを走らせるシェルコマンドと spawn を使いましょう:
function run_once(prg) awful.util.spawn_with_shell("pgrep -u $USER -x " .. prg .. " || (" .. prg .. ")") end
例えば、parcellite
プロセスが実行中でないときだけ parcellite
を実行するには:
run_once("parcellite")
テキストを awesome-client を使ってウィジェットに渡す
簡単に awesome ウィジェットにテキストを送ることができます。次のように新しいウィジェットを作ります:
mywidget = widget({ type = "textbox", name = "mywidget" }) mywidget.text = "initial text"
外部ソースからテキストをアップデートするには、awesome-client を使います:
echo -e 'mywidget.text = "new text"' | awesome-client
ウィジェットを wibox に追加するのを忘れないで下さい。
awesome のデフォルトと違うパネルを使う
あなたが awesome の軽量性と機能性を買ってはいるがそのデフォルトのパネルの見た目が気に入らないときは、xfce4-panel など異なるパネルをインストールできます。
インストールしたら rc.lua
の autorun セクションに追加してください(方法は割愛)。画面ごとに wibox を作成しているセクション (mywibox[s] = awful.wibox({ position = "top", screen = s })
から始まっているところ) をコメントアウトすることもできますが、特にその必要はありません。ただし次を実行して rc.lua にエラーがないかチェックすることは忘れずに行って下さい:
$ awesome -k rc.lua
また、ビルトインでないアプリケーションランチャー、Xfrun4 や bashrun などを起動するために、modkey+R
キーバインドを変えておくべきでしょう。Openbox のページのアプリケーションランチャーのところに例が載っています。rc.lua
に以下を追加するのを忘れないで下さい:
properties = { floating = true } }, { rule = { instance = "$yourapplicationlauncher" },
マウススクロールがタグを変えるのを防ぐ
rc.lua の Mouse Bindings セクションを次のように変更してください:
-- {{{ Mouse bindings root.buttons(awful.util.table.join( awful.button({ }, 3, function () mymainmenu:toggle() end))) -- }}}
メディアコントロール
(alsa-utils パッケージに含まれている) amixer と playerctl を組み合わせることでボリュームや再生をコントロールできます。rc.lua
設定ファイルのキーバインドセクションに以下を追加してください:
-- Volume Keys awful.key({}, "#122", function () awful.util.spawn("amixer -q -D pulse sset Master 5%-") end), awful.key({}, "#123", function () awful.util.spawn("amixer -q -D pulse sset Master 5%+") end), awful.key({}, "XF86AudioMute", function () awful.util.spawn("amixer -D pulse set Master 1+ toggle") end), -- Media Keys awful.key({}, "XF86AudioPlay", function() awful.util.spawn("playerctl play-pause") end), awful.key({}, "XF86AudioNext", function() awful.util.spawn("playerctl next") end), awful.key({}, "XF86AudioPrev", function() awful.util.spawn("playerctl previous") end)
トラブルシューティング
Xephyr を使って rc.lua をデバッグする
デスクトップを壊さずに rc.lua
をデバッグする好ましい方法です。まず rc.lua をコピーして新しいファイル、rc.lua.new
を作り、そのファイルに必要な修正を加えます。それから awesome の新しいインスタンスを rc.lua.new
を設定ファイルとして Xephyr 内で実行します (X の中で他の X クライアントウィンドウを動かす):
$ Xephyr :1 -ac -br -noreset -screen 1152x720 & $ DISPLAY=:1.0 awesome -c ~/.config/awesome/rc.lua.new
このアプローチの有利な点は、もし rc.lua.new
を破壊したときでも、現在の awesome デスクトップを破壊しないということです(全ての X アプリがクラッシュし保存していないファイルが失われることがない)。設定に満足したら、rc.lua.new
を rc.lua
に変えて awesome を再起動します。
2011年7月現在、以上のことは awmttAUR でも可能です。
ログファイル
LightDM を使っている場合、awesome はエラーのログを $HOME/.xsession-errors
に出力します。.xinitrc
を使って awesome を起動している場合、FAQ のエントリ が参考になるはずです。
Mod4 キー
Awesome は mod4
をリマップすることを推奨しており、デフォルトでは Win キーになります。何らかの理由で mod4
にマップされていない場合、xmodmap を使って何になっているのか確認してください。マッピングを変更するには、xev
を使ってマップされているキーのキーコードと名前を確認してください。そして、~/.xinitrc
に以下のように追記します:
xmodmap -e "keycode 115 = Super_L" -e "add mod4 = Super_L" exec awesome
ここでの問題は xorg インストールによってキーコード 115 が、間違って 'Select' キーとして認識されていることです。上記のコマンドはキーコード 115 を正しい 'Super_L' キーにマップし直します。
Mod4 キー vs. IBM ThinkPad
IBM ThinkPad には Windows キーがありません (Lenovo は ThinkPad のこの伝統を変えたみたいですが)。これを書いている時点で、デフォルトの rc.lua では Alt キーはコマンドのコンビネーションとしては使われていません、したがって Alt キーを Super/Mod4/Win キーの代わりとして使うことができます。これをするには、rc.lua を編集して:
modkey = "Mod4"
を次のように変えて下さい:
modkey = "Mod1"
Note: Awesome には Mod4 とシングルレターを使うコマンドが少しだけあります。Mod4 を Mod1/Alt に変えるとキーコンビネーションが重複してしまうかもしれません。そうならないように rc.lua ファイルを修正する必要があるかもしれません。
awesome の標準を変えたくないならば、キーをリマップをするという方法もあります。例えば、caps lock キーをあまり使わないなら、以下を ~/.Xmodmap に加えます
clear lock add mod4 = Caps_Lock
そしてこのファイルを(リ)ロードしてください。 これで caps lock キーが mod4 キーになり、標準の awesome 設定でもうまく動くでしょう。さらに、他の X プログラムでも同じように mod4 キーが使えるはずです。
未確認ですが、最近の xorg のパッケージのアップデートで二行目のマッピングが破壊されるときは以下のように置き換えることができます (レフト Super キーのない DasKeyboard で検証):
keysym Caps_Lock = Super_L Caps_Lock
Eclipse: メインウィンドウをリサイズ・移動できない
(mod4 + 右・左クリックを使って)メインウィンドウが移動・リサイズできない場合、workbench.xml を編集して fullscreen/maximized を false に設定し、幅と高さの数字をデスクトップ画面の大きさよりも小さくしてください。
scrot: キーボードショートカットを使ってマウスで選択した範囲のスクリーンショットが取れない
scrot を使用する場合、キーボードショートカットにマウス選択オプション (scrot -s
) を割り当てられない問題がおきます。解決するには、以下の行を rc.lua
に追加してください:
awful.key( { modkey, }, <shortcut>, function () awful.util.spawn_with_shell("sleep 0.5 && scrot -s") end)
YouTube: フルスクリーンが裏に表示される
[5] フルスクリーンモードにするとビデオがウェブブラウザの下に表示される場合、rc.lua に以下を追加してください
{ rule = { instance = "plugin-container" }, properties = { floating = true } },
Chromium には
{ rule = { instance = "exe" }, properties = { floating = true } },
コンソールクライアントを起動する
GTK ターミナル (例: LXTerminal) から呼び出されたコンソールアプリケーションは動作しません。URxvt は動作します。
コンソール出力をファイルに書き出す
端末から GUI アプリケーションを起動すると、アプリケーションによっては端末に大変多くのデータを表示することがあります。結果として、Awesome から起動すると、全てを Awesome が起動している TTY に出力することになり、端末が汚くなることが多々あります。こういったゴミ・アウトプットを削除するには、リダイレクトさせなくてはなりません。しかし、公式 FAQ で書かれているように awful.util.spawn
はパイプとリダイレクトをあまりうまく扱えません。
例として、Luakit の出力をテンポラリファイルにリダイレクトしてみましょう:
awful.key({ modkey, }, "w", function () awful.util.spawn_with_shell("luakit 2>>/tmp/luakit.log") end),
/usr/share/applications
から ~/.local/share/applications
にデスクトップファイルをコピーすると、Xdg-menu は重複したエントリを生成します。awk を使って同じ名前のエントリを排除することで解決できます:
$ xdg_menu --format awesome --root-menu /etc/xdg/menus/arch-applications.menu | awk -F, '{if (a!=$1) print $a; a=$1}' >~/.config/awesome/archmenu.lua
参照
- https://awesomewm.org/apidoc/documentation/90-FAQ.md.html - FAQ
- http://www.lua.org/pil/ - Lua プログラミング (第1版)
- https://awesomewm.org/ - awesome 公式ウェブサイト
- https://awesomewm.org/apidoc/ - awesome API ドキュメント
- https://bbs.archlinux.org/viewtopic.php?id=88926 - share your awesome!