Linuxを日常的に使う実験ブログ

タイル型ウィンドウマネージャXmonadを使う(基礎編)

 2019-07-01

 2019-07-18

 Linux全般

こんにちは。今回のテーマは「タイル型ウィンドウマネージャXmonadを使う(基礎編)」です。タイル型ウィンドウマネージャとしてはAwesomeを紹介していましたが、同様なタイル型ウィンドウマネージャとしてXmonadも気に入って使っているので紹介したいと思います。ネット上に多くの設定例や情報があるのですが、今回は自分の備忘録も兼ねてまとめておきたいと思います。今回は基本的な使い方を扱います。詳細な設定とカスタマイズについてはタイル型ウィンドウマネージャXmonadを使う(カスタム編)をご覧ください。 [adsense02] 【目次】 Xmonadとは? Xmonadのインストール 設定とコンパイル 起動 再起動 Xmonadの終了 Xmonadの基本的な使い方 xmonad起動時時に他のプログラムを実行する 日本語入力環境について xmobarを使おう

Xmonadとは?

XmonadはHaskellで書かれてたタイル型ウィンドウマネージャであり、高いカスタマイズ性からエンジニアの間で人気があります。(i3, Awesome等いろいろあるのでXmonadが突出して人気というわけではないと思いますが…)軽量なデスクトップ環境や最小環境から自分なりのカスタマイズを行いたいユーザーにとっては使い勝手の良いウィンドウマネージャだと思います。ウィンドウが浮いた状態(フロート)の表示にも対応しているためGIMPのようなアプリケーションであっても使い勝手を損ねずに表示できます。 大きな特徴の1つとして設定ファイルをHaskellで書く必要がありHaskellの独特の文法に慣れない人からすると敬遠してしまうこともあるようです。また、バージョンを重ねるごとに新しい関数が追加されており、ネット上にある設定ファイルの情報には古いものもあるのでご注意ください。 図は現在の筆者のXmonad環境です。念入りにカスタマイズしている猛者と比べると大したことないですがこれでも十分使い勝手の良いデスクトップ環境として機能してくれています。

Xmonadのインストール

パッケージ名はディストリビューションによって異なる可能性があるので必ずパッケージマネージャによって調べてからインストールしてください。以下筆者が調べた限りでは以下のコマンドでインストール可能です。既dmenuやgmrunが入っている場合は適宜省略してください。また、xfce4-appfinderなどが入っている場合はキーバインドでアプリケーションランチャーをxfce4-appfinderに切り替えることも可能です。 Arch Linux


$ sudo pacman -S xmonad xmonad-contrib dmenu gmrun

Gentoo Linux


$ sudo emerge -av xmonad xmonad-contrib dmenu gmrun

Ubuntu/Debian


$ sudo apt install xmonad libghc-xmonad-dev libghc-xmonad-contrib-dev suckless-tools gmrun

ディストリビューション毎のインストール方法はコチラもご覧ください。

設定とコンパイル

xmonadの設定はHaskallというプログラミング言語で行います。Haskellを知らない人にはとっつきにくい面もありますが、Haskellの文法を熟知していないと設定が書けないわけでもありません。基本的な書き方を覚えて徐々に設定項目を増やしていけば良いと思いまおす。

最もシンプルな設定

まずは最もシンプルな設定を書いてみましょう。この設定では何もカスタマイズしないXmonadが起動します。ただの暗い画面ですのでちょっと困惑するかも知れません。 ~/.xmonad/xmonad.hs


import XMonad

main :: IO()
main = do
    xmonad defaultConfig

コンパイル

Xmonadは設定ファイルxmonad.hsを書き換える度に必ずコンパイルが必要です。以下コマンドでコンパイルしましょう。


$ xmonad --recompile

コンパイルが成功したら再起動しましょう


$ xmonad --restart

既にXmonadが起動している場合はAlt + qで再起動しても良いです。

起動

startxコマンドによる起動

