Ubuntuをカスタマイズしている間、昼/午後用と夜/夜用の2つの壁紙があると考えました。
自分に基づいた壁紙を現在の時刻に変更することは可能ですか?もしそうなら、どうすればいいですか?
前もって感謝します。
夜がafter12:00 amから始まりaftermidnight 04:00 24:00に夜が始まると仮定すると、以下のスクリプトの使い方は簡単ですそれが得るように:
次のコマンドでバックグラウンドで実行します。
python3 <script> <begin_of_evening> <end_of_night>
例えば:
python3 /path/to/wallpaper_shift.py 19:00 6:00
日中に好きなように壁紙を設定します。スクリプトは、翌日のシフトでの選択を記憶します。
それで全部です。これで、設定した日の時刻に応じて壁紙が切り替わり、スクリプトが実行されます。
スクリプトは、隠しファイル~/.wallset
に設定された壁紙を記憶します。スクリプトが(再)開始されると、最初にファイルから設定された壁紙を読み取ろうとします。存在しない場合は、いずれか(または両方)を変更するまで、昼と夜の両方のシフトに現在設定されている壁紙を使用して、新しいファイルを作成します。
スクリプトが開始されると、以下を計算します。
その後、壁紙の切り替えの間、スクリプトのみsleeps
スクリプトの機能
#!/usr/bin/env python3
import subprocess
import os
import sys
import time
def write_walls(prefsfile, walls):
# write new set of wallpapers to prefsfile
open(prefsfile, "wt").write(("\n").join(walls))
def set_wall(wall):
# set the wallapaper
new = wall.replace("night:", "").replace("day:", "")
command = "gsettings set org.gnome.desktop.background picture-uri "+\
new
subprocess.Popen(["/bin/bash", "-c", command])
def get_currwal():
# get the current wallpaper
return subprocess.check_output([
"/bin/bash", "-c",
"gsettings get org.gnome.desktop.background picture-uri"
]).decode("utf-8").strip()
def produce_setwalls(prefsfile):
# on startup of the script, try to read the set wallapapers
# or take the currently set on first run
try:
return open(prefsfile).read().splitlines()
except FileNotFoundError:
currwall = get_currwal()
newwalls = ["night:"+currwall, "day:"+currwall]
write_walls(prefsfile, newwalls)
return newwalls
def convert_tosecs(t):
# convert time of the day (hrs/mins) to seconds
t = [int(n) for n in t.split(":")]
return (3600*t[0])+(60*t[1])
# --- set constants
day_period = 24*3600
prefsfile = os.environ["HOME"]+"/.wallset"
# ---
# --- define time- shifts
curr_t = convert_tosecs(time.strftime("%H:%M"))
t1 = convert_tosecs(sys.argv[1])
t2 = convert_tosecs(sys.argv[2])
# ---
# --- define start- data
if any([curr_t > t1, curr_t < t2]):
curr_term = "night"
first_period = 86400 - curr_t + t2
else:
curr_term = "day"
first_period = t1 - curr_t
# ---
# --- define time spans
night_shift = 86400 - t1 + t2
day_shift = 86400 - night_shift
# ---
# run first term, set wallpaper according (possible) settings
set_wallpapers = produce_setwalls(prefsfile)
to_set = [wall for wall in set_wallpapers if curr_term in wall][0]
set_wall(to_set)
time.sleep(first_period)
# then start loop
while True:
if curr_term == "day":
new_daywall = "day:"+get_currwal()
sleeptime = night_shift
new_term = "night"
Elif curr_term == "night":
new_daywall = "night:"+get_currwal()
sleeptime = day_shift
new_term = "day"
toremove = [item for item in set_wallpapers if curr_term+":" in item][0]
# replace possibly changed wallpaper in the prefsfile and the currently
# used set of wallpapers
set_wallpapers.remove(toremove)
set_wallpapers.append(new_daywall)
write_walls(prefsfile, set_wallpapers)
# switch daytime <> night, set the wallpaper accordingly
curr_term = new_term
set_wall([item for item in set_wallpapers if new_term+":" in item][0])
# sleep again...
time.sleep(sleeptime)
wallpaper_shift.py
として保存しますコマンドでターミナルからテスト実行(例):
python3 /path/to/wallpaper_shift.py 19:00 6:00
時刻形式は20:00
である必要があります
すべてが正常に機能する場合は、スタートアップアプリケーションに追加します:ダッシュ>スタートアップアプリケーション>追加コマンドを追加します。
/bin/bash -c "sleep 20 && python3 /path/to/wallpaper_shift.py 19:00 6:00"
自動デスクトップ壁紙チェンジャー を試すことができます。使い方はとても簡単です。
私はあなたが自分でそれをやりたいと思っていますが、なぜ車輪を再発明するのですか
単に実行する:
Sudo apt-getインストールWallch
必要に応じて構成します。