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

Void LinuxにLabwcで軽量で実用性の高いWaylandデスクトップ環境を構築する

 2024-05-28

 Void Linux

こんにちは。今回のテーマは「Void LinuxにLabwcで軽量で実用性の高いWaylandデスクトップ環境を構築する」です。新たにVoid Linuxをインストールして使い始めたところです。せっかくなのでXorgではなくWaylandでデスクトップ環境を構築したいと思いあれこれ試しているところです。最近までSwayを使用していましたが、今回Labwcに移行しましのたで記事にしてみました。

Labwcとは

LabwcはOpenboxに影響を受けたスタック型のWaylandコンポジタです。WaylandでOpenboxの使い心地を体験できます。テーマにはネット上に豊富にあるOpenboxのテーマがそのまま適用できます。シンプルで軽量な使い心地、他のツールと組み合わせてデスクトップ環境をカスタマイズしていく楽しみを味わいたい方にはおすすめのコンポジタです。Waylandコンポジタはタイル型のSwayやHyprlandが有名ですが、タイル型は少しハードルが高いという方も、labwcならばLXDEやXfceの操作感に近いデスクトップ環境を構築することができます。

目指した環境

今回目指した環境はLabwcを中心に交換可能なパーツを集めてLXDEやXFCEと同等の使いやすさを有するデスクトップ環境を有することを目標としました。具体的には以下を実現できる環境を目指します。

  • パネルのショートカットからアプリケーションの起動が可能
  • パネルの電源ボタンからマウス操作でPCのパワーオフや再起動が可能
  • GUIファイルマネージャーがある
  • ウィンドウを重ねて好きな位置に配置できるスタック型の環境
  • 壁紙表示、画面ロック、ディスプレイ電源OFF、スクリーンショット機能を有する
  • パネルからアプリランチャーが起動可能
  • ショートカットで端末を起動させる
  • キーボードだけでウィンドウのサイズ変更、移動ができる
  • キーボードショートカットに頼らなくてもマウス操作で基本操作ができる
  • ワークスペースの切り替えを可能とする
  • テーマも導入して見た目にもこだわりたい

今回構築した環境

今回は以下のような構成でデスクトップ環境として一通りのことができる環境を整えました。

スクリーンショットを以下に示します。

デスクトップ画面 SS01

アプリランチャー SS02

終了画面 SS03

また、今回構築した環境を表で整理しました。

項目
システムVoid Linux
labwcの起動コンソールから起動
コンポジタLabwc
ステータスバーwaybar
端末Alacritty
ファイルマネージャPCManFM
ランチャーngw-launcher
オーディオpulseaudio
オーディオミキサーpavuaudio
壁紙表示swaybg
スクリーンロックswaylock
スクリーンショットgrim
WEBブラウザFirefox
日本語入力Fcitx5 + mozc
GTKテーマInfinity-GTK
GTKアイコンVivid-Dark-Icons
LabwcテーマFresh-Theme
日本語フォントVLゴシック

Waylandを動かす準備

Labwcに限らない話なのですが、Waylandコンポジタを使用するにあたり必要な準備を行います。今回はVoid Linuxの前提で記載します。Arch Linuxの場合はArchWikiを参考にしてください。dbus,elogind, polkitパッケージをインストールします。

sudo xbps-install \
    dbus \
    elogind \
    polkit

dbusサービスを有効化しましょう。Void Linuxはサービス管理にrunitを使用していますのでSystemdの方式とは少し異なります。以下のコマンドでサービスを有効化しましょう。

sudo ln -s /etc/sv/dbus /var/service/

必要なパッケージの導入

今回はVoidLinuxで環境を構築するのでXBPSでインストールをしていきます。もしArch Linuxで行う場合はAURなどでパッケージを探してみてください。

sudo xbps-install \
    labwc \
    swaylock \
    swaybg \
    swayidle \
    ngw-launcher \
    waybar \
    grim \
    slurp \
    wlopm \
    mako

環境変数の設定

~/.config/labwc/environmentに環境変数を設定することでLabwc起動時に環境変数を設定することができます。筆者は言語、キーボードなどの設定をこのファイルで行っています。キーボード関連の環境変数としてはXKB_DEFAULT_LAYOUT, XKB_DEFAULT_MODEL, XKB_DEFAULT_RULES, XKB_DEFAULT_VARIANT, XKB_DEFAULT_OPTIONSがサポートされています。

environment設定例

LANG='ja_JP.UTF-8'
MOZ_ENABLE_WAYLAND=1
XKB_DEFAULT_LAYOUT='jp'