起動スクリプトである.xinitrcを以下のように設定します。尚、.xinitrcを用いる場合はxmonadの起動時に起動したいプログラムをここに書いてしまってもOKです。今回のケースではIMのパラメータ設定、fcitxの起動、壁紙の表示処理を事前に行っています。 .xinitrc


export LANG=ja_JP.UTF-8
export GTK_IM_MODULE="fcitx"
export QT_IM_MODULE="fcitx"
export XMODIFIERS='@im=fcitx'
export DefaultIMModule=fcitx
xrdb ~/.Xresources
fcitx &
feh --bg-scale ~/path/to/wallpaper.png &
exec xmonad

GDMやlightDM等のディスプレイマネージャー(DM)を使用する

筆者はDMは使用せず多くのデスクトップユーザーはこちらが多いと思います。Arch Linuxで試した限りではLightDMを使用した際に自動的にXmonadは認識されていました。

再起動

Xmonadは設定ファイルを書き換え再コンパイルした場合は再起動しないと設定が反映されません。この場合は以下のコマンドかModキー(標準ではAlt) + qで再起動しましょう。


$ xmonad --restart

Xmonadの終了

何事も終わらせ方を知っておくことは重要です。Modキー(標準ではAlt) + shift + qで終了します。操作が分からなくなったり他のWMに切り替えたくなったときなどには焦らず終了しましょう。

Xmonadの基本的な使い方

xmonadは基本的にキーボード操作にて画面操作を行います。マウス操作もありますが、基本的な部分はキーマップを覚える必要があります。

マニュアルを表示する

困ったときには以下コマンドでマニュアルを表示しましょう。


$ man xmonad

Xmonadの基本的操作

以下に普段使うであろう操作を紹介します。modキーはデフォルトではAltキーです。

mod-shift-retern端末の起動
mod-pdmenuの起動
mod-shift-pgmrunの起動
mod-spaceウィンドウの表示アルゴリズムの変更
mod-shift-spaceウィンドウの表示アルゴリズムの初期化
mod-nウィンドウサイズのリサイズ
mod-tab, mod-j次のウィンドウにフォーカス
mod-shift-tab, mod-k前のウィンドウにフォーカス
mod-hマスターエリアの拡張
mod-lマスターエリアの縮小
mod-[1-9の数字キー]各ワークスペースに移動
mod-shift-[1-9の数字キー]ウィンドウを各ワークスペースに移動
mod-?, mod-shift-slashキーバイドの表示
mod-マウスボタン1ウィンドウをフローティングモードへ
mod-マウスボタン2ウィンドウをドラッグでリサイズ
mod-マウスボタン3ウィンドウをフローティングモードにドラッグでリサイズ
mod-qxmonadの再起動
mod-shift-qxmonadの終了

アプリケーションの起動

ターミナルが起動すればそれで良いという人もいるかと思いますが、大抵の場合はブラウザや音楽プレーヤー等を立ち上げると思います。このときにはMODキー+pでdmenuを立ち上げるかMODキー+shift+pでgmrunを起動します。このアプリランチャーからアプリを起動します。

xmonad起動時時に他のプログラムを実行する

.xinitrcでxmonadを起動する場合には.xinitrcにてxmonad起動前に起動したいプログラムのコマンドを記述すればよいのですがディスプレイマネージャで起動する場合にはそうは行きませんので設定ファイルにて起動プログラムを指定します。後述する壁紙や日本語入力用のプログラム起動の設定もここで行うことになります。

壁紙の設定について

Xmonadそのものの機能としては壁紙表示機能はありませんので、別のアプリケーションで画像を表示する必要があります。今回はfehを使用します。「startupHookを含んだ最低限のカスタマイズ」で紹介する設定方法で壁紙画像を設定してください。

startupHookを含んだ最低限のカスタマイズ

では、現状のxmonad.hsに少し手を加えましょう。最低限、MODキーの設定と端末プログラムの設定、startupHookについて設定しておきます。 ~/.xmonad/xmonad.hs


