Feh (日本語)
feh は軽量かつ強力な画像ビューアであり、壁紙を管理する機能がないスタンドアロンのウィンドウマネージャの壁紙管理にも使えます。
Contents
インストール
使用法
feh は細かく設定することができます。オプションの完全なリストを見るには、feh --help を実行してください。
画像ビューア
特定のディレクトリの画像をすばやく見るには、以下の引数をつけて feh を起動します:
$ feh -g 640x480 -d -S filename /path/to/directory
-
-gフラグは画像を強制的に 640x480 以下で表示します -
-dフラグはファイル名を表示します -
-S filenameフラグは画像をファイル名でソートします
他にも様々なオプションが使えます。
ファイルブラウザの画像ランチャー
以下のスクリプトはファイルブラウザに使えます。feh で選択した画像が表示されますが、ディレクトリの他の画像もブラウズすることができます。"feh *" を実行して選択した画像を順に切り替えるのと同じです。
このスクリプトを使う場合、最初の引数はファイル名です。
feh_browser.sh
#!/bin/bash
shopt -s nullglob
if [[ ! -f $1 ]]; then
echo "$0: first argument is not a file" >&2
exit 1
fi
file=$(basename -- "$1")
dir=$(dirname -- "$1")
arr=()
shift
cd -- "$dir"
for i in *; do
[[ -f $i ]] || continue
arr+=("$i")
[[ $i == $file ]] && c=$((${#arr[@]} - 1))
done
exec feh "$@" -- "${arr[@]:c}" "${arr[@]:0:c}"
選択した画像のパスを付けてスクリプトを呼び出して下さい。他にも feh に引数を追加することができます。以下はファイルブラウザで使うことができるランチャーの例です:
$ /path/to/script/feh_browser.sh %f -F -Z
-F と -Z は feh の引数です。-F は画像をフルスクリーンモードで開いて、-Z は自動的に画像を拡大します。-q (quiet) フラグは feh がカレントフォルダから画像以外のファイルをロードしようとしたときにターミナルにエラーメッセージを表示しないようにします。
シンプルに記述すると:
feh_browser.sh
#! /bin/sh feh -. "$(dirname "$1")" --start-at "$1"
上のスクリプトはオプションを受け付けません。
デスクトップの壁紙マネージャ
feh は Openbox, Fluxbox, xmonad などのデスクトップ機能がないウィンドウマネージャの壁紙を管理するのに使えます。
GNOME を使用している場合、GNOME Files がデスクトップを管理しないようにする必要があります。それには次のコマンドを実行するのが一番簡単です:
$ gconftool-2 --set /apps/nautilus/preferences/show_desktop --type boolean false
以下のコマンドは最初の壁紙を設定する例です:
$ feh --bg-scale /path/to/image.file
他にも以下のようなスケーリングオプションがあります:
--bg-tile FILE --bg-center FILE --bg-max FILE --bg-fill FILE
次のセッション時に壁紙をまた設定するには、スタートアップファイルに以下を追加してください (例: ~/.xinitrc, ~/.config/openbox/autostart など):
$ sh ~/.fehbg &
壁紙画像を変更するには、上記の feh --bg-scale /path/to/image.file コマンドを実行した後に作成される ~/.fehbg ファイルを編集してください。
Tips and tricks
SVG 画像を開く
$ feh --magick-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/* &
定期的に壁紙を変更するには、スクリプトや 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 ~/.wallpaper を find ~/.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 ユーザーセッションを使用
ユニットサービスファイルを作成:
$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 と feh-wallpaper.service デーモンを有効化して下さい。詳しくはデーモンを参照。