WestonとPipewireで軽量のデスクトップ環境を構築してみる

デスクトップなしのRapberry Pi OSからWeston + Pipewireの軽量なデスクトップ環境を構築してみます。

今回の内容の目標はデスクトップが表示されたら、Firefoxを起動し、Youtubeのページにアクセスし、Bluetoothのスピーカー経由で何らかの音楽を再生することにします。


環境

マシン : Raspberry Pi 5 8G

OS : Raspberry Pi OS Lite (64-bit)

スピーカー:Bose Mini II SoundLink


SDカードにRaspberry Pi OS Lite (64-bit)をインストールしていることを前提にして話を進めます。




先にWestonとPipewireについて触れておきます。


Westonに触れる前に必要となるのが、Waylandでして、Waylandはデスクトップ環境を構築する為の規約やライブラリで、WestonはWaylandを気軽に扱えるデスクトップ環境だと捉えてください。

Wayland - ArchWiki

Weston - ArchWiki

※Waylandと似たような機能としてX11(Xorg)があります。

Xorg - ArchWiki


Pipewireは音を出す為のフレームワークになります。

Linuxで音を出すためにはALSAという仕組みがありますが、ALSAを直接使用するのは難しい為、PipewireがアプリケーションとALSAを橋渡しします。

※上記のPipewireの橋渡しの内容には例外あり

Advanced Linux Sound Architecture - ArchWiki

Pipewire - ArchWiki

※Pipewireと似たような機能としてPulseAudioがあります。

PulseAudio - ArchWiki




最初にWestonで最低限の設定のデスクトップ環境を構築します。


下記のコマンドを実行します。

$ sudo apt install weston xwayland

xwaylandはX11で開発されたアプリケーションをWayland上で実行できるようにするものです。


続いて、Westonの設定ファイルを作成します。

$ mkdir .config
$ cd .config
$ nano weston.ini

weston.iniの内容は下記にします。

[core]
xwayland=true

[keyboard]
keymap_layout=jp

Westonを起動した時にキーボードがUSのレイアウトになると面倒ですので、JPのレイアウトにしておきます。

※weston.iniの記述に関してはWeston - ArchWiki#設定をご覧ください。


weston.iniを保存したら、Westonを起動してみます。

下記のコマンドを実行してみます。

$ weston

weston.iniの記述に誤りがなければ、



このような画面に切り替わります。

左上のターミナルのアイコンをクリックすると、ターミナルが起動します。




続いて、Westonで起動したデスクトップの環境のターミナルでPipewireをインストールします。

Pipewireを使用するために下記のコマンドを実行します。

$ sudo apt install pipewire pipewire-pulse pipewire-alsa

これでPipewire経由で音が出るようになりました。

動作を確認するために下記のコマンドでFirefoxを起動します。

$ sudo apt install firefox
$ firefox

Firefoxが起動しましたら、Youtube等の動画配信サービスのサイト等で任意の動画を再生して、音が出ることを確認します。




PirewireからBluetoothのスピーカーに接続出来るようにします。

下記のコマンドを実行して、必要なライブラリをインストールします。

$ sudo apt install libspa-0.2-bluetooth bluez

Bluetooth - ArchWiki


続いて、PirewireでBluetoothと接続する設定を行います。

$ sudo mkdir /etc/pipewire/               
$ sudo mkdir /etc/pipewire/media-session.d
$ sudo touch /etc/pipewire/media-session.d/with-pulseaudio

で空のwith-pulseaudioを生成します。

PipeWire - ArchWiki#Bluetoothデバイス


$ sudo shutdown -r now

で再起動しておきます。


再起動後に

$ weston

でWestonのデスクトップを起動し、ターミナルを開き、

$ bluetoothctl

でBlueZを起動します。


BlueZが起動すると

[bluetooth]#

なプロンプトに切り替わります。


下記の操作でBluetoothのスピーカーに接続します。

[bluetooth]# power on
[bluetooth]# scan on

しばらく待つと、

[bluetooth]# [NEW] Device XX:XX:XX:XX:XX:XX Bose Mini II SoundLink

のような出力があります。


XX:XX:XX:XX:XX:XXがスピーカー(ペリフェラル機器)のMACアドレスになります。

※ペリフェラル機器のMACアドレスに関してはPythonでSerial Bluetooth Terminalの動作を再現してみるをご覧ください。


[bluetooth]# pair XX:XX:XX:XX:XX:XX

XX:XX:XX:XX:XX:XXとのペアリングを行い、

Attempting to pair with XX:XX:XX:XX:XX:XX
[CHG] Device XX:XX:XX:XX:XX:XX Connected: yes
/** 途中省略 **/
[Bose Mini II SoundLink]# Pairing successful

のような出力があるのを待ちます。


ペアリングが出来たら、

[bluetooth]# connect XX:XX:XX:XX:XX:XX

スピーカーとの接続を行い、

Attempting to connect to XX:XX:XX:XX:XX:XX
[CHG] Device XX:XX:XX:XX:XX:XX Connected: yes
/** 途中省略 **/
[Bose Mini II SoundLink]# Connection successful

上記のような出力があればスピーカーとの接続が完了となります。


Firefoxを開き、Youtube等の動画配信サービスのサイト等で任意の動画を再生して、音が出ることを確認します。


最後に今回接続したデバイスを信頼します。

[Bose Mini II SoundLink]# trust XX:XX:XX:XX:XX:XX
[Bose Mini II SoundLink]# Changing XX:XX:XX:XX:XX:XX trust succeeded

Bluetooth - ArchWiki#ペアリング

※上記のドキュメントではconnectをする前にtrustすることになっています。

マインクラフト用ビジュアルエディタを開発しています。
詳しくはinunosinsi/mcws_blockly - githubをご覧ください。