import XMonad

main :: IO()
main = do
    xmonad myConfig

myConfig = defaultConfig
    { -- ここに設定を記載 
      terminal = myTerminal
    , startupHook = myStartupHook
    , modMask = mod4Mask -- 有効にするとMODキーがWinキーに変更される
    }

myTerminal = "xterm"
myStartupHook = do
    -- 壁紙用
    spawn "feh --bg-scale ~/path/to/wallpaper.png"
    -- 以下、起動したいプログラムがあれば追加する

myStartupHook関数は必ずdo構文で書いてください。do構文で書くことで複数の起動プログラムを列挙できます。この設定で再コンパイル、再起動すると以下の画像のように壁紙が表示されます。

日本語入力環境について

デスクトップ環境を変更して気になるのが日本語入力環境ではないでしょうか?xmonadではfcitxも問題なく使えるので日本語入力環境はとくに困ることはありません。startxコマンドで起動する場合には.xinitrcファイルにパラメータの設定とfcitxの起動を書きます。(既に紹介済みのため例示は省略) LightDM等のデスクトップマネージャを利用する場合はfcitxは自動起動するはずです。詳細はArch wikiをご覧ください。

xmobarを使おう

xmonadではxmobarというステータスバーを利用できます。このxmobarを使用することで電池残量や時刻、CPUの稼働状況などを表示することが出来ます。ネット上には数多くの設定例があり、設定を変更してみると面白いですよ。

インストール

xmobarを使用するにはxmobarとxmonad-contribパッケージをインストールします。(Arch, Gentooではこの名前でした。他のディストロは異なるかも知れません。)尚、GentooではUSEフラグで”xft”を有効にしていないとxftフォントが使用できず悲惨なことになりますのでご注意ください。 ArchとGentooのコマンドを以下に紹介します。ディストロによってはパッケージ名が異なる場合がありますのでご注意ください。 Arch Linux


$ sudo pacman -S xmobar

Gentoo Linux


$ sudo emerge -av xmobar

Ubuntu/Debian


$ sudo apt install xmobar

Xmobarを使用する際の基本的な設定

ここでは最低限の設定でXmobarを使用する方法を考えます。カスタマイズについては次回扱います。 xmobarの設定は~/.xmobarrcファイルに記述しますが、まずは最小の設定でXmobarを表示しましょう。 ~/.xmobarrc


Config {font="monospace"}

xmobarを表示するには~/.xmonad/xmonad.hsを書き換えます。 ~/.xmonad/xmonad.hs


import XMonad
import XMonad.Hooks.DynamicLog

main :: IO()
main = do
    xmobar myConfig >>= xmonad

myConfig = defaultConfig
    { -- ここに設定を記載 
      terminal = myTerminal
    , startupHook = myStartupHook
    , modMask = mod4Mask -- 有効にするとMODキーがWinキーに変更される
    }

myTerminal = "xterm"
myStartupHook = do
    -- 壁紙用
    spawn "feh --bg-scale ~/path/to/wallpaper.png"
    -- 以下、起動したいプログラムがあれば追加する

これでxmonadを再コンパイルして再起動しましょう。以下のようなXmobarが出ればOKです。(画面上部です。画像が小さくて分かりづらいかも知れません。) xmobarのカスタマイズについても次回記事で扱う予定です。お楽しみに!

最後に

awesomeに引き続きタイル型ウィンドウマネージャの紹介でした。GNOMEやKDE等と比べると素の状態では貧弱なデスクトップ機能ですが、プログラミングが目的等の場合にはカスタマイズ性が高く非常に使いやすいウィンドウマネージャです。軽量でシンプルにも関わらずカスタマイズ次第で自分色にしていける環境はエンジニアにはぴったりなのではないでしょうか? この記事がお役に立てば幸いです。 【関連記事】 タイル型ウィンドウマネージャXmonadを使う(カスタム編) LinuxのGUI環境としてウィンドウマネージャーawesomeを使う [adsense]