linux

2022年の私のLinuxデスクトップ状況

Linuxデスクトップを常用してイキっているので現在の状況をまとめておく。 コンポジターとか ここらへんの話は去年の swayでwayland で設定した内容からほとんど変わっていない。 waylandを使うことにして、コンポジターとしては sway を採用している。タイル型にも慣れてきた。 ランチャーには wofi を使っているのはそのままで、デスクトップ通知も mako で続投。タスクバーはi3blockを使ってみたかったのでwaybarからsway標準のswaybarに戻している。 swayを使っていて不便というかwaylandかwlroots、desktop-portal-wlr あたりがまだ機能足りないのがミラーリング。普段使っているときは気にならないのだが登壇のタイミングでミラーリングできないことに気づいた。あと地味に面倒なのは画面共有でウィンドウ選択ができないところ。 greetd ディスプレイマネージャーには greetd を使うことにしている。 sidにgreetdのdebianパッケージが入ってきたので移行してみたが、wlgreeterとかgtkgreeterはまだパッケージにきていないので、そちらは自前でビルド。 wlgreeterはwlrootsを使っているようなのだが、以前ビルドしていたのがabi互換性で動かなくなっていた。ふとしたアップグレードでgreeterが立ち上がらないのはいやなんで、gtkgreeterに変更。なんとなくgtkのほうがabi互換性に強そうな気がする。 pam設定はdebianパッケージに入っていないが、デフォルトで greetd, login をみて存在する方を使うらしい。 /etc/pam.d/login をコピーして /etc/pam.d/greetd を作成。gnome-keyringを有効にする設定を追加してある。 ブラウザ waylandで困っているのはブラウザである。どうもxwaylandだとどのウィンドウもアクティブになっている扱いらしく、chromeをxwaylandで動かすとウィンドウが複数になったときにとても重い。 ozone platformでwaylandを指定するとchromeもwaylandネイティブで動くのだが、今度は日本語入力ができない。 waylandの日本語入力はまだなんか色々やってるみたいだけど、基本的には text-input-unstable-v3 をみんな実装している流れみたいだけど chromeは話進めている途中 のようだ。 以外にもfirefoxはwaylandネイティブにしても日本語入力可能だった。多分 gtk im module がそのまま有効になっているっぽい。環境変数で GTK_IM_MODULE=fcitx5 と設定するだけで良かった。またgtkとfcitxどちらも text-input-unstable-v3 に対応しているようで GTK_IM_MODULE の設定なくても日本語変換自体は可能。でもこの場合は変換候補ウィンドウのポップアップの処理はコンポジターがやることになっていて、swayはまだ対応していないので変換候補を見れない。 gtk im module を使った方法に寄せておくのが良さそう。 ターミナルエミュレーター wezterm が機能豊富でなんかいけてるから最近導入してみた。 kittyの画像表示プロトコルにも対応しているので、後述の ranger で画像プレビューできてしまうのもポイント高い。まだdebianのパッケージがないけどflatpakにあったのでお試し利用中。 気になる点というかあとあと対処しないといけないと思ってるのがいくつか。 flatpakで入れたことで環境変数やネットワークアクセスで制限がかかってる weztermは text-input-unstable-v3 を実装しているようで日本語変換できるけどswayの変換候補ポップアップの対応待ちということでもある OSC133とか便利なものを設定しておきたい ファイラー ranger がターミナル上で結構使いやすい。ターミナルもrangerの画像プレビューが安定していた rxvt から wezterm に変えたが、それなりに安定している。でも偶にボーダーラインとかの描画が変。すぐに直るけど。 rangerから起動するアプリケーションは軽いものにしたいので sxiv とか mpv とか mupdf とかで設定している。

music player daemon

