パッケージを含む面白い端末スクリーンセーバーを作成しようとしていますcmatrix
(端末を映画などのパッケージに切り替えます)。行列)xprintidle
端末のアイドル時間を確認します。
少し助けました。スーパーユーザーのテーマの回答そして、次のようなシェルスクリプトを使用します。
スクリーンセーバー
#!/bin/sh
set -x # Used for debugging
IDLE_TIME=$((60*1000)) #a minute in milliseconds
screen_saver(){
# My screensaver function
cmatrix -abs
}
sleep_time=$IDLE_TIME
triggered=false
while sleep $(((sleep_time+999)/1000)); do
idle=$(xprintidle)
if [ $idle -ge $IDLE_TIME ]; then
if ! $triggered; then
screen_saver
triggered=true
sleep_time=$IDLE_TIME
fi
else
triggered=false
sleep_time=$((IDLE_TIME -idle+100))
fi
done
以下を使用してフォアグラウンドでスクリプトを実行すると、スクリプトは完全に実行されます。
./screensaver.sh
マトリックス端末がトリガされていることがわかります。
ただし、バックグラウンドで実行すると、&
関数はscreen_saver()
バックグラウンドで実行されて表示されません。マトリックス端末を表示する唯一の方法は、fg
端末を前景にインポートすることです。
質問
fg
関数でscreen_saver()
次のコマンドを使用できますか?
screen_saver(){
cmatrix -abs && fg
}
それとも、シェルスクリプトからそれを前景にインポートするための同様のオプションはありますか?
私はこれを私のスクリプトに追加して.bashrc
実際にカスタマイズ可能な機能になることを願っています。可能ですか?
答え1
作業fg
コマンドは対話型セッションにのみ接続され、バッチモード(スクリプト)では意味がありません。
set -m
技術的には、これらのインタラクティブスクリプトがないため意味がないので、以下を使用して有効にすることができます。
答えはこんな感じです。実際にはできません。
答え2
tmuxを使用している場合は、「スクリーンセーバー」オプションがあります。
set -g lock-command "cmatrix -abs"
set -g lock-after-time 10 #inSeconds
あなたの質問に対する正確な答えではありません。