awesome

提供: ArchWiki
2018年5月23日 (水) 00:51時点におけるKusakata (トーク | 投稿記録)による版 (同期)
ナビゲーションに移動 検索に移動

関連記事

awesome のウェブサイト より:

awesome は高度に設定可能な、次世代の X フレームワークウィンドウマネージャです。高速に動作し、拡張しやすく、GNU GPLv2 ライセンスを使っています。awesome はパワーユーザーや開発者など、日常的に PC を使い、きめ細かいグラフィカル環境を求めている全ての人をターゲットにしています。

目次

インストール

awesome パッケージをインストールしてください。開発版を使うには、AURawesome-gitAUR をインストールしてください。開発版は不安定で、設定 API が異なっている可能性があります。

起動

xinitrc から awesome を起動するには、~/.xinitrcexec 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 のドキュメントの設定セクション を見て下さい。

設定のサンプル

ノート: awesome の設定構文は定期的に変わるので、ダウンロードしたファイルに修正を入れる必要があるかもしれません。

rc.lua のサンプルは以下にあります:

拡張

awesome (3.5+) にはいくつか拡張が存在します:

拡張 機能
開かれているクライアントを一望する
動的タグ
ポップアップ通知
追加 ウィジェット
インスタンスが存在しない場合にプログラムを起動、またはジャンプ

キーボードレイアウトの変更

キーボードレイヤーを設定する方法は複数存在します。デフォルト設定ではレイアウトウィジェットが有効になっていますが、選択肢がないかぎり表示されません。一時的に複数のレイヤーを設定するには、以下のコマンドを実行:

$ setxkbmap -layout "us,jp"

awesome のキーボードウィジェットが表示され、クリックすることでレイアウトを切り替えることが可能です。ショートカットキーでレイアウトを変更したい場合、-option "grp:alt_shift_toggle" を追加してください。Shift+Alt を押すことでレイアウトが変更できるようになります。例:

$ setxkbmap -layout "us,jp" -option "grp:alt_shift_toggle"

レイアウトを設定する適切なコマンドを決めたら、#Autorun プログラムに追加してください。

また、(バージョン 4 からは) Awesome の設定で変更することもできます。以下の行を rc.lua のキーボードバインドのセクションに追加してください:

awful.key({ "Shift" }, "Alt_L", function ) mykeyboardlayout.next_layout(); end) 
awful.key({ "Mod1" }, "Shift_L", function ) mykeyboardlayout.next_layout(); end)

上記の設定を使うには setxkbmap コマンドか xorg で切り替えたいキーボードレイアウトを設定する必要があります。

Xorg でのキーボード設定も見てください。

テーマ

Beautiful という lua ライブラリを使うことで awesome にテーマを適用するのに外部ファイルを使うことができるようになります。rc.lua を修正せずに動的に awesome のカラーや壁紙を変更できるためとても便利です。

デフォルトのテーマは /usr/share/awesome/themes/default です。これを ~/.config/awesome/themes/default にコピーして rc.luatheme_path を変更してください。

beautiful.init(awful.util.getdir("config") .. "/themes/default/theme.lua")

テーマオプションについては [1] を参照してください。例えば隙間を追加するには、rc.lua のテーマセクションに以下を追加します:

beautiful.useless_gap = 5

壁紙

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

ランダムに背景画像を変えるには、[2]rc.lua (v3.5+) に追加してください。特定のディレクトリから自動的に画像を取得するには [3] を使って下さい。

rc.lua で壁紙を指定したい場合、テーマセクションに以下の行を追加してください:

beautiful.wallpaper = awful.util.get_configuration_dir() .. "path/to/wallpaper.png"

awful.util.get_configuration_dir()rc.lua のパスを返します。

ヒントとテクニック

wibox を表示・隠す

Modkey-b でデフォルトステータスバーの表示を切り替えるようマップするには (awesome 2.3 でのデフォルト)、rc.luaglobalkeys に以下を追加してください:

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'", false) 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 を使っている場合は、[4] を見てください。

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 プログラム

プログラムを自動実行するには、以下のコマンドでシェルスクリプトを作成してください:

$ touch ~/.config/awesome/autorun.sh

そして以下のコマンドで実行可能属性を付与してください:

$ chmod +x ~/.config/awesome/autorun.sh

エディタで autorun.sh を開いて以下の行を書き込みます:

.config/awesome/autorun.sh
#!/usr/bin/env bash

function run {
  if ! pgrep $1 ;
  then
    $@&
  fi
}

autorun.shrun program [some arguments] を追加することで自動実行するプログラムを追加することができます。run 関数は program のインスタンスが実行されていないか確認して、インスタンスが存在しない場合のみ program を起動します。autorun.sh を確認するには:

