feh

提供: ArchWiki
2023年4月11日 (火) 21:03時点におけるKgx (トーク | 投稿記録)による版 (→‎デスクトップの壁紙マネージャ: 情報を更新)
ナビゲーションに移動 検索に移動

関連記事

feh は軽量かつ強力な画像ビューアであり、壁紙を管理する機能がないスタンドアロンのウィンドウマネージャの壁紙管理にも使えます。

インストール

feh パッケージをインストールしてください。

使用法

feh は細かく設定することができます。オプションの完全なリストを見るには、feh --help を実行するか feh(1) man ページを参照してください。

画像ビューア

特定のディレクトリの画像をすばやく見るには、以下の引数をつけて feh を起動します:

$ feh -g 640x480 -d -S filename /path/to/directory
  • -g フラグは画像を強制的に 640x480 以下で表示します
  • -d フラグはファイル名を表示します
  • -S filename フラグは画像をファイル名でソートします

これはほんの一例です。柔軟性を高めたい場合は、さらに多くのオプションを利用できます。

ヒント: --start-at オプションは、選択した画像を feh に表示し、ディレクトリ内の他のすべての画像もデフォルトの順序で参照できるようにします。つまり、feh * を実行して循環して選んだ画像まで。たとえば、feh --start-at ./foo.jpg . は、foo.jpg で始まる、現在のディレクトリ内のすべての画像を表示します。

壁紙を設定する

feh は Openbox, Fluxbox, xmonad などのデスクトップ機能がないウィンドウマネージャの壁紙を管理するのに使えます。

以下のコマンドは最初の壁紙を設定する例です:

$ feh --bg-scale /path/to/image.file

他にも以下のようなスケーリングオプションがあります:

--bg-tile FILE
--bg-center FILE
--bg-max FILE
--bg-fill FILE

次のセッション時に壁紙をまた設定するには、スタートアップファイルに以下を追加してください (例: ~/.xinitrc, ~/.config/openbox/autostart など):

~/.fehbg &

壁紙画像を変更するには、上記の feh --bg-scale /path/to/image.file コマンドを実行した後に作成される ~/.fehbg ファイルを編集してください。

--no-fehbg フラグを渡すことで、~/.fehbg の作成を明示的に無効にすることもできます。

異なるモニターに異なる壁紙をセットアップするには、使用可能なモニターの数と同じ数のファイル パスを渡す必要があります。たとえば、デュアルモニター設定の場合は次のようになります。

$ feh --bg-center path/to/file/for/first/monitor path/to/file/for/second/monitor

SVG 画像を開く

$ feh --conversion-timeout 1 file.svg

imagemagick が必要です。

ランダム壁紙画像

--bg-foo オプションのどれかと --randomize オプションを使うことでランダムに壁紙を feh で設定することができます、例えば:

$ feh --randomize --bg-fill ~/.wallpaper/*

上記のコマンドは ~/.wallpaper/ ディレクトリのファイルからランダムで画像を壁紙に設定します。もしくは、壁紙をサブフォルダに分割している場合は、再帰的に実行することもできます:

$ feh --recursive --randomize --bg-fill ~/.wallpaper

セッションごとに ~/.wallpaper から異なる壁紙をランダムに設定するには、以下を .xinitrc に追加します:

$ feh --bg-max --randomize ~/.wallpaper/* &

以下のように .fehbg を編集することでもランダムに壁紙を設定できます:

$HOME/.fehbg
feh --bg-max --randomize --no-fehbg ~/.wallpaper/* 

定期的に壁紙を変更するには、スクリプトや cron ジョブ、または systemd のサービスなどを使って、一定間隔でコマンドを実行してください。

スクリプトを使用

壁紙をランダムに表示するには、以下のコードでスクリプトを作成します (例: wallpaper.sh)。スクリプトには実行可能属性を付与してください:

$ chmod +x wallpaper.sh

~/.xinitrc からスクリプトを呼び出して下さい。もしくは別のファイルを作らないで ~/.xinitrc に直接ソースを記述することもできます。

~/.wallpaper ディレクトリや 15m という時間はを必要に応じて変更してください (オプションは man sleep を参照)。

wallpaper.sh
#!/bin/sh

while true; do
	find ~/.wallpaper -type f \( -name '*.jpg' -o -name '*.png' \) -print0 |
		shuf -n1 -z | xargs -0 feh --bg-max
	sleep 15m
done

find ~/.wallpaperfind ~/.wallpaper/ に変更する必要があるかもしれません。

以下のバージョンは大して変わっていませんが、ディレクトリを再帰的に検索しません:

wallpaper.sh
#!/bin/bash

shopt -s nullglob
cd ~/.wallpaper

while true; do
	files=()
	for i in *.jpg *.png; do
		[[ -f $i ]] && files+=("$i")
	done
	range=${#files[@]}

	((range)) && feh --bg-scale "${files[RANDOM % range]}"

	sleep 15m
done
xinerama 以外のデュアルスクリーン

このスクリプトは nvidia twinview (など) のデュアルスクリーン環境で壁紙を追加できるように feh の実行を変えています。

wallpaper.sh
#!/bin/sh
exec feh --bg-max --no-xinerama "$@"

cron ジョブを使用

cron ジョブを使うことで同じようなことができ、継続的にスクリプトを sleep させる必要はなくなります。

$ crontab -e を実行して以下を追加:

* * * * *  DISPLAY=:0.0 feh --bg-max "$(find ~/.wallpaper/|shuf -n1)"

systemd ユーザーセッションを使用

ノート: 以下は systemd ユーザーセッションを使っている場合にのみ使うことができます。詳しくは Systemd/ユーザー を見て下さい。

ユニットサービスファイルを作成:

$HOME/.config/systemd/user/feh-wallpaper.service
[Unit]
Description=Random wallpaper with feh

[Service]
Type=oneshot
EnvironmentFile=%h/.wallpaper
ExecStart=/bin/bash -c '/usr/bin/feh --bg-max "$(find ${WALLPATH}|shuf|head -n 1)"'

[Install]
WantedBy=default.target

そしてタイマーファイルを作成。時間は必要に応じて変更して下さい。この例では 15 seconds になっています。

$HOME/.config/systemd/user/feh-wallpaper.timer
[Unit]
Description=Random wallpaper with feh

[Timer]
OnUnitActiveSec=15s
Unit=feh-wallpaper.service

[Install]
WantedBy=default.target

この例ではホームディレクトリの隠しファイルで設定を行い、画像が保存されているディレクトリのパスを指定します。

$HOME/.wallpaper
WALLPATH=/home/user/.wallpaper/

feh-wallpaper.timer を有効化して下さい。詳しくは systemd/タイマー#管理を参照。

ノート: systemd ユーザーセッションでは、systemctl--user フラグを使って下さい。