Post Page Advertisement [Top]

menubarprogramxmobar

xmobarをおしゃれに設置する

xmobarは、xmonadと一緒に利用されることが多いステータスバー表示用プログラムの一つです。xmobarは自身にパソコンのステータスを調べるモジュールが内蔵されているため、他のメジャーなステータスバープログラムであるdzenと比べて扱いが簡単になります。また、xmonad側にも、xmobarを簡単に使うための関数が用意されおり、単純な連携は簡単に出来るように配慮されています。


xmobarの最新情報はhackage.haskell.orgにあります。しかし、マニュアルとして使う時は、xmobar.orgのほうが見やすいです。

使い方の基本

xmobarプログラムは、xmonadと別の単体プログラムなので、xmonadとは別に起動する必要があります。また、xmobarがxmonadのワークスペースの情報を表示するためには、xmonadから情報を受け取る必要があります。ですから、xmobarを利用するためには、まず、xmonadとの連携の設定を行う必要があります。そして、その次に、xmobarで何をどのように表示するかというxmobar自体の設定を行います。つまり、xmobarを使うためには、次の2つを行う必要があります。

  • xmonadとの連携を行う
  • xmobarの設定をする

xomoadとの連携を簡単に行う

xmobarを簡単に使いたい場合、xmonadには必要となる連携作業を既定値で自動的にやってくれる関数があるので、xmonad.hsに次のような設定を書き加えるだけでxmobarを使うことが出来ます。 xmobarを初めて使う場合は、まずは、これで始めてみましょう。


-- 普通の状態
main = xmonad def


↓↓ これを、次のように書き換えるだけです。↓↓


-- 必要なモジュールのインポート
import XMonad.Hooks.DynamicLog

-- xmonadにdefを渡す前にxmobarで処理する書式  
main = xmonad =<< xmobar def


xmobarrcの準備

xmobarの設定は、~/.config/xmobar/xmobarrcの設定ファイルで行います。以下の内容で、このファイルを準備しましょう。



xmobarrcでカスタマイズ

設定ファイルの構造は、key = value, key = value, key = value,…という内容がConfig{}で囲まれた構造です。


まず、設定の前半は、フォントやその色、バーの位置等の設定に関するものであり、直感的に把握しやすいものなので、そこから見ていきましょう。

font

日本語が使えて、しかも綺麗な見た目になるように、日本語の使えるTTFフォントを指定しましょう。Archlinuxの場合、otf-ipafontをインストールします。


$ sudo pacman -Syy otf-ipafont


そして、以下のようにフォント項目を設定すれば使えます。


font = "xft:IPAPGothic:size=14:antialias=true"


フォント項目に設定するフォント名の書き方は、fc-listの出力で、ファイル名の次にある項目です。カンマで区切られている場合は、複数が併記されているので、どちらか一つだけを書きます。

fgColor,bgColor等

カラーコードで指定します。設定の書式は簡単ですが、一番、頭を悩ますところです。やみくもに数値を入れて試して見るよりも、配色やカラーパレット等のキーワードでインターネット検索し、自分好みのバランスの取れた5色ほどの色の組み合わせを見つけ、それをbg,fgその他アクセント色と当てはめて行くかっこいい配色になります。

alpha

xmobarを半透明にすることが出来ます。このalphaに0から255までの数値を指定します。0が完全な透明で255が完全な不透明です。

border等

xmobarの周りにボーダーラインをつけることが出来ます。


TopB、BottomB、FullBでそれぞれ、下、上、全周を指示した上で、 borderWidthにボーダー幅をピクセル数で、borderColorにその色カラーコードで指定します。また、TopBの代わりにTopBM等、数値の引数を一つとって、それでボーダーラインとウィンドウのマージンを指定できるものもあるのですが、ボーダー関連は概して思ったとおりの枠がうまく描けません。ですから、僕の場合は、見本の通り、下側に1ピクセルだけ指定して、なんとなく立体的に見えるようにするためだけに使っています。


-- 下側に1ピクセルだけボーダーを書く
border = BottomB,
borderWith = 1,
borderColor = "#000000"


position

xmobarをどこに配置するかを指定します。通常は、TopかBottomで、指定します。しかし、xmobarでは、画面の横幅全体ではなく、一部だけにバーを配置することを指定できます。まず、topWに、左右寄せ、中央寄せの場所の指定(L,R,Cのどれか一文字)と、バーの長さをパーセントの数字の指定を渡すことで、場所を指定することができます。


-- 中央寄せで75%の長さ
position = TopW C 75



もう一つは、TopPに左からと、右からの距離をピクセル数で渡して位置を指定します。


-- 左から100ピクセル、右から200ピクセル
position = TopP 100 200


これらは、BottomWとBottomPを使って下端でも同様の指定が出来ます。

注目すべきtemplateとcommands

次の二つのkeyがxmobarの設定の要となります。

  • template
  • commands

templateは、ステータスバーのどこに何の情報を表示するかという配置を指定します。


commandsは、templateの中で使うコマンドの動作を制御するオプションを指示する項目です。


これら2つについては、それぞれを詳しく見ていきます。

template

改めてtemplateの設定部分を見てみます。


template = 
  " %StdinReader%}{| %cpu% | %memory% | %dynnetwork% %wi% | %battery% | %date% "


templateに渡す値は、一行の文字列として指定します。

特別な記号

まず、%記号で囲まれたものは、コマンドと呼ばれます。実際のxmobarでは、このコマンド部分がその実行結果に置き換えられて表示されます。次に、"}“記号と”{“記号があります。これは、内容の表示位置を決めるための記号です。”}“記号の左に書かれているものは左寄せに、”{“記号の右に書かれているものは右寄せになり、その間に書かれいるものは中央寄せになります。それ以外の文字は、書いたものがそのまま、xmobarに表示されます。”|"(縦棒)は、各情報の区切りのために書かれていますが、これは特別な意味があるわけではなく、ただ単に区切りとして書いているだけです。


とりあえず、見本にあるコマンドの位置を動かして自分の好きな並びに入れ替えたりすることで、templateの書き方の要領に馴染むことが出来ます。


次に、このtemplateの中では、htmlの様にタグをいくつか使うことが出来ます。

色を変えるタグ


template = "}<fc=#000000>僕のxmobar</fc>{"


いくつか細かな注意点を上げてみます。fcタグで指定するカラーコードを二重引用符等でくくると、エラーになります。fcタグがうまく行かない場合、まず、そこをチェックしてみて下さい。


次に、このfcタグで、コマンドを囲むことも出来ますが、コマンドの出力自体が、色指定をしている場合があるので、そのような場合は、指定した色にならない場合もあることを把握しておきましょう。


template = "<fc=#000000>%StdinReader%</fc>}{"


クリックでプログラムが起動


template = "}<action=`xclock`>%date%</action>{"


actionタグを使うと、xmobar上のその部分をクリックすることで、指定したプログラムの実行が出来ます。見本では、xmobar上の日付表示をクリックすると、xclockが起動するようになっています。シェルに渡したい文字列をバックスラッシュ記号で囲んでactionに渡します。


また、actionタグには、button要素があり、これに数字を渡すことで、マウスボタンの指定が出来ます。指定しない場合は1を指定したことになります。通常の2ボタンマウスなら、1で左クリック、3で右クリックを指定できます。また、見本のように、actionタグを入れ子にすることも出来、この見本の場合、左クリックでxclockが、右クリックでxdaliclockが起動します。


template = "}<action=`xclock`><action=`xdaliclock` button=3>%date%</action></action>{"



これらの見本を実際に試してみたい場合は、xclockとxdaliclockをインストールしましょう。


$ sudo pacman -Syy xdaliclock xorg-xclock


フォントを変える

最後は、フォントを指定するfnタグを見てみます。


xmobar上での文字の表示は、このタグを使って複数のフォントを切り替えて表示が出来るようになっています。更に、この機能を利用して、必要な場所でのみAwesome Icon等のシンボルを組み込んだフォントに切り替えることで、豊富な図形を簡単に綺麗に表示させることが出来ます。


xmobarは、もともとiconタグを使って、iconの表示も出来るのですが、呼び出せるアイコンファイルの形式がxbmかxpmに限定されていて、あまり使い勝手がよくありません。もし、ミニマリスティックな雰囲気を重視して、これらのアイコンを使いたい場合には、これらiconは、githubのdzenソースの中にも見つけることが出来るので、それを活用してみて下さい。


しかし、一方で、インターネット等でよく使われるAwesome icon等のフォント版がarchlinuxのパッケージにも用意されています。これを利用することで、アイコンではなく、シンボルをフォントでxmobar上に表示すると綺麗に表示することが出来ます。


まずは、"ttf-nerd-fonts-symbols-mono"パッケージをインストールします。また、フォントビューアーアプリとして"gucharmap"パッケージもインストールしましょう。


$ sudo pacman -Syy ttf-nerd-fonts-symbols-mono gucharmap


インストールできたら、早速、gucharmapを起動します。


$ gucharmap


左上のフォント選択リストで、"Symbols Nerd Font"を探します。


次に、メニューバーのViewで「by Unicode Block」を選択してから、左側の一覧の一番上のALLを選びます。これで、このフォントに入っているすべての文字を見ることが出来るようになります。


スクロールして、どんな文字(シンボル)があるのか、眺めて下さい。その際、選択されている文字の番号が一番下に表示されていることを把握して下さい。しかし、実際眺めてみると、どんなシンボルがあるのか多すぎて分かりません。例えば、ArchLinuxのロゴがこのフォントの中にあるのですが、見つける事が出来るでしょうか?めちゃめちゃ苦労するはずです。

そこで、以下のサイトを活用します。


https://www.nerdfonts.com/cheat-sheet


検索窓に"archlinux"と打ち込んで、検索すると結果が表示されます。その中にHEXとして表示される数字があります。archlinuxのロゴの場合"f303"です。





これをgucharmapで下に表示される番号を頼りにして、f303を探してみましょう。見つかったら、その部分をダブルクリックすることで、一番下の入力ラインに文字を取り込むことが出来ます。また、このエリアの文字はそのままコピーできます。


ここで、このarchlinuxのロゴをコピーしてターミナル等に貼り付けてみて下さい。何か別の漢字(亀みたいな電みたいな)で表示され、若しくは、空白で全く何も表示されないで、ロゴは表示されません。しかし、今は、それで大丈夫です。まずは、サイトでお目当てのシンボルを見つけ、その番号からそのシンボル文字をgucharmapで探し、それを選択することでその文字自体をコピーできる事を覚えましょう。


ここからいよいよ、xmobarでの設定です。


xmobarでは、複数のフォントを登録して使い分けることが出来ます。


templateの中の文字列は、通常、fontで設定したフォントで表示されますが、fnタグを使って、additionalFontsに登録してあるフォントに切り替えることができます。まず、この切り替えるフォントとして、先程インストールしたNerd FontをadditionalFontsに登録します。


additionalFonts = ["xft:Symbols Nerd Font:size=14"]


次に、templateの中でfnタグを使います。


template = "}<fn=1>ここにシンボルを表す文字を入れる</fn>{"


fnに数字を渡すことで、additionalFontsの何番目に登録してあるかを指定します。今は、additionalFontsには1つしかありませんので、1を渡せば、Nerd Fontを使ってくれます。


では、上の見本で「ここにシンボルを表す文字を入れる」と書かれている部分に、archlinuxロゴを表す謎の漢字をgucharmapからコピーアンドペーストして下さい。


設定ファイル上では、謎の漢字、若しくは、何も表示されていないかもしれませんが、xmobar上では、ちゃんとNerd Fontで描画されるのでarchlinxのロゴになります。





vimを利用している場合、わざわざgucharmapを使わなくても、icon検索ページ等でシンボルの番号(Unicode)さえ分かれば、直接Unicode番号を指定して文字を打ち込むことも出来ます。vimの入力モードでCtrl+vして、uf303という風に、"u"に続けて番号を打ち込めば、その場でそれに対応する文字が打ち込まれます。

commands

templateの中で、%記号で囲むコマンドを使いました。このコマンド各々の設定を行うのが、commandsです。


commandsは、設定項目が長く見通しが悪いので、まずは、どのような書式になっているのかを把握します。もう一度、見本の設定をよく見て下さい。commandsには、一番外側で[と]のカッコに囲まれ、その中にRnuというキーワードで始まる個々のコマンド設定内容がカンマで区切られて記述されています。例えば、CPUにかかるコマンドの設定は、次のようになっています。


Run Cpu [] 60


Cpuの次にある[]の中身は省略しています。
次は、Memoryコマンドです。


Run Memory [] 60


このように、commandsへの登録の仕方は、カンマで区切って各々のコマンドの設定をしていきます。


ここでまず、commandsで設定している各コマンドと、templateの中に書き込む%記号で囲まれた各コマンドが1対1で対応していることを理解しましょう。Run Cpuで始まる設定は、templateの%cpu%に対応し、Run Memoryで始まる設定は、templateの%memory%に対応します。つまり、templateで使いたいコマンドの設定のみをcommandsで行えばよいわけです。


次に、まず、Run Cpu の設定に着目します。


Run Cpu [ "--template" , "CUP: <total>%"
        , "--minwidth" , "3"
        , "--Low"      , "30"
        , "--High"     , "80"
        , "--low"      , "#C2E7DA"
        , "--normal"   , "#1A1B41"
        , "--high"     , "#FF9F1C"
        ] 60


まず、Runキーワードで始まります。そして、次にある"Cpu"というのが、コマンド名です。


その次の[]は、引数を表すリストです。引数識別子とその値をそれぞれ文字列として並べたリストになっています。最後は、このコマンドで情報更新する間隔です。1は10分の1秒になるので、60を指定すれば6秒毎に情報を更新します。

さて、引数リストの中には沢山の事が書かれていますが、まず、設定の中心になるのが、"–template"引数です。そして、引数名の次の項目が、その引数の内容になっています。


"--template", "CPU: <total>%"


ここでまた、templateが出てきましたが、当然、上の方で説明したtemplate="…“とは、別のtemplateです。しかし、書くべきことは、同じような内容になっています。このコマンドで設定するテンプレートで、template="…“項目の中に記載される%cpu%で何を表示するのかを設定しています。ここではと<total>なっている部分が、その時のCPUの稼働率情報に置き換えられることになります。コマンド引数のテンプレートでは”<>"記号で囲まれたコマンドが情報に置き換えられます。


そして、それ以外の部分は、template="…"の時と同じように、そのままの文字が表示されるので、"CPU:“や”%“の部分はそのまま表示されます。さらに、template=”…"で説明したタグを利用して、フォントやその色を変えたり、何かを実行させたりするようにも出来ます。


さてここで、自由にカスタマイズする上で知らなければならない重要な事は、<total>の様なコマンドは、他にどんなものがあるのか?ということです。他人のxmobarrcファイルを色々とみて、コピペするのもありですが、何が出来て何が出来ないのかを正確に知るには、xmobarのマニュアルを参照するのが一番です。

xmobar.orgの読み方


https://xmobar.org/


xmobarのマニュアルとして、このxmobar.orgを参照して下さい。


早速ページを訪れると英語ばかりで、そっと閉じてしまう人がいるかもしれませんが、このページの読み方のコツさえ覚えれば、英語は怖くありません。


このページの一番始めには、目次が書かれています。その目次の中の"5.6 System Monitor Plugins"という項目に着目して下さい。


ここまでコマンドと呼んでいたものは、システムの情報を得るためのプログラムであり、このマニュアルの中では、システムモニタプラグインと呼ばれています。つまり、この5.6章のひとつひとつが、コマンドの使い方の説明の項目になっています。


続いてこの章の中に"5.6.11 Cpu Args RefreshRate”という項目があります。この項目が、先に見ていたCPUコマンドの説明項目です。


ここで、まず、項目名である"Cpu Args RefreshRate"に着目して下さい。なにやら英語の項目が書いてあるように見えがちですが、実はそうではありません。


この項目名は、コマンドを設定する書式を示しています。


commands設定の書式は、必ず、"Run"キーワードから始まります。その後に何を書けばよいのかをこの項目名で説明しています。これを具体的に見ると、CPUコマンドを使う場合には、まず、"Cpu"という文字列を書き、次にArgs、即ち引数リストを[]使って書き、最後に、RefreshRateとして情報更新間隔を数値で書くことを指示しています。

つまり、まずは、目次の項目の並びを見ると、xmobarにはどんなコマンドがあり、それを設定するためにはRunキーワードに続けてどんな書式で何を書けばよいかが分かるようになっているのです。

