2022/07/27(水) [n年前の日記]
#2 [ubuntu][linux] xscreensaver経由で動画を再生
Linux上で動くメジャーなスクリーンセーバ、xscreensaver を経由して動画を再生してみたいなと思い立った。
もし動画を再生できるなら、わざわざスクリーンセーバのプログラムを作らなくても、何かしらのCGツールを使って動画を作ってソレを流しとけばいいじゃん、ってことになりそうだよなと…。
そんなわけで試してみた。動作確認環境は、Ubuntu Linxu 20.04 LTS。xscreensaver が利用できる状態になっていること。
もし動画を再生できるなら、わざわざスクリーンセーバのプログラムを作らなくても、何かしらのCGツールを使って動画を作ってソレを流しとけばいいじゃん、ってことになりそうだよなと…。
そんなわけで試してみた。動作確認環境は、Ubuntu Linxu 20.04 LTS。xscreensaver が利用できる状態になっていること。
◎ 参考ページ。 :
◎ mpvのインストール。 :
動画再生用ツールとして mpv をインストールする。Ubuntu の場合はパッケージが用意されていた。ありがたや。
sudo apt install mpv
◎ プレイリストファイルを作成。 :
mpv に渡すためのプレイリストファイルを作成する。前述の参考ページに倣って、~/.config/screensaver.m3u というファイル名にしておく。
以下は、参考ページで紹介されていた記述例。
vi ~/.config/screensaver.m3u
#EXTM3U /home/USER/Videos/hoge.mp4 /home/USER/Videos/
- 1行目には、「#EXTM3U」と記述する。これで、m3u形式のプレイリストと判別されるらしい。
- 3行目あたりから、動画ファイル(.mp4)のパスを記述。あるいは、動画が入っているディレクトリのパスを記述しても良い。
- 更に、youtube-dl なるツールが利用できる場合は、YouTube の動画のURLを記述して、それを再生することも可能らしい。ただ、今回は、youtube-dl を導入してないので、そのあたりの記述は削除した。
以下は、参考ページで紹介されていた記述例。
#EXTM3U /path/to/some_video.mp4 /path/to/dir_with_many_videos/ # any youtube video or other sites supported by `youtube-dl` https://www.youtube.com/watch?v=Xjs6fnpPWy4
◎ xscreensaver の設定ファイルを編集。 :
xscreensaver の設定ファイル、~/.xscreensaver を編集する。programs: 以下に mpv起動用の項目を追加する。
まあ、一旦は1行で記述してしまって、xscreensaver の設定ウインドウで何かしら値を変更すれば、~/.xscreensaver が整形された状態で上書き保存されるので、手作業でインデントを整えなくてもいいのかもしれない。
オプションの意味は以下。
xscreensaver は、スクリーンセーバを実行する際、環境変数 XSCREENSAVER_WINDOW に、スクリーンセーバ画面のウインドウIDを設定してくれるらしい。
つまり、件の環境変数を読み取って、そのウインドウIDを管理して描画ができる言語であれば、xscreensaver用のスクリーンセーバを作れるはず…。なのだけど、ソースコードに添付されていたドキュメントには、「まあ、そんなことができるのってC/C++ぐらいだから、実際にはC/C++で書くことになるだろうね」みたいな感じの一文が書いてあった気がする。
ただ、mpv は、自身が利用するウインドウを --wid オプションで指定できるので…。故に mpv を使えば好きな動画をスクリーンセーバとして再生できるのだろうなと。
vi ~/.xscreensaver
"MPV" mpv --really-quiet --no-stop-screensaver \ --fs --wid=$XSCREENSAVER_WINDOW \ --no-audio --loop=inf --shuffle \ --ytdl-format="bestvideo[height<=1080]" \ $HOME/.config/screensaver.m3u \n\上記はスペース文字で記述してしまっているけれど、実際に追加する際は、TAB文字有効、かつ、TABは8スペースでインデント等をしたほうが良さそう。
まあ、一旦は1行で記述してしまって、xscreensaver の設定ウインドウで何かしら値を変更すれば、~/.xscreensaver が整形された状態で上書き保存されるので、手作業でインデントを整えなくてもいいのかもしれない。
オプションの意味は以下。
- --really-quiet : stdout(標準出力)への出力を抑制。
- --no-stop-screensaver : mpv自体をスクリーンセーバにする、らしい。
- --fs : フルスクリーン表示
- --wid=$XSCREENSAVER_WINDOW : 環境変数 XSCREENSAVER_WINDOW で与えられたウインドウIDに描画する。
- --no-audio : 無音にする。
- --loop=inf : ループ再生
- --shuffle : シャッフル再生
- --ytdl-format="bestvideo[height<=1080]" : YouTubeの動画を再生する場合の指定
- $HOME/.config/screensaver.m3u : プレイリストファイルのパスを指定
xscreensaver は、スクリーンセーバを実行する際、環境変数 XSCREENSAVER_WINDOW に、スクリーンセーバ画面のウインドウIDを設定してくれるらしい。
つまり、件の環境変数を読み取って、そのウインドウIDを管理して描画ができる言語であれば、xscreensaver用のスクリーンセーバを作れるはず…。なのだけど、ソースコードに添付されていたドキュメントには、「まあ、そんなことができるのってC/C++ぐらいだから、実際にはC/C++で書くことになるだろうね」みたいな感じの一文が書いてあった気がする。
ただ、mpv は、自身が利用するウインドウを --wid オプションで指定できるので…。故に mpv を使えば好きな動画をスクリーンセーバとして再生できるのだろうなと。
◎ 動作確認。 :
xscreensaver の設定画面を出して、「MPV」を選ぶ。
これで、スクリーンセーバが起動する際、プレイリストファイル ~/.config/screensaver.m3u 内に記述した動画が再生された。
これで、スクリーンセーバが起動する際、プレイリストファイル ~/.config/screensaver.m3u 内に記述した動画が再生された。
◎ 余談。 :
手元の環境ではデスクトップとして Xfce を使っているけど、デフォルトでは xfce4-screensaver というスクリーンセーバがインストールされていて、~/.xscreensaver を修正しても修正内容が反映されなかった。xscreensaver をインストールしてそちらを使う状態にしないと、~/.xscreensaver は読まれないらしい。
xfce4-screensaver のアンインストールと、xscreensaver のインストールは以下。
今時の Ubuntu は、xscreensaver を使わずに、gnome-screensaver 等々、違うスクリーンセーバがデフォルトで入っているので、そのあたりはちょっと注意。各スクリーンセーバがどの設定ファイルを読み込むのかが分かれば、xscreensaver に切り替えずに済むのだろうけど…。
xfce4-screensaver のアンインストールと、xscreensaver のインストールは以下。
sudo apt remove xfce4-screensaver sudo apt install xscreensaver
今時の Ubuntu は、xscreensaver を使わずに、gnome-screensaver 等々、違うスクリーンセーバがデフォルトで入っているので、そのあたりはちょっと注意。各スクリーンセーバがどの設定ファイルを読み込むのかが分かれば、xscreensaver に切り替えずに済むのだろうけど…。
[ ツッコむ ]
以上です。