2021年の11月に、業務端末としてDELL XPS 13を購入して、Linuxデスクトップに移行しました。いまでは快適に使えるようになりましたが、Linuxデスクトップに慣れていないこともあって思ったように動かず困ったところがあったので、導入にあたって悩んだところをまとめました。
ディスクの暗号化
業務利用の要件にディスクの暗号化があるので、bootパーティションを除いて暗号化しました。手順は過去記事に追記しました。
GNOME
KDE Plasmaの方がスタイルは好みですし、実際に業務端末でも2ヶ月ほど使っていましたが、Wayland環境ではタッチパッドの左右スワイプが動かないとか、XWaylandで動作するアプリケーションを4Kディスプレイで表示するとぼやけた表示になるなど厳しいなと思いました*1。個人で使うものなら、少し効率が悪い程度なら問題にしませんが、業務で利用する場合は些細なことに気をとられたくないので、GNOMEを使うことにしました。
$ sudo pacman -S noto-fonts-cjk $ sudo pacman -S gnome-shell gnome-control-center gnome-terminal gdm nautilus $ sudo systemctl enable gdm.service
基本的にはデフォルトで使う派ですが、どうしても外せない設定を入れます。これらの意味は過去記事に書きました。
$ gsettings set org.gnome.desktop.input-sources xkb-options "['lv3:ralt_switch', 'ctrl:nocaps']" $ gsettings set org.gnome.desktop.interface gtk-key-theme Emacs $ gsettings set org.gnome.desktop.interface gtk-enable-primary-paste false $ gsettings set org.gnome.desktop.peripherals.touchpad tap-and-drag-lock true
必要なGNOMEアプリケーションを追加します。ここではsushi*2とevince*3を追加します。これらはFlathubにもあるので、flatpakで入れてもいいかも。
# pacmanでインストールする場合 $ sudo pacman -S sushi evince eog # flatpakでインストールする場合 $ flatpak install org.gnome.NautilusPreviewer $ flatpak install org.gnome.Evince $ flatpak install org.gnome.eog
Google Meetの画面共有などに必要なのでxdg-desktop-portalも入れます。
$ sudo pacman -S xdg-desktop-portal-gnome
GNOMEの壁紙
/usr/share/backgroundsまたは~/.local/share/backgroundsにファイルを置いておくと設定アプリから変更できるようになります。
GNOMEテーマの変更
GNOMEのデフォルトテーマは、あまり好みではないので変更します。GNOMEにおいて、テーマと名前のつくものは色々あります。
アイコンテーマを変更すると全体的にアイコンが変わります。GTKテーマを変更すると、アプリケーションの外観が変わります。GNOMEシェルテーマは少し分かりづらいですが、トップバーやアクティビティ画面などが該当します。
テーマはGnome Lookなどを探せば本当に色々ありますが、多すぎて逆に好みのものを見つけるのが困難ですね。今のところ、目に入ったなかではFlat-Remixが良いかなと思ったのでこれを設定します。
アイコンテーマの変更
AURにflat-remixがあるので使います。
$ git clone https://aur.archlinux.org/flat-remix.git
$ cd flat-remix
$ makepkg -si
$ gsettings set org.gnome.desktop.interface icon-theme Flat-Remix-Blue-Light
GTKテーマ
AURにflat-remix-gtkがあるので使います。
$ git clone https://aur.archlinux.org/flat-remix-gtk.git
$ cd flat-remix-gtk
$ makepkg -si
$ gsettings set org.gnome.desktop.interface gtk-theme Flat-Remix-GTK-Blue-Light
GNOMEシェルテーマ
シェルテーマを変更するにはUser Themes拡張が必要なので先に用意しておきます。GNOME Extensionsに色々な拡張があるのでそこから追加してもいいのですが、gnome-shell-extensionsパッケージにも含まれているのでそちらを使いました。
# pacmanでインストールする場合 $ sudo pacman -S gnome-shell-extensions # flatpakでインストールする場合 $ flatpak install org.gnome.Extensions
テーマ自体は、AURにflat-remix-gnomeがあるので使います。
$ git clone https://aur.archlinux.org/flat-remix-gnome.git
$ cd flat-remix-gnome
$ makepkg -si
$ gsettings set org.gnome.shell.extensions.user-theme name Flat-Remix-Blue-Light
補足
上の手順ではAURからテーマをインストールしましたが、ユーザー単位でテーマを管理したい場合は~/.local/share以下にファイルを置くとgsettingsでテーマとして参照できるようになります。
$ mkdir -p ~/.local/share/{themes,icons} $ mv themes/Flat-Remix-Blue-Light ~/.local/share/themes $ mv themes/Flat-Remix-GTK-Blue-Light ~/.local/share/themes $ mv icons/Flat-Remix-Blue-{Dark,Light} ~/.local/share/icons # LightからDarkへsymlinkしているので両方必要
指紋認証
XPS 13は指紋認証が使えるので設定します。ただし、2021年12月時点のfprintdパッケージは1.94.1でしたが、fprintdの1.92.0以上を使うと、
Impossible to enroll: GDBus.Error:net.reactivated.Fprint.Error.NoSuchDevice: No devices available
というエラーで指紋の登録ができません。journalctl -u fprintd.service
すると、
Failed to clear storage before first enrollment: Device has no storage.
と記録があります。Dell XPS 13(9310) - ArchWikiによると、fprintd-1.92.0-1より新しいバージョンには問題があるらしいので、以下から1.92.0より古いパッケージを落としてくる必要がありました。
$ sudo pacman -U fprintd-1.90.9-1-x86_64.pkg.tar.zst
問題が解決するまではfprintをアップデートされると困るので、/etc/pacman.confで固定します。
--- /etc/pacman.conf.orig 2022-01-08 18:13:06.000000000 +0900 +++ /etc/pacman.conf 2022-01-16 23:03:32.302176992 +0900 @@ -22,7 +22,7 @@ Architecture = auto # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup -#IgnorePkg = +IgnorePkg = fprintd #IgnoreGroup = #NoUpgrade =
また、ドライバも必要です。XPS 13では以下の2つが必要です。
- libfprint-tod-git
- libfprint-2-tod1-xps9300-bin
どちらもAURからインストールします。
$ git clone https://aur.archlinux.org/libfprint-tod-git.git $ cd libfprint-tod-git $ makepkg -si $ git clone https://aur.archlinux.org/libfprint-2-tod1-xps9300-bin.git $ cd libfprint-2-tod1-xps9300-bin $ makepkg -si
指紋で認証する
まず、指紋を登録するユーザーはinputグループに属している必要があるので、所属していない場合はグループに追加します。
$ sudo homectl update --member-of=wheel,input lufia
準備ができたら指紋を登録します。fprintd-enrollを実行するとユーザーのパスワードを聞かれるので、入力して指紋を登録します。ここでsudo fprintd-enroll
のようにsudo
を使ってしまうと、rootユーザーの指紋として扱われてしまいます。
$ fprintd-enroll
ここで登録した指紋は/var/lib/fprintに保存されます。登録した指紋を削除する場合はfprintd-deleteを使います。
$ fprintd-delete root
あとは必要に応じてPAMの設定を変更すれば終わりです。
- /etc/pam.d/sudo
- /etc/pam.d/sddm
- /etc/pam.d/kde
KDE Plasma Desktopを使っている場合、ログイン時に参照するのは/etc/pam.d/sddmで、画面ロックの解除で参照するのは/etc/pam.d/kdeです。GDMでは特に変更しなくても指紋が登録されていれば有効になります。
上記のArchWikiでは、lsusbコマンドでデバイスを確認していますが、このコマンドはusbutilsパッケージに含まれています。
サウンド
ALSAとPulseAudioは何が違うのかについて、ざっくりとALSAとPulseAudioの関係がとても分かりやすいです。ところで最近はPulseAudioを置き代えるためにPipeWireというものが実装されていて、PipeWire, the media service transforming the Linux multimedia landscapeによると、ALSAやPulseAudio互換モードを持ち、個別のアクセス制御やパフォーマンスなど優位らしいのでPipeWireを使います。
$ sudo pacman -S alsa-firmware sof-firmeware $ sudo pacman -S pipewire-pulse pipewire-alsa pipewire-jack
実行すると、pulseaudio, pulseaudio-alsa, pulseaudio-bluetoothなどが削除されますが、pipewireが代わりになるので今まで通り動作します。
PulseAudioもPipeWireもどちらもサウンドサーバとしてデバイスとアプリケーションの中間で動作しますが、PipeWireはセッションを開始するためにセッションマネージャーを必要とします。現在、セッションマネージャーはpipewire-media-sessionとwireplumberのどちらかを使います。pipewire-media-sessionのドキュメントに
Note that we recommend the use of WirePlumber instead.
とあるのでwireplumberをインストールします。
$ sudo pacman -S wireplumber
ただし、2021年12月時点では、KDE PlasmaのWaylandセッションでWirePlumberを使うと、音がまったく鳴らないし動画も再生されない(一瞬だけ鳴るけどそのまま詰まって動かなくなっているような動きをする)*4問題がありました。この場合はpipewire-media-sessionを使いましょう。
$ pacman -S pipewire-media-session
Flatpak
Flatpakはディストリビューションに依存しないパッケージ管理システムです。主にアプリケーションの配布に使われていて、Flatpakにより管理されたアプリケーションはサンドボックスで動作するなどの特徴があります。
$ sudo pacman -S flatpak $ flatpak --if-not-exists remote-add flathub https://flathub.org/repo/flathub.flatpakrepo
Flatpakには各種ブラウザ、Visual Studio Code、Slack、Discord、Zoomなど人気のあるアプリケーションはだいたい登録されています。
pacmanでflatpakパッケージをインストールすると/etc/profile.d/flatpak.shが作られて、ここに記述されたXDG_DATA_DIRSが次のログイン以降に反映されます。GNOMEやKDE PlasmaなどのデスクトップはXDG_DATA_DIRSにあるアプリケーションやテーマを認識するので、Flatpakでインストールしたアプリケーションであっても他のものと同様に起動できるようになっています。または、Flatpakのアプリケーションをコマンドラインから起動する場合は以下のようになります。
$ flatpak run com.example.app
不要になったアプリケーションはflatpak uninstall
で削除できますが、アプリケーションが依存していたランタイムはそのまま残ります。どこからも参照されないランタイムも削除する場合は以下のように実行します。
$ flatpak uninstall com.example.app $ flatpak uninstall --unused
Visual Studio Code
Goのコードを書くときはAcmeを使っていますが、TypeScriptなどはVisual Studio Codeを使っているのでFlatpakでインストールします。ここではflathubを明示していますが、IDが一意に定まるなら省略しても動作します。
$ flatpak install flathub com.visualstudio.code
Visual Studio Live Shareを使う場合はgnome-keyringが必要です。これはFlatpakには無いのでpacmanで入れましょう。
$ sudo pacman -S gnome-keyring
FlatpakアプリケーションをWaylandセッションで動作させる
Waylandセッションで起動したい場合は--socket=wayland
オプションが必要です。都度flatpak run
に与えるか、flatpak override
で永続化して使いましょう。flatpak override
した設定は、~/.local/share/flatpak/overridesまたは/var/lib/flatpak/overridesに書かれます。
$ flatpak run --socket=wayland com.example.app $ flatpak --user override --socket=wayland $ flatpak run com.example.app
ElectronアプリケーションをWaylandセッションで動作させる(問題あり)
Electronアプリの場合は、上記に加えてこれらのオプションも必要です。
$ flatpak run --socket=wayland com.example.app --enable-features=UseOzonePlatform --ozone-platform=wayland
これらのオプションは、~/.config/electron-flags.confに書くと参照するらしいのですが手元で試した限りでは反映されなかったので、~/.local/share/applications以下に.desktopファイルを作って、--enable-features
を含めたコマンドを設定しておくといいでしょう。
また、Electronアプリは、Chromiumの問題によりWaylandセッションでは日本語入力ができません。Waylandで動くタイル型ウィンドウマネージャ・swayを使うによると2021年8月頃から発生していて、2022年1月でもまだ継続しているので、ブラウザやエディタではとても困りますね...
ブラウザ
2022年1月時点では、ChromiumはFlathubに登録されていますが、Google Chromeはありません。ただしFlathubのβチャンネルにChromeがあるので、これを使います。また、Microsoft Edgeもβチャンネルにあるので一緒にインストールしました*5。
$ flatpak --user remote-add --if-not-exists flathub-beta https://flathub.org/beta-repo/flathub-beta.flatpakrepo $ flatpak install com.google.Chrome $ flatpak install com.microsoft.Edge
flatpak remote-add
は/var/lib/flatpak以下への書き込み権限を必要としますが、--user
オプションを加えるとユーザー個別に設定させることができます。
Flatpakアプリケーションが一定時間で強制終了する
最初にアプリケーションを起動してしばらくすると、
background activity:
という通知が表示されることがあります。ここでAllowを選ぶことができますが、選ばずに閉じるなどをすると、アプリケーションが1分*6で落ちるようになります。アプリケーションがバックグラウンドに遷移したときに動作させたままにするかどうかの確認なんですが、厄介なことに、いちど閉じると再通知されません。
誤って通知を閉じてしまった場合、flatpak permission-reset
でリセットできます。また、現在の設定はflatpak permissions
で確認でき、パーミッションを個別にセットする場合はflatpak permission-set
です。
# 確認する $ flatpak permissions # リセットする $ flatpak permission-reset com.example.app # 個別にセットする $ flatpak permission-set background com.example.app yes
ところで、このパーミッションは、インストールする際に表示されるパーミッションとは異なるものらしいです。アプリケーションが要求するパーミッションはインストール直前に表示されます。または、以下のコマンドで確認できます。
$ flatpak info --show-permissions com.example.app
Flatpakアプリケーションのデバッグ
--command
オプションで、実行するコマンドを切り替えられます。
$ flatpak run --command=sh com.example.app
アプリケーションのコンテナでシェルが動作するので、あとはデバッグ対象のアプリケーションを実行するといいです。
Flatpakとpacmanの使い分け
pacmanとflatpakのどちらにも同じアプリケーションが利用可能になっている場合、どちらを使うのか迷いますが、個人で使うものはflatpakで、システム全体で持っている方が都合よいものはpacmanを使うといいのかなと思っています。