Я могу автоматически изменить обои для рабочего стола каждый раз, я вхожу в систему

Я изучил, как изменить фон через терминал, но я могу заставить терминал изменяться на другой фон каждый раз, когда я вхожу в систему?

2
задан 21 December 2016 в 19:18

1 ответ

Введение

Сценарий ниже взятий каталог как аргумент (предпочтительно только содержащий изображения), выбирает случайную форму объекта его содержание и устанавливает объект как обои. Это предназначается, чтобы быть запущенным на входе в систему пользователя, хотя может использоваться отдельно точно также.

Установка и Использование

В первую очередь, сценарий должен быть сохранен где-нибудь в системе. Предпочтительно, это должно быть помещено в Ваш ~/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 ответственно!

Дополнительный ресурс

1
ответ дан 2 December 2019 в 04:52

Другие вопросы по тегам:

Похожие вопросы: