openboxをカスタマイズする(2021年版)

久々,デスクトップ環境をopenboxのみにしてみました。やっぱシンプルでいい〜。

今年になってようやく気づいたことがあるので,2021年版です。2018年版はこちら。

silverbirch.hateblo.jp

メニュー

これが一番面倒です。素の状態で立ち上げると,右クリックしてもメニューにLog Outしかないなんてことも(今回がそうでしたw)。それではターミナルすら立ち上げることができません。他のデスクトップ環境下でメニューだけは作った方がいいですね。

メニューは~/config/openbox/menu.xmlを編集します。が,確か,今回はmenu.xmlすらなかったので,作成。

構造は,

<openbox_menu>

  <menu id="apps-accessories-menu" label="Accessories">

    <item label="ラベル">

      <action name="Execute">

        <command>command</command>

      </action>

    </item>

  </menu>

  ・・・・・・・・・・

<menu id="root-menu" label="Openbox 3">
  <separator label="Applications" />

  <menu id="apps-accessories-menu"/>
  <menu id="apps-editors-menu"/>
  <menu id="apps-graphics-menu"/>
  <menu id="apps-net-menu"/>
  <menu id="apps-office-menu"/>
  <menu id="apps-multimedia-menu"/>
  <menu id="apps-term-menu"/>
  <menu id="apps-fileman-menu"/>

  <separator label="System" />
  <menu id="system-menu"/>
  <separator />
  <item label="Log Out">
   <action name="Exit">
     <prompt>yes</prompt>
   </action>
  </item>
</menu>

</openbox_menu>

 みたいになっていて,

<menu id="root-menu" label="Openbox 3">・・・</menu>の間に,右クリックした際に表示されるルートメニュー,上の方にある<menu id="apps-accessories-menu" label="Accessories">・・・</menu>の間に,それぞれの項目のサブメニューを記述するのだろうというのは想像できます。

ただ,これを全部手作業でやるのは面倒です。ObmenuというGUIの設定ツールもありましたが,現在メンテナンスされておらず,フォーク?のObmenu3がAURにあります。とりあえず,それでよく使うアプリケーションはルートメニューにおいて,右クリック,左クリックのツーステップで起動できるようにしましょう!

手動で編集してもいいです。

<menu id="root-menu" label="Openbox 3">
 <separator label="Applications"/>
  <item icon="/home/example_user/.icons/macOS/apps/128/Terminal.png" label="Terminal">
   <action name="Execute">
    <execute>xfce4-terminal</execute>
   </action>
  </item>
  <item icon="/home/example_user/.icons/macOS/apps/128/file-manager.png" label="File">
   <action name="Execute">
   <execute>pcmanfm</execute>
  </action>
 </item>
 <menu execute="xdg_menu --format openbox3-pipe --root-menu /etc/xdg/menus/lxde-applications.menu" id="lxde-applications" label="LXDE-applications"/>

・・・・・・

全部のアプリを手動で登録するのは面倒なので,既存のLXDEなどのメニューからリストを取得して自動で表示させるようにします。

archlinux-xdg-menuパッケージをインストールする必要があります。

まず,不要なルートメニューは<!-- -->で囲ってコメントアウトしましょう。

<!-- <menu id="apps-accessories-menu"/>
<menu id="apps-editors-menu"/>
<menu id="apps-graphics-menu"/>
<menu id="apps-net-menu"/>
<menu id="apps-office-menu"/>
<menu id="apps-multimedia-menu"/>
<menu id="apps-term-menu"/>
<menu id="apps-fileman-menu"/> -->

次に,

<menu id="applications" label="Applications" execute="xdg_menu --format openbox3-pipe --root-menu /etc/xdg/menus/lxde-applications.menu" />

を挿入します。これは,/etc/xdg/menus/ディレクトリ内のLXDEのメニューを参照して,メニューを表示させるものです。私は,etc/xdg/menus/内のすべてのメニューファイルのパイプを作ってます。xfce4とlxdeをどちらも中途半端にインストールしてて,片方のメニューにしか出てこないアプリがあるためです。

そして,ルートメニューのSystem->Reconfigure Openboxを実行して,修正を反映させると,上記のようなメニューになります。

詳しくは,ArchWiki本家のドキュメントを参照してください。

オートスタート

~/.config/openbox/autostart に起動させたいアプリケーションを記述せよ,ということだそうで。

これだと,全部自分でオートスタートさせたいアプリを登録しないといけないのですが,サービスによっては,デスクトップ環境が自動で起動するように設定しているはずです,みたいなサービスについては,どれを自分でオートスタートに記述すべきなのかがわからず,漏れが出てきそうです。なんだか他のデスクトップ環境で普通に使えていたのが使えなかったりすると,openboxなんか面倒・・・という気持ちがもたげてもとのデスクトップ環境に戻ってしまいかねません。というか,私がそうでした。gnomeキーリングがうまく起動されてなくて,一度デスクトップ環境に戻してます。

日本語のウィキでは,XDGの項目にかかれていて,オートスタートに関して参照しているときには見落としがちな次の記載を発見。

アプリケーションを自動実行するのに、Openbox はローカルの ~/.config/openbox/autostart ファイルだけでなく、パッケージによってグローバルな /etc/xdg/autostart ディレクトリに自動的にインストールされた .desktop ファイルも読み込みます。python2-xdg[リンク切れ: パッケージが存在しません] は Openbox の xdg-autostart に必要です。

例えば、NetworkManager のアプレット (nm-applet) などをローカルで自動実行を行っていて、後で python2-xdg[リンク切れ: パッケージが存在しません] をインストールしていた場合、グローバルな XDG .desktop ファイルが読み込まれることになり、結果としてシステムトレイに2つアイコンが表示されてしまいます。したがって、python2-xdg[リンク切れ: パッケージが存在しません] を明示的にインストールしておいて、インストールしたときに自動的にアプリケーションが自動実行されるようにしておくのを推奨します。 

これ,XDGのとこじゃなくて,autostartのところに書いてよね。しかも,パッケージがリンク切れ・・・・。こんな大事なパッケージがメンテ放置されているとも思えなかったので,英語のウィキへ

openbox-session provides two autostart mechanisms: XDG Autostart (which only works if python-pyxdg is installed) and Openbox's own autostart mechanism.

Openbox's own autostart mechanism:

    sources /etc/xdg/openbox/environment
    sources ~/.config/openbox/environment
    runs /etc/xdg/openbox/autostart
    runs ~/.config/openbox/autostart

Issues regarding commands in ~/.config/openbox/autostart being executed out of order (or skipped altogether) are often resolved by the addition of small delays. For instance: 

openbox-sessionは二つの自動起動カニズムを提供しています。XDG autosatart (python-pyxdgがインストールされていないと働きません)と openbox固有の自動起動カニズムです。

Openbox固有の自動起動カニズムは,

・ /etc/xdg/openbox/environmentを読み込み,

・ ~/.config/openbox/environmentを読み込み,

・ /etc/xdg/openbox/autostartを実行し,

・ ~/.config/openbox/autostartを実行します。

~/.config/openbox/autostart 内のコマンドが順不同に実行されたり,スキップされる問題は,多くの場合,短い遅延を入れることで回避できます。

となっておりました。そうです!python2-xdgパッケージは,python-pyxdgパッケージに置き換えられていたのです。

というわけで,pyhon-pyxdgパッケージをインストールして,グローバルなオートスタートに登録されているものも自動で立ち上がるようになりました。/etc/xdg/autostart/に登録されていいるデスクトップファイルが起動時に実行されます。なので,日本語ウィキにあるように,~/.config/openbox/autostartに二重に記述しないように注意です。

壁紙

silverbirch.hateblo.jp

に譲ります。

 

OpenboxテーマとGTK・Qtのテーマ

silverbirch.hateblo.jp

に譲ります。

Qtアプリの表示が変になるときがあります。

silverbirch.hateblo.jp

を参照してください。

フォントのウェイト

歳食って細いフォントが見づらい。なので,UIのフォントを太字にしたいけど,そもそものフォントが細い。Noto Sans JPのMediumくらいがちょうどよいのですが,なぜかGTKのデフォルトフォントをNoto Sans JP Mediumにしても,ウェイトがRegularでしか表示されない!なぜだ!

bbs.archlinux.org

どうもGTK3はフォントのウェイトの設定を無視するっぽいです。

上のリンクにもありますし,ここにも同じことが書いてありますが,

forum.xfce.org

 

You can force all fonts in GTK3 to a certain weight using something like:

* { font-weight: 100; }

...in ~/.config/gtk-3.0/gtk.css. The problem here is you will lose any other font weights (like bold if you ever want to see/use it).

With CSS, you can target specific applications and specific widgets, which might be more useful, but you will need to search for and identify the widgets to affect. To affect all of thunar and xfdesktop icons, you would use something like this:

.thunar * { font-weight: 100 }
XfdesktopIconView.view { font-weight: 100 }

Note, you will need to restart the Thunar Daemon if its running and xfdesktop for the changes to take effect.

 

というわけで,~/.config/gtk-3.0/gtk.css というファイルを作って,以下を記述

* { font-weight: 500; }

とだけ。フォントがぶっとくなって見やすくなりました。

問題は,そこにも書いてありますが,こう書くとすべてのGTKのウィジットのすべてフォントがこのウェイトで描写されて,太字でないほうがいいのに〜というところも出てくるかもしれません。適切なCSSセレクターを指定すれば,好きなところのフォントだけウェイトを変えられるようですが,中年の目にはすべてのフォントが太字で結構です。

f:id:liveonprana:20211111145009p:plain

ほらっ!こんなにメニューが見やすい!!

パネル(tint2)

パネルがなくて,デスクトップ全面を使えるのがいいところなんですが,通知領域と時計はほしいところです。とくに時計!

cairo-clockというアナログ時計を表示するアプリを入れてみましたが,気がつくと時計が止まっている・・・。なぜ? 設定ダイアログを開いて,ちょこちょこいじったりすると再度正しい時刻を表示し始めたりするのですが,ぱっとみて時間がわからないのはイライラするので,削除。

ただ,時刻を表示してくれさえすればいいのに,ないんですねー,そういうアプリ。多いのが通知領域からワン・クリックで時計が表示されるやつ。パネルがないのにどうやって起動するのだろうか・・・。

ターミナルでデジタル時計を表示するのもありましたが,いかんせんデカすぎ。

パネルを動かしてもいいのですが,全面デスクトップになれると,パネルの分32px奪われるのがイヤッ!!背景を透明にしようとするとコンポジットマネージャをインストールせんといかんし・・・

とさまよっていたら偶然行き着いたのがtint2。"シンプル、質素かつ軽量"のシステムパネル/タスクバー,だそうです。

アプリのローンチャとか,タスクバーとかいらんので,通知領域と時計だけにして,画面の12%の幅にして右寄せにすると,こういう感じ。

f:id:liveonprana:20211105094913j:plain

背景は透明っぽくできます。本当に透明化処理をしているのではなくて,壁紙のファイルからパネルの描写部分の画像をコピーしてそれを背景として描写しているだけのようです。だからグラデーションとか,50%透過とははできません(笑)。

しかし,時間と通知領域だけの,なんちゃって透明のパネル,まさに理想形!!