Я изучил, как изменить фон через терминал, но я могу заставить терминал изменяться на другой фон каждый раз, когда я вхожу в систему?
Сценарий ниже взятий каталог как аргумент (предпочтительно только содержащий изображения), выбирает случайную форму объекта его содержание и устанавливает объект как обои. Это предназначается, чтобы быть запущенным на входе в систему пользователя, хотя может использоваться отдельно точно также.
В первую очередь, сценарий должен быть сохранен где-нибудь в системе. Предпочтительно, это должно быть помещено в Ваш ~/bin
каталог. Если Вы не имеете bin
каталог в Вашем корневом каталоге, затем просто создайте тот.
Затем, удостоверьтесь, что сценарий имеет исполняемые полномочия. Можно использовать также chmod +x ~/bin/set_random_wallpaper.py
или сделайте это GUI путь путем щелчка правой кнопкой по файлу и проверке Allow executing file as program
на вкладке Permissions меню Properties.
Сценарий требует каталога как аргумента. Предпочтительно, необходимо дать ему полный путь. Например:
set_random_wallpaper.py /home/JohnDoe/Pictures/wallpapers/
Если Вы делаете его через командную строку, то можно дать относительный путь, Pictures/wallpapers/
, но для установки его для выполнения после входа в систему автоматически используйте полный путь.
Для создания файла выполненным после каждого входа в систему откройте программу Startup Applications и нажмите кнопку "Add". Используйте полный путь для управления и к папке:
/home/JohnDoe/bin/set_random_wallpaper.py /home/JohnDoe/Pictures/wallpapers/
Вот именно!
Сценарий также доступен на GitHub:
#!/usr/bin/env python3
"""
Author: Serg Kolo , <1047481448@qq.com>
Date: December, 21,2016
Purpose: Sets random wallpaper from a given directory
Written for: https://askubuntu.com/q/851705/295286
"""
from gi.repository import Gio
import os,sys,random
def gsettings_set(schema, path, key, value):
"""Set value of gsettings schema"""
if path is None:
gsettings = Gio.Settings.new(schema)
else:
gsettings = Gio.Settings.new_with_path(schema, path)
if isinstance(value, list):
return gsettings.set_strv(key, value)
if isinstance(value, int):
return gsettings.set_int(key, value)
if isinstance(value,str):
return gsettings.set_string(key,value)
def error_and_exit(message):
sys.stderr.write(message + "\n")
sys.exit(1)
def select_random_uri(dir_path):
selection = random.choice(os.listdir(dir_path))
selection_path = os.path.join(dir_path,selection)
while not os.path.isfile(selection_path):
selection = random.choice(os.listdir(dir_path))
selection_path = os.path.join(dir_path,selection)
selection_uri = Gio.File.new_for_path(selection_path).get_uri()
return selection_uri
def main():
""" Program entry point"""
if len(sys.argv) != 2:
error_and_exit('>>> Script requires path to a directory as single argument')
if not os.path.isdir(sys.argv[1]):
error_and_exit('>>> Argument is not a directory')
img_dir = os.path.abspath(sys.argv[1])
uri = select_random_uri(img_dir)
try:
gsettings_set('org.gnome.desktop.background',None,'picture-uri',uri)
except Exception as ex:
error_and_exit(ex.repr())
if __name__ == '__main__': main()
Сам сценарий работает довольно простым способом, но мной пряный это с несколькими моими собственными функциями. Основная функция проверяет, существует ли аргумент и если тем аргументом является каталог - иначе это выходит. Если все в порядке, мы продолжаем получать полный путь каталога и давать его set_random_uri()
функция.
Как Вы можете или не можете знать, обои установлены в dconf
база данных, к которой можно получить доступ и изменить с gsettings
команда. Простая командная строка путь
gsettings set org.gnome.desktop.background picture-uri file:///home/JohnDoe/Pictures/cool_wallpaper.jpg
file://...
частью является URI файла (который является по существу закодированным путем файла и довольно полезен, если Ваша система использует другую локаль, чем английский язык). Во-первых, мы должны выбрать случайный файл и получить его URI. Это просто - мы используем random.choice()
выбрать из списка и os.listdir()
получить список объектов в каталоге. Что, если наш случайный выбор, оказывается, каталог и не файл? Ну, это - то, для чего цикл с условием продолжения в select_random_uri
. После того как мы довольны выбором, мы получаем
Ну, оттуда это - в значительной степени то же самое, которое происходит в gsettings set
команда, но я использую пользовательски записанный gsettings_set()
функция, избегая потребности назвать внешнюю команду, и это было полезно для других проектов, таково как Индикатор Списка Средства запуска.
Вот именно! Весело проведите время кодировав и наслаждайтесь Ubuntu ответственно!