さて、注意してほしいのは、わざわざ項目名でその書式をコマンド毎に説明している通り、設定書式は、全てのコマンドで同じではありません。例えば、"5.6.8 Wireless Interface Args RefreshRate"というふうに、コマンド名の後ろに"Interface"という引数が必要なコマンドもあります。実際に、xmobarrcの見本を見返して下さい。


Run Wireless "" [] 60


Wirelessコマンドの設定の部分にはは、Interfaceとして"“の空文字列が渡されています。ここでは、”"というふうに、空文字列を渡すと、自動的にインターフェイスを決定してくれるようになっているので、わざと具体的な"wlan0"等の文字列を渡さないようにしています。


では、"5.6.11 Cpu Args RefreshRate”をクリックして該当部分の説明を開いてみましょう。マニュアルでのコマンドの説明は、どのコマンドでも書かれている項目自体はほぼ同じです。まずは、重要なものから把握しましょう。

tmpelate=に書くコマンド名

“Aliases to cpu"と書かれています。この"Aliases to"に続く"cpu"というキーワードが、template=”…"の中で%記号で囲って使えるコマンド名になります。大文字小文字の違いに気をつけましょう。

–templateに書くコマンド名

次に"Variables that can be used with the -t/--template argument:“と書かれいていますが、これは、「–template引数で使うことが出来る変数は次のとおりです」という意味です。そして、それに続いて”total, bar, vbar, ipat, user, nice, system, idle, iowait“と書かれています。つまり、コマンド設定テンプレートの中で”<>"記号で囲んで使えるコマンドの一覧です。上で使っていた"total"もここに書かれています。

さてこのコマンドは、置き換えられる表示にいくつかのパターンがあります。どのモニターコマンドであっても、"bar"は、文字を組み合わせた横向きの棒グラフで表示し、vbarは大中小3パターン程の簡易で小さな縦型棒グラフで表示します。また、ipatは、各モニタコマンド毎に決められている別の引数(Cpuの場合は、Argsで説明している–load-icon-pattern)で8パターンまでのアイコンを決まった書式で設定しておき、アイコンを動的に表示させる機能です。

では、次に進んでみます。

色変化の引数

これら表示される情報は、数値でパソコンの状態を教えてくれるものですが、その数値によって表示色を変化させることが出来ます。もういちど、Run Cpuの引数に着目します。

  • –Lowで示すより下の数値の時、–lowの色になります。
  • –Hightで示すより上の数値の時、–highの色になります。
  • LowとHightの間のときには、–normalの色が使われます。

この設定は、どのコマンドの引数でも使われる設定です。

Battery

最後に、Batteryの項目は、引数の構造が少し複雑なので見ておきます。"5.6.14 BatteryP Dirs Args RefreshRate"を参照します。コマンド引数の説明は、BatteryPとBatteryで同じです。


–templateには、見本では<actstatus>のみが入っています。


さて、ノートパソコンの場合、電源をつないだり、外してバッテリー駆動したりします。actstatusコマンドは、その場合分け毎の表示を行ってくれます。


引数にある、"-o","-O","-i"は、それぞれ、「電源を外した状態」、「電源をつないだ状態」、「電源をつないで満タンになった状態」に対応する、テンプレートを個別に与えるようになっています。すなわち、この3つの引数にも、left, leftbar, leftvbar, leftipat, timeleft, watts, acstatusのコマンドを使ったテンプレート書式が使えるということです。そして、それらのうちの一つが状態に応じて選択され、–templateの<actstatus>に置き換わります。

システムプラグイン以外のコマンド設定

まず、重要なのが、“Run StdinReader"です。xmonadの情報を受け取るコマンドです。設定項目はありませんが、commandsのリストに必ず忘れずに書いておかないといけません。template=”…"で使うエイリアス名は%StdinReader%です。


時刻用のコマンドは、 “5.8.3 Date Format Alias RefreshRate"で示されている通り、Args項目がありません。その事を踏まえて、見本を見て下さい。時刻のフォーマット書式は、man dateでも調べられる一般的なものです。この設定項目の"date"で指定する文字列が、tenplate=”…"で使う、エイリアス名になります。自分で好きなエイリアス名がつけれます。最後は、refreshrateです。

0 件のコメント:

コメントを投稿

Bottom Ad [Post Page]