DEMO
やり方
xwinwrapのインストール
こちらから xwinwrap を入れます.
> git clone git://github.com/ujjwal96/xwinwrap.git
> cd xwinwrap
> ls
Makefile README.md xwinwrap.c
> make
gcc xwinwrap.c -g -Wall -L /usr/lib/x86_64-linux-gnu -lX11 -lXext -lXrender -o xwinwrap
> ls
Makefile README.md xwinwrap xwinwrap.c
> sudo cp xwinwrap /usr/local/bin/
Ubuntu用の依存パッケージが載せられていますが,Gentooではとりあえず以下のパッケージで動くみたいです.余分なものがある気がします.
emerge -av x11-base/xorg-server x11-libs/libX11 dev-perl/X11-Protocol x11-libs/libXrender x11-libs/libXext
メディアプレイヤーのインストール
背景にする動画の拡張子に合わせて,メディアプレイヤーをインストールします.
gif の場合は gifview を
emerge -av media-gfx/gifsicle
mp4(その他もろもろ)の場合は mpv または mplayer をインストールします.
emerge -av media-video/mpv
emerge -av media-video/mplayer
mpv でも gif 再生は出来ますが,かなりカクつくので gif の場合は gifview を勧めます.
背景にする
gifviewを使う場合
git の例にもあげられています.
> xwinwrap -fs -ov -ni -- gifview -a -w WID *.gif
mpvを使う場合
> xwinwrap -fs -ov -ni -- mpv --loop --wid WID *.mp4
mpvを使う場合
> xwinwrap -fs -ov -ni -- mplayer -loop 0 -wid WID *.mp4
mplayer vs mpv
gifview は対応拡張子が少ないのでさておき,mpv か mplayer かとりあえずプロセス負荷をみるとこんな感じでした.


負荷の振れ幅が大きいので一概には言えないのですが,若干 mplayer の方がCPU使用率が小さいようなので,mplayer の方を使うことにしました.
ハードウェアビデオアクセラレーションを活用することで,かなり改善できます.
活用した結果このようになります.

大体の印象ですと,60fps の動画でCPU使用率は 10%, 30fps の動画で 5% 弱くらいになります.
私の環境では普通のIntel Graphics なので,対応しているVA-API ライブラリを用います.
Arch linux とかでは AUR に mplayer-vaapi というパッケージがあるそうなのですが,Gentoo にはなかったので,mpv 一択となりました.
ハードウェアビデオアクセラレーション
vaapi USE フラグ
/etc/portage/make.conf
のUSEフラグに vaapi を追加する.
または, /etc/portage/package.use/mpv
に
media-video/mpv vaapi
として有効化してください.
後者の場合,おそらくffmpeg なども同様に追加することになると思いますので, make.conf
の方に追記することを推奨します.
VA-API 機能追加
その後,mpv を再コンパイルして,vaapi の機能を追加します.
emerge -av --newuse media-video/mpv
VA-API 有効化
コマンドは
xwinwrap -fs -ov -ni -- mpv --hwdec=vaapi --wid WID *.mp4
のように --hwdec=vaapi
を追加すれば大丈夫です.
デフォルトなので点けなくても構いませんが, --vo=opengl
を加えて opengl-hq を使わないことを明確化してもいいかもしれません.
VDPAU の方
mpv の場合は上記の方法を vaapi を vdpau に置き換えるだけで大丈夫だと思います.
mplayer の方は vdpau USE フラグを加えて,再コンパイルした後,
/etc/mplayer/mplayer.conf
に
[vo.vdpau]
vc=ffh264vdpau,ffodivxvdpau,ffmpeg12vdpau,
を付け加えればいいそうです.VDPAUページ参照
おまけ(i3-wmでの話)
xwinwrapオプション
-fs
Fullscreen表示です.
代わりに -g {w}x{h}+{x}+{y}
(例えば, -g 1366x768+200+0
)で大きさ(1366x768)と場所(x-offset : 200, y-offset : 0)を指定できます.
ちなみに, -fs も -g も指定しないと, 512x384 になります.
-ov がない場合
こうなります.(わかりやすさのため小さめの枠で表示)
前面に表れて,自己主張強めになります.

-ni がない場合
こうなります.(上記同様小さめの枠)
コントロール出来ます.

-sh {circle,triangle}
こんな感じです.


-o {0-1}(ex. -o 0.6)
半透明になり,元の背景のGentoo logoが透けてきます.

実際に使う場合にはそれっぽいオプションの -b , -nf も加えましたが,正直効果あるのか不明です.
i3configの設定
~/.config/i3/config
に以下を追記しました.
exec --no-startup-id xwinwrap -fs -ov -ni -b -nf -- mpv --hwdec=vaapi --loop --wid WID ~/picture/wallpaper_engine/girls.mp4
bindsym $mod+Shift+b exec ~/.config/i3/wallpaper.sh
~/.config/i3/wallpaper.sh
は背景の動画をランダムで変えるものとなっており,再度 xwinwrap をすると,mplayer または mpv が多重起動してしまうので,それを防ぐためのシェルスクリプトになってます.
以下に mpv 用と mplayer 用分けて載せます.
mpv用
#!/bin/sh
ps aux | grep xwinwrap | grep -v grep | awk '{ print "kill -9", $2 }' | sh
exec xwinwrap -fs -ov -ni -b -nf -- mpv --hwdec=vaapi --shuffle --loop --wid WID ~/picture/wallpaper_engine/*.mp4
mplayer用
#!/bin/bash
files=(~/picture/wallpaper_engine/*.mp4)
ps aux | grep mplayer | grep -v grep | awk '{ print "kill -9", $2 }' | sh
exec xwinwrap -fs -ov -ni -b -nf -- mplayer -wid WID -loop 0 "${files[RANDOM % ${#files[@]}]}"
ディレクトリの動画一覧から一つランダムに取ってそれをリピート再生したいのですが,mpv だとこれでいいのですが, mplayer だとディレクトリがプレイリストになってそれを周回させてしまいますね...
こんな書き方になってしまいました...
どうやるんですかね
デュアルディスプレイ
i3-wm にて,xrander を用いて画面を拡張すると,root window が拡大されます.
> xwininfo -root
xwininfo: Window id: 0x16a (the root window) "i3"
Absolute upper-left X: 0
Absolute upper-left Y: 0
Relative upper-left X: 0
Relative upper-left Y: 0
Width: 3840
Height: 1080
Depth: 24
Visual: 0x20
Visual Class: TrueColor
Border width: 0
Class: InputOutput
Colormap: 0x22 (installed)
Bit Gravity State: ForgetGravity
Window Gravity State: NorthWestGravity
Backing Store State: NotUseful
Save Under State: no
Map State: IsViewable
Override Redirect State: no
Corners: +0+0 -0+0 -0-0 +0-0
-geometry 3840x1080+0+0
上記は左にモニター(1920x1080)を接続した状態の root window です.
この状態で -fs オプションを用いると,動画のアスペクト比にもよりますが,短い辺に合わせて表示されます.
ちなみに -fs オプションはこの場合では -g 3840x1080 と同様です.

今回の場合ではモニター(左)に設定したい場合は
xwinwrap -g 1920x1080 -ov -ni -- mpv --hwdec=vaapi --shuffle --loop --wid WID *.mp4
PC(右)に設定したい場合は
xwinwrap -g 1920x1080+1920+0 -ov -ni -- mpv --hwdec=vaapi --shuffle --loop -wid WID -loop 0 *.mp4
と,オフセットを設定します.