labwcのキーバインドをワークスペース設定

labwcの設定は/usr/share/doc/labwc/にある設定ファイルを~/.config/labwc/以下にコピーして編集します。

mkdir -p ~/.config/labwc
cp /usr/share/doc/labwc/* ~/.config/labwc/

~/.config/labwc/rc.xmlファイルを編集していきます。今回はvimスタイルの”hjkl”キーで画面のサイズ変更、移動ができるようにカスタマイズしています。また、キーボードショートカットでAlacrittyとngw-launcherを起動できるようにしています。ちなみにデフォルトの端末はfootが設定されています。Printキーで全画面のスクリーンショット、Shift + Printで範囲指定してのスクリーンショットを割り当てています。

  <desktops number="4" />

  <keyboard>
    <default />
    <!-- Use a different terminal emulator -->
    <keybind key="W-Return">
      <action name="Execute" command="alacritty" />
    </keybind>
    <keybind key="W-D">
      <action name="Execute" command="fuzzel" />
    </keybind>
    <keybind key="W-R">
      <action name="Resize" />
    </keybind>
    <keybind key="A-h">
      <action name="MoveRelative" x="-10" y="0" />
    </keybind>
    <keybind key="A-l">
      <action name="MoveRelative" x="10" y="0" />
    </keybind>
    <keybind key="A-k">
      <action name="MoveRelative" x="0" y="-10" />
    </keybind>
    <keybind key="A-j">
      <action name="MoveRelative" x="0" y="10" />
    </keybind>
    <keybind key="W-j">
      <action name="ResizeRelative" bottom="10" />
    </keybind>
    <keybind key="W-k">
      <action name="ResizeRelative" bottom="-10" />
    </keybind>
    <keybind key="W-l">
      <action name="ResizeRelative" right="10" />
    </keybind>
    <keybind key="W-h">
      <action name="ResizeRelative" right="-10" />
    </keybind>
    <keybind key="W-S-c">
      <action name="Reconfigure" />
    </keybind>
    <keybind key="W-S-e">
      <action name="Execute" command="nwgbar"/>
    </keybind>
    <keybind key="Print">
      <action name="Execute">
        <command>sh -c 'grim ~/Pictures/sc-$(date +%Y%m%d%H%M%S).png'</command>
      </action>
    </keybind>
    <keybind key="S-Print">
      <action name="Execute">
        <command>sh -c 'grim -g "$(slurp)" ~/Pictures/sc-$(date +%Y%m%d%H%M%S).png'</command>
      </action>
    </keybind>
    <keybind key="W-I">
      <action name="Iconify" />
    </keybind>
    <!--
      Remove a previously defined keybind
      A shorter alternative is <keybind key="W-F4" />
    -->
    <keybind key="W-F4">
      <action name="None" />
    </keybind>
    <keybind key="W-1"> <action name="GoToDesktop" to="1" />  </keybind>
    <keybind key="W-2"> <action name="GoToDesktop" to="2" />  </keybind>
    <keybind key="W-3"> <action name="GoToDesktop" to="3" /> </keybind>
    <keybind key="W-4"> <action name="GoToDesktop" to="4" /> </keybind>
  </keyboard>

壁紙の設定

壁紙の表示はswaybgを使用します。~/.config/labwc/autostartに以下のように編集します。path/to/imageの部分は画像へのパスを入れてください。

# Set background color.
swaybg -i '/path/to/image' -m fill >/dev/null 2>&1 &

画面ロック、スリープ

スリープ設定にはswayidleを使用します。~/.config/labwc/autostartに以下を追記します。

アイドル状態にのみする場合

swayidle -w timeout 600 'wlopm --off' resume 'wlopm --on' >/dev/null 2>&1 &

画面ロック&アイドル状態にする場合

swayidle -w \
	timeout 300 'swaylock -f -c 000000' \
	timeout 600 'wlopm --off \*' \
	resume 'wlopm --on \*' \
	before-sleep 'swaylock -f -c 000000' >/dev/null 2>&1 &

通知機能の設定

~/.config/labwc/autostartに以下を追記しmakoを起動させます。

mako >/dev/null 2>&1 &

日本語入力の設定

~/.config/labwc/autostartに以下を追記しfcitx5が起動するようにします。ここでは割愛しますが、mozcやanthyなどを導入し日本語入力できる環境を構築しておいてください。

autostartへの追記例

fcitx5 &

また、~/.config/labwc/environmentに以下の環境変数を設定してください。

environmentの設定例

GTK_IM_MODULE="fcitx5"
QT_IM_MODULE="fcitx5"
XMODIFIERS='@im=fcitx5'

GTKアイコンとテーマの設定 

GTKテーマとアイコンをGNOME LOOKからダウンロードしてきます。GTKテーマは/usr/share/themes/に、アイコンは/usr/share/icons/以下に配置します。

以下コマンドでGTKが指定のテーマとアイコンを使用するように設定します。

GTKテーマの設定例

gsettings set org.gnome.desktop.interface gtk-theme Infinity-GTK 

GTKアイコンの設定例

gsettings set org.gnome.desktop.interface icon-theme Vivid-Dark-Icons

Openboxのテーマを適用する

Openboxのテーマを適用するには/usr/share/themes/以下もしくは~/.local/share/themes/以下に配置します。このテーマをLabwcで使用するには~/.config/labwc/rc.xmlに以下のように記載します。

rc.xmlの設定例

<theme>
  <name>Fresh-Theme</name>
  <cornerRadius>8</cornerRadius>
  <font name="sans" size="10" />
</theme>

waybarの設定

デスクトップに配置するパネルはwaybarを採用しました。Swayを使用していた時から馴染みがあり、新たに別のパネルをインストールするのも手間だったというのが単純な理由です。ただ、Sway用に使用していた時とは少し変更しました。変更点としてはsway用のワークスペースを除去してwlr/taskbar

waybarの設定ファイルは~/.config/waybar/configに、スタイルファイルは~/.config/waybar/style.cssです。CSSはrobertjks-configurationをベースに多少アレンジしました。

config 設定例

{
    "layer": "top",
    "position": "top",
    "height": 27,
    "modules-left": ["custom/app", "custom/browser",  "custom/folder", "custom/terminal", "wlr/taskbar"],
    "modules-center": [],
    "modules-right": ["network", "temperature", "cpu", "memory", "pulseaudio", "battery", "clock", "tray", "custom/poweroff"],
    "custom/poweroff": {
      "format": " ",
      "on-click": "nwgbar"
    },
    "custom/app": {
      "format": "󰀻",
      "on-click": "nwggrid"
    },
    "custom/terminal": {
      "format": "",
      "on-click": "alacritty"
    },
    "custom/folder": {
      "format": "",
      "on-click": "pcmanfm"
    },
    "custom/browser": {
      "format": " ",
      "on-click": "firefox"
    },

    "wlr/taskbar" : {
      "format": "{app_id}",
      "on-click": "minimize-raise"
    },
    "sway/workspaces": {
        "disable-scroll": false,
        "disable-click": false,
    },
    "tray": {
        "spacing": 10,
    },
    "clock": {
        "format": "{:%a %Y %b %d %R}"
    },
    "custom/japan": {
        "format": "{}",
        "exec": "TZ=Asia/Tokyo date \"+%H:%M %Z\"",
        "interval": 30,
    },
    "custom/germany": {
        "format": "{}",
        "exec": "TZ=Europe/Berlin date \"+%H:%M %Z\"",
        "interval": 30,
    },
    "cpu": {
        "format": " {usage}%"
    },
    "memory": {
        "format": " {}%"
    },
    "temperature": {
        "critical-threshold": 75,
        "format": " {temperatureC}°C"
    },
    "battery": {
        "bat": "BAT0",
        "full-at": 95,
        "states": {
            "good": 95,
            "warning": 30,
            "critical": 15
        },
        "format": "{icon} {capacity}%",
        "format-icons": ["", "", "", "", ""]
    },
    "network": {
        "format-wifi": " {essid}",
        "format-disconnected": "⚠ Disconnected"
    },
    "pulseaudio": {
        "format": "{icon} {volume}%",
        "format-muted": "",
        "format-icons": {
            "headphones": "",
            "default": ["", ""]
        },
        "on-click": "pavucontrol"
    },
}

Waybarがlabwc起動時に自動起動するように~/.config/labwc/autostartに追記します。

waybar >/dev/null > 2>&1 &

Labwcの起動

以下コマンドで起動できます。

dbus-run-session labwc

毎回、このコマンドを打つのは面倒なので、aliasで短く使いやすいショートカットを登録することをオススメします。

まとめ

軽い気持ちで書き始めましたが、単にLabwcを使うだけでなく実用的なデスクトップ環境を構築する設定例を書き残そうと欲張った結果、長い記事となってしまいました。この記事がLabwcを導入するお役に立てば幸いです。