ラズベリーパイでUbuntu Server上にLXDEデスクトップを導入し、リモートデスクトップで接続することができたら嬉しいと思ったので設定した備忘録です。
LXDEについて
lubuntu Desktopにも利用されている超軽量デスクトップ環境です。壁紙すらありません。ベースがDebianなこともあり、RaspberryPiでもいい感じです。
GUIも画像の通り簡素で、ubuntu-desktopに比べると快適です。あくまでブラウザが見れるサーバくらいのノリで導入するのがよさそうです。
環境
インストール
デスクトップ環境の導入
デスクトップ環境を入れます。
apt-get install -y lxde
lxdeインストールの自動化(expect)
cloudinitなどで導入する場合はexpect
を使って次のようにかけます。
ただし、質問文が日本語化されていた場合はexpect
の内容が変わってしまうため注意です。
sudo apt install -y expect cat <<EOF | expect set timeout -1 spawn sudo apt install -y lxde expect "Default display manager: " send "lightdm\n" expect eof EOF
バグ対応
ubuntu 20.04でlxdeを導入した後、接続後すぐに切断されてしまう問題を防ぐために以下を実行します。
apt-get purge -y gdm3 gnome-shell apt autoremove apt-get install -y xorg file-roller
参考:
apt - Best way to Install LXDE (Not LXQT) on Ubuntu 20.04 - Ask Ubuntu
xrdpの導入
リモートデスクトップ接続するためにxrdpを導入します。ここではubuntu
ユーザでログインすることを想定しています。
apt-get install -y xrdp sed -i 's/allowed_users=console/allowed_users=anybody/' /etc/X11/Xwrapper.config # allowed_usersの値を変更 # 以下は初めにログインするユーザに向けて実施 sudo -u ubuntu echo "lxsession -s LXDE -e LXDE" > ~ubuntu/.xsession
使いやすくするため、以下の設定を追加します。
- Macキーボードのかなキーを有効化(キーコードマッピング)
- 日本語入力の有効化(IMEの導入)
- Chromiumの導入(ArmではGoogle Chromeが動かないため)
- クリップボード用マウントディレクトリ非表示(thinclient_drives変更)
# かなキーをひらがなにするとデフォルトでひらがな変換になる # .xsessionでlxsession前に挿入する sudo -u ubuntu ed -i "1ixmodmap -e 'keycode 120 = Hiragana' 2>/dev/null" ~ubuntu/.xsession apt-get install -y fcitx fcitx-mozc # 日本語入力用 setxkbmap -layout jp #キーレイアウトをMacbook日本語に # chromiumの導入(RaspberryPiではGoogleChromeは依存関係を解消できない) # 実際は snap install chromium が動いている apt-get install -y chromium-browser # メニューのインターネットカテゴリの非表示を解除 sed -i 's/^NoDisplay/#NoDisplay/' /usr/share/applications/chromium-browser.desktop # デスクトップショートカット作成 cat << EOF >> ~ubuntu/Desktop/chromium.desktop [Desktop Entry] Type=Link Name=Chromium Icon=chromium-browser URL=/usr/share/applications/chromium-browser.desktop EOF # クリップボード用のマウントディレクトリを非表示 sed -i 's/FuseMountName=thinclient_drives/FuseMountName=.thinclient_drives/' /etc/xrdp/sesman.ini rmdir ~ubuntu/thinclient_drives systemctl restart xrdp
以上で基本的な導入は完了です。
ネットワーク冗長化
bondingを使うことで同じIPアドレスでWifiとEthernetを利用することができ、Ethernetがダメな時はWifiで接続という設定が可能です。
以下のように/etc/netplan/99-manual.yaml
を作成します。
network: version: 2 renderer: networkd ethernets: eth0: dhcp4: false dhcp6: false wifis: wlan0: dhcp4: false dhcp6: false access-points: "WIFI-SSID": password: "WIFI-PASSWORD" bonds: bond0: interfaces: - eth0 - wlan0 parameters: arp-interval: 1000 arp-ip-targets: [192.168.3.1] bridges: br0: interfaces: - bond0 dhcp4: false dhcp6: false addresses: - 192.168.3.100/24 # 設定するIPアドレス gateway4: 192.168.3.1 nameservers: addresses: - 192.168.3.250 # DNSサーバ - 8.8.8.8
音声転送の有効化
次を参照して実施しました。
w.vmeta.jp
github.com
必要コンポーネントをインストールします。
apt install dpkg-dev build-dep pulseaudio
deb-srcを有効化します。
sed -i.bak -e "s/^# deb-src \(.*\)/deb-src \1/" /etc/apt/sources.list apt update -y
PulseAudioを設定します。
cd /tmp apt source pulseaudio cd pulseaudio-13.99.1 ./configure # dpkg-buildpackage -rfakeroot -uc -b
モジュールを作成します。
cd ../ git clone https://github.com/neutrinolabs/pulseaudio-module-xrdp.git ./bootstrap && ./configure PULSE_DIR=/tmp/pulseaudio-13.99.1/ make
最後に作成したモジュールをインストールします。
make install
正常に完了すると、module-xrdp-sink.so
とmodule-xrdp-source.so
がモジュールディレクトリ内に作成されます。
ls $(pkg-config --variable=modlibexecdir libpulse)
pulseaudioを起動すると音声を転送することができるようになります。
pulseaudio -k
.xsession
に追加すると、rdpの際に自動起動するようになります。
# .xsessionでlxsession前に挿入する sudo -u ubuntu ed -i "1ipulseaudio -k" ~ubuntu/.xsession
所感
問題はいろいろありますが、遊びくらいに入れるには十分な印象です。 Wifi越しでの接続なので動きがもっさりしているのかもしれません。
また、lxdeが軽量なためか、8GBのRAMはさほど問題にならず、CPUが非力なためにブラウザーのタブをふやすともっさりする印象を受けました。
課題
まだできていないことが以下になります。
- リモートオーディオが遅延する
- トラックパッドのスクロールが早すぎる
- 直接ディスプレイにつないでもServerモードで起動する
ちょっとてこずっているので、またできたら別途記事にしたいと思います。