Алгоритм для изменения обоев для рабочего стола человечности

Так, я знаю, что уже существуют некоторые программы по Интернету, который делает этот прием. Но я предполагаю, что это должно быть очень простой программой для создания.

Я могу сделать его с C и/или сценарием оболочки? Я хочу сделать функцию, которая делает что-то как bool setDesktopBG(ImagePath path) каковы основные вызовы, которые я должен выполнить, чтобы сделать это? К каким пакетам я должен получить доступ, чтобы сделать это? Я никогда не кодировал ничего связанного с ОС как это так, я не знаю, где точно начать?

Кроме того, действительно ли этот вопрос более подходит для Переполнения стека? Если это будет иметь место, то я удалю его и отправлю там.Заранее спасибо.

1
задан 11 March 2016 в 01:48

1 ответ

Что изменяет обои

В случае поведения Ubuntu по умолчанию когда дело доходит до фонов это установлено через gsettings. В оболочке гайки это - форма базы данных для настроек к различным приложениям. Простая команда - это:

gsettings set org.gnome.desktop.background picture-uri "$FILE" 

, где "$FILE" переменная сценария оболочки, которая содержит полный путь для обработки изображений в форме file:///path/to/image.png

Это несколько отличается от других настольных сред. Думайте о Единице Ubuntu и Gnome как наличие слоя выше типичного сервера X11 (т.е. слоя выше среды GUI). В таких средах как blackbox или openbox необходимо было бы назвать внешнюю программу. Например, feh --bg-scale /path/to/image

Я предполагаю, что Вы хотите иметь дело со стандартной средой - Единица Ubuntu.

Создание функции оболочки

Вот пример того, что я использую в моем .bashrc файл.

function chbackground {
    FILE="'file://$(readlink -f "$1" )'" 
    echo changing to "$FILE" 
    gsettings set org.gnome.desktop.background picture-uri "$FILE" 
}

Функция может быть вызвана как так

chbackground WALLPAPERS-FOLDER/cool-background.png

Эта функция имеет две важных части. Во-первых, у нас могут или быть полный путь или частичный путь к файлу - это что readlink -f "$1" заботится о - это возвращает полный путь для обработки изображений. Затем мы превращаем это в строку путем объединения вывода readlink -f "$1" и file://. Помните, путь Unix всегда запускается с корневой папки, /, таким образом, нам нужно только продвижение двух наклонных черт там. Результат был бы file:///home/user/WALLPAPERS-FOLDER/cool-background.png представьте в виде строки и сохраненный в FILE переменная.

Наконец мы звоним gsettings с FILE как аргумент.

Эта функция может быть частью любого сценария и названный с любым частичным или полным путем как параметр

Соединение сценария

Вот сценарий, который я изобразил схематически приблизительно за 15 минут, которые войдут в список изображений, и затем выберут случайное изображение из того списка и установят предпосылки к тому изображению. Сценарий также помещается в мой GitHub, sergrep репозиторий репозитория и будет разработан просто немного больше для включения дополнительной функциональности, но по большей части, версия кода здесь делает большое задание.

Для автоматизации этого сценария обратитесь к тому, Как я заставляю программу автоматически запустить каждый раз, когда я вхожу в систему?

#!/usr/bin/env bash
#
###########################################################
# Author: Serg Kolo , contact: 1047481448@qq.com 
# Date: March 10th 2016 
# Purpose: Set random wallpaper
#      To make it start automatically, add it as one of 
#          the Startup Applications in Ubuntu's Unity 
#          or Gnome 
# 
# Written for: https://askubuntu.com/q/744464/295286
# Tested on: Ubuntu 14.04 LTS
###########################################################
# Copyright: Serg Kolo , 2016
#    
#     Permission to use, copy, modify, and distribute this software is hereby granted
#     without fee, provided that  the copyright notice above and this permission statement
#     appear in all copies.
#
#     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
#     THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
#     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
#     DEALINGS IN THE SOFTWARE.

ARGV0="$0"
ARGC=$#
change_background()
{
    FILE="'file://$(readlink -f "$1" )'" 
    echo changing to "$FILE" 
    gsettings set org.gnome.desktop.background picture-uri "$FILE"
}

make_list()
{
  # -max-depth may be optional , if you want to 
  # traverse subdirectories,too
  find "$1" -maxdepth 1 -type f > "$2"
}

main()
{
  # Variables
  local DISPLAY=:0 # ensure this is set
  local DIR="$1"
  local LIST="/tmp/wallpaper.list"
  local TIME="$2"
  # cat $LIST # for debugging only
  make_list "$DIR" "$LIST"
  while true 
  do
     change_background $( shuf $LIST | head -n 1   )
     sleep "$TIME"      
  done
}

main "$@"
2
ответ дан 7 December 2019 в 13:48

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

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