$ ~/.config/awesome/autorun.sh

問題がなければ、以下の行を rc.lua に追加してください:

.config/awesome/rc.lua
...
awful.spawn.with_shell("~/.config/awesome/autorun.sh")
...

自動起動も参照。

テキストを 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.luaautorun セクションに追加してください(方法は割愛)。画面ごとに 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({}, "XF86AudioLowerVolume", function ()
  awful.util.spawn("amixer -q -D pulse sset Master 5%-", false)
end),
awful.key({}, "XF86AudioRaiseVolume", function ()
  awful.util.spawn("amixer -q -D pulse sset Master 5%+", false)
end),
awful.key({}, "XF86AudioMute", function ()
  awful.util.spawn("amixer -D pulse set Master 1+ toggle", false)
end),
-- Media Keys
awful.key({}, "XF86AudioPlay", function()
  awful.util.spawn("playerctl play-pause", false)
end),
awful.key({}, "XF86AudioNext", function()
  awful.util.spawn("playerctl next", false)
end),
awful.key({}, "XF86AudioPrev", function()
  awful.util.spawn("playerctl previous", false)
end)

Steam キーボード

Steam コントローラから使用することができるオンスクリーンの Steam キーボードで文字を入力したときにフリーズすることがあります。入力を受け取るにはクライアントにフォーカスがあたっている必要があり、入力が正しく送信されるまでキーボードが待機するためです。手動で他のクライアントにフォーカスをあてるとそのクライアントに入力が送信され、次の文字が入力されるまでキーボードはフリーズした状態になります。

他のクライアントにフォーカスが移らないようにすることでキーボードを正しく動作させることができます。設定に以下のシグナルを追加してください (あるいは既存のクライアントのフォーカスシグナルに追記してください):

client.connect_signal("focus", function(c)
    if awful.rules.match(c, { name = "^Steam Keyboard$" }) then
        awful.client.focus.history.previous()
    end
end)

上記のように設定することでキーボードがフォーカスを受け取ったときに最後のクライアントにフォーカスが移るようになります。キーボード入力は Steam クライアントによって処理されフォーカスは必要ないため、テキストの入力は問題なく行うことができます。

トラブルシューティング

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.newrc.lua に変えて awesome を再起動します。

2011年7月現在、以上のことは awmttAUR でも可能です。

ログファイル

LightDM を使っている場合、awesome はエラーのログを $HOME/.xsession-errors に出力します。.xinitrc を使って awesome を起動している場合、FAQ のエントリ の "Where are logs, error messages or something?" が参考になるはずです。

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"
ノート: 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 に設定し、幅と高さの数字をデスクトップ画面の大きさよりも小さくしてください。

ノート: workbench.xml は <eclipse_workspace>/.metadata/.plugins/org.eclipse.ui.workbench/ にあり、編集する行は <window height="xx" maximized="true" width="xx" x="xx" y="xx"> です。

Netbeans: コード予測が間違ったスクリーンに表示される

ディスプレイをふたつ使っていて Netbeans でコード予測 (Ctrl + Space) を使用したときに、誤ったディスプレイのほうにコード予測が表示されることがあります。解決するには:

.config/awesome/rc.lua
awful.rules.rules = {
        ...
	{
		rule_matches = { -- Fix Netbeans
			class = {
				"sun-awt-X11-XWindowPeer", "NetBeans IDE 8.2"
			},
			name = {
				"win1"
			}
		}, properties = { screen = 1 } -- even with screen 1 here, this still works on the seccond screen, too (don't know why).
	},
        ...

}

IntelliJ: メニューが間違った位置に表示されたりウィンドウが開かない

GitHub issue #2204 を見てください。

解決方法:

.config/awesome/rc.lua
clientbuttons_jetbrains = gears.table.join(
    awful.button({ modkey }, 1, awful.mouse.client.move),
    awful.button({ modkey }, 3, awful.mouse.client.resize)
)

...

awful.rules.rules = {
        ...
	{
            rule = {
                class = "jetbrains-.*",
            }, properties = { focus = true, buttons = clientbuttons_jetbrains }
        },
        {
            rule = {
                class = "jetbrains-.*",
                name = "win.*"
            }, properties = { titlebars_enabled = false, focusable = false, focus = true, floating = true, placement = awful.placement.restore }
        },
        ...
}

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),

Xdg-menu によって生成されるメニューエントリが重複する

/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

Xfce4 で一部のショートカットキーが機能しない

以下のコマンドを実行して、"Super L" などの Awesome によって実行されるキーが重なっていないか確認してください:

$ xfce4-keyboard-settings

参照