名もなき未知

エンジニアリングとか、日常とかそういうのをまとめる場所。

plyerをWSL2で動かす

plyer · PyPI というライブラリを使ってみた。

通知が簡単に出せるらしい。Python でバルーン(通知)出したいとき Plyer 使うとメチャ楽 - Qiita

ハマりどころ

エラーメッセージの全文は覚えていないが、ディスプレイ環境がないWSL2の環境でインストールすると失敗する。

大体「Python dbus package」あたりでこける。そもそもディスプレイがないのでインストールされていなくても仕方がないのだが…。

原因は何か

フルパス貼るといろいろ微妙(ユーザ名とか)になるので、要約だけ貼るとまず上のほうにこれが出ている。

UserWarning: The Python dbus package is not installed.
Try installing it with your distribution's package manager, it is usually called python-dbus or python3-dbus, but you might have to try dbus-python instead, e.g. when using pip.

python3-dbus なり dbus-python がないと警告が出ている。

最後に出ているのは implemention error なので、差し替えようとしているライブラリがなさそう。

NotImplementedError: No usable implementation found!

dbus-python を入れてみようとするもエラー。

pip install dbus-python

なんか無限にエラーログが出る。

これと雰囲気似てそう。

https://stackoverflow.com/questions/61285415/no-package-dbus-1-found

glib あたりが足りないので、入れてみたら dbus-python のインストールに成功した。

sudo apt install libdbus-glib-1-dev libgirepository1.0-dev

が。実際にスクリプトを実行すると、まあ動かない。下記のエラーが見える。

dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NotSupported: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11

うーんわからん。

DISPlAY 設定周りを見てみると、Xサーバーアプリが必要なので、VcXsrv を入れてみる。設定はこの辺をパクる。

後は notification 周りの設定をなんややかんやして、なんかする(正直このあたりから覚えてない)

立ち上がる際の設定値に Exec=/usr/lib/notification-daemon/notification-daemon とあるので、 notification-deamon 入れたり、notify-send 自体が動いているかどうか確認するためにこの周りのライブラリをいれたりした。

最終的に画面の左上に通知が出るようになった。が、なんかWSL側のウィンドウの認識が少し変で、3枚のディスプレイを1枚のディスプレイとみなして通知してくるっぽい。自分の配置では一番左上のディスプレイは少し小さいものにしているので、最初動いていることに気が付かなかった。

ディスプレイ設定は xrandr で見た。見方は下記のブログを参考にした。

https://kzmmtmt.pgw.jp/?p=1733

ほか

Windows 側で動かせばすぐ動くので、すぐ動かしたい場合は Windows 側で環境構築して書くほうが早いかも。てか、そのほうが手っ取り早い。わざわざいろいろ経由して表示するのは大変すぎる。

まとめ

最初できないと書くつもりでしたが、エラーを解決してるうちに動いていたので、困ったもんです。