pyspa Advent Calendar 2022 9日目です。8日目は分散処理に詳しいオタク kumagi でした。 去年のエントリでswayをコンポジターにしてwayland生活をするようにしたわけだが、軽量なデスクトップにしていくのでも音楽を聴く余裕は欲しいものである。 mpd (Music Player Daemon) は名前の通りデーモンで動くミュージックプレイヤーである。もちろんヘッドレスでGUIどころかクライアントは別途選ぶもので、軽量デスクトップ野郎どもの友と言えるミュージックプレイヤーだ。 Linuxで音楽を聴く ところでLinuxで音楽を快適に聴くにはある程度仕組みを知っていないと設定がおぼつかない。一応mpdを設定する上で調べてみたところを書いておく alsa, pulseaudio,pipewire まずはdacなりHDMIなりのデジタルオーディオデバイスを操作する部分が必要だが、これはALSA(Advanced Linux Sound Architecture) というカーネルコンポーネントの仕組みとなっている。とりあえずALSAが設定されてないとそもそも音を出せないが、まあ最近のディストロはデバイスを認識して設定してくれるのでそれほど問題ないだろう。ここでつまずいた場合はなんかがんばってください。そしてアプリケーションがどう音を出すかだが、直接alsa APIを扱うアプリケーションもあるがデスクトップ環境ではソフトウェアミキサーがあって多くのアプリケーションはそこを経由して効果音や音楽など音を出す。過去にはGNOMEがesound、KDEがartsだったが、どちらもpulseaudioに移行した。 pulseaudioは音質が抑えめでjackという高音質な代替もある。さらにpulseaudioからpipewireに移行しつつある。色々あるがwaylandでは画面共有などの都合もあるのでpipewireを使うのが普通な気がする。 pipewireとwireplumber, spa ということでwaylandにした環境でさらにpulseaudioを捨ててpipewireに移行。 debianを使っているので PireWire - Debian Wiki を参考にpipewireやspa(pipewireのプラグインみたいなやつ?)をインストールしてpulseaudioのインターフェイスも動くようにした。 mpdのインストールと設定 mpdをインストールしてサービス起動を設定 さて、本題のmpdである。aptで入れたので、他のディストロ使っている人やソースから入れる人は Download the Music Player Daemon のページなどを参照のこと。 mpdはデーモンなのでsystemdのservice unitで管理したい。 debianでインストールするとsystemd service unitの定義も一緒に入ってるのでこれを利用する。デフォルトでsystem sessionで起動するようになっているが、音楽ファイルのディレクトリはユーザー以下にしたいのでuser sessionのサービスとして扱いたい。 さらにservice unitだけでなくsocket activationも用意されているのでこれらをuser sessionで有効にする。 socket activateは直接サービス起動するのではなくポートへのアクセスで初めて本体が起動するやつ。まあどうせすぐ使うからログインしたらすぐ起動しちゃってもいいんだけど。 $ sudo systemctl --now disable mpd.socket $ systemctl --now --user enable mpd.socket mpdの設定 システム的なmpd自体の設定は /etc/mpd.conf にあるが、ディレクトリの指定やoutputなどだいたい変更するのであんまり気にしない。ユーザーとして実行する場合の設定ファイルはXDGを尊重して /.

swayでwayland

pyspa Advent Calendar 2021 の16日目のエントリです。 15日目は@ymotongpooのGoのリリースプロセスとブランチ戦略でした。 waylandにしよう ある日X serverの調子が悪いのかディスプレイマネージャーからログイン後すぐにログアウトしてしまうようになった。 bspwmを使っていて発生したがopenboxに変えたりしても状況変わらず。 コンソールから立ち上げたりしてもエラーが出てるわけでもなく、原因がわからないままにふと試しに入れていたswayを起動したらちゃんと動いた。なぜかwaylandは動くのである。 そういうことならもうwaylandに移行してみるかと新たなヤックの群れに立ち向かうことにした。 (※debian sidにて作業した記録です。) sway お試しでいれてみたswayだがこれはwaylandコンポジターの1種でi3wmのようなタイル型のレイアウトでウィンドウを扱うもの。 というか設定ファイルはほとんどi3と同じでwayland向けの設定が追加されているくらいのものである。 キーボード設定とか ひとまずディスプレイマネージャーを切って、コンソールからの立ち上げでいろいろ設定していくことにする。 waylandはx serverの役割とウィンドウマネージャーの役割をコンポジターが受け持っているので、そこらへんの設定も必要になる。 システムの設定は /etc/sway/config にあった。 ユーザーの設定ファイルは ~/.config/sway/confing になるのでこっちにコピーして修正していくことにしよう。 $ mkdir ~/.config/sway $ cp /etc/sway/config ~/.config/sway ひとまずキーボードをjp106に設定しよう。あとCAPSをCTRLにしておく。 input * { xkb_layout "jp" xkb_options "ctrl:swapcaps" } あとトラックパッドでタップ設定とナチュラルスクロールの設定とかもしておく。 input type:touchpad { tap enabled natural_scroll enabled } タスクバーとかランチャーとか swayにはswaybarというタスクバーが標準でついてくるが、まあいろいろ追加できるwaybarというものがあるのでそっちに交換する。 waybarはwlrootsを使っているコンポジターと相性がいいらしいので採用。 ランチャーについてはbspwmにrofiを使っていたがwaylandにポーティングかなんかしたwofiというのがあったので採用。 通知についてはdunstからmakoに変更。 まとめるとこんな感じ タスクバー: waybar ランチャー: wofi デスクトップ通知: mako waybarについてはexecするのではなくbarの設定でコマンド指定する。 bar { swaybar_command waybar } wofiはキーバインドで実行できるようにしておく。