Как установить обои рабочего стола KDE через командную строку?

Вопрос или проблема

Как установить обои рабочего стола KDE (файл jpg) из командной строки (например, с помощью скрипта, запущенного пользователем)?

К сожалению, не кажется, что существует простой способ.

Видимо, вам нужно сделать что-то вроде этого (из https://www.kubuntuforums.net/showthread.php/66762-Right-click-wallpaper-changer?p=387392&viewfull=1#post387392):

qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript 'var allDesktops = desktops();print (allDesktops);for (i=0;i<allDesktops.length;i++) {d = allDesktops[i];d.wallpaperPlugin = "org.kde.image";d.currentConfigGroup = Array("Wallpaper", "org.kde.image", "General");d.writeConfig("Image", "file:///media/sda2/Background/SpaceWall/Escape_Function.jpg")}'

или, другой пример, оформленный более аккуратно (адаптировано из https://github.com/bharadwaj-raju/libdesktop/issues/1:

qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript '
    var allDesktops = desktops();
    print (allDesktops);
    for (i=0;i<allDesktops.length;i++) {{
        d = allDesktops[i];
        d.wallpaperPlugin = "org.kde.image";
        d.currentConfigGroup = Array("Wallpaper",
                                     "org.kde.image",
                                     "General");
        d.writeConfig("Image", "file:///path/to/imagefile")
    }}
'

Я также нашел решение на Python.

Как сообщает этот комментарий на Reddit:

#!/usr/bin/env -S bash

path_to_wallpaper="/path/to/file.png"                            # Путь к файлу обоев.
kwriteconfig5                                                    \ # Инструмент конфигурации.
  --file "$HOME/.config/plasma-org.kde.plasma.desktop-appletsrc" \ # Путь к файлу конфигурации.
    --group 'Containments'                                       \
      --group '1'                                                \
        --group 'Wallpaper'                                      \ # Это может быть цветом.
          --group 'org.kde.image'                                \
            --group 'General'                                    \
              --key 'Image' "$path_to_wallpaper"                   # Ключ, содержащий путь к файлу обоев.

Однако, обратите внимание, что в текущем виде этот ответ применим только к cpe:/a:kde:plasma:5cpe:/a:kde:plasma:6 требует использования kwriteconfig6, синтаксис которого может отличаться.

Просто запустите это в скрипте для решения всех ваших проблем:

С использованием решения Криса:

Это детальный ответ, однако я решил свои проблемы, основываясь на решении Криса, и нахожу его намного лучше встроенной функциональности обоев KDE – который работает только на одном мониторе.

Работает на всех мониторах – просто измените переменные sleeptime И location вверху – скопируйте и вставьте в файл .sh и запустите его.

while true
do

# //// НАСТРАИВАЕМЫЕ ПЕРЕМЕННЫЕ ////////////

# время паузы между итерациями
sleeptime=900
# расположение папки с обоями
location="/home/myusername/Pictures"

# ////////////////////////////////////////

array=($(ls $location*)) # заполняем массив содержимым директории
( IFS=$'\n'; echo "${array[*]}" ) # отображаем содержимое массива для отладки

size=${#array[@]}
index=$(($RANDOM % $size)) 
wallpaper=${array[$index]} # случайный выбор

echo 
echo " || ВЫБРАНЫЕ ОБОИ = "$wallpaper

dbus-send --session --dest=org.kde.plasmashell --type=method_call /PlasmaShell org.kde.PlasmaShell.evaluateScript 'string:
var Desktops = desktops();                                                                                                                       
for (i=0;i<Desktops.length;i++) {
        d = Desktops[i];
        d.wallpaperPlugin = "org.kde.image";
        d.currentConfigGroup = Array("Wallpaper",
                                    "org.kde.image",
                                    "General");
        d.writeConfig("Image", "file://'''$location''"https://superuser.com/"${wallpaper}'");
}'
sleep $sleeptime

done

Я запускаю это как стартовый скрипт и больше не беспокоюсь об этом. Приятная особенность в том, что переменная array, содержащая все имена файлов обоев, обновляется при каждом цикле, что позволяет изменить набор обоев и отразить это в работе скрипта.

По состоянию на Plasma 5.27.11 (по крайней мере) рекомендуемый в ответах скрипт недостаточен; вам также нужно будет вызвать метод reloadConfig() для объекта рабочего стола, чтобы обои применялись сразу; я также воспользовался возможностью слегка улучшить и сократить скрипт:

qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript "
    desktops().forEach((d) => {
        d.currentConfigGroup = [
            'Wallpaper',
            'org.kde.image',
            'General',
        ]
        d.writeConfig('Image', 'file:///path/to/wallpaper')
        d.reloadConfig()
    })
"

Коллегам-пользователям OpenSuse Leap: для нас qdbus это qdbus-qt5 (по крайней мере в OpenSuse Leap 15.6).

Это терминальное приложение может помочь вам wu

.

Ответ или решение

Установить обои рабочего стола KDE через командную строку может показаться сложной задачей, особенно для пользователей, привыкших к графическим интерфейсам. Однако это достижимая цель, если знать, как использовать утилиты KDE и командную строку для этой задачи. В данном ответе мы рассмотрим несколько методов выполнения этой задачи, сосредоточившись на удобстве и эффективности.

Теория

Рабочая среда KDE Plasma обеспечивает богатый функционал для настройки внешнего вида рабочего стола, включая установку обоев. На уровне системы KDE использует D-Bus для связи между приложениями. Используя qdbus, мы можем отправлять команды Plasma для изменения настроек, таких как обои. QDBus — это интерфейс для работы с D-Bus в среде Qt, который позволяет нам программно управлять элементами KDE Plasma.

Также возможно изменение настроек конфигурации напрямую через файл конфигурации plasma-org.kde.plasma.desktop-appletsrc с помощью инструмента kwriteconfig5. Это требует немного другой подход, но также обеспечивает контроль над настройками рабочего стола.

Пример

Для начала, рассмотрим пример использования команды qdbus для установки обоев:

qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript "
    desktops().forEach((d) => {
        d.currentConfigGroup = [
            'Wallpaper',
            'org.kde.image',
            'General',
        ];
        d.writeConfig('Image', 'file:///путь/к/вашему/изображению.jpg');
        d.reloadConfig();
    })
"

Это решение позволяет отправить скрипт на D-Bus сервер KDE, который выполняет его для изменения обоев на каждом подключенном рабочем столе.

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

#!/usr/bin/env bash

path_to_wallpaper="/путь/к/вашему/изображению.png"
kwriteconfig5 \
  --file "$HOME/.config/plasma-org.kde.plasma.desktop-appletsrc" \
  --group 'Containments' \
  --group '1' \
  --group 'Wallpaper' \
  --group 'org.kde.image' \
  --group 'General' \
  --key 'Image' "$path_to_wallpaper"

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

kquitapp5 plasmashell && kstart5 plasmashell

Применение

  1. Универсальное применение через скрипт: Напишите скрипт, чтобы автоматизировать этот процесс и сделать его более удобным. Это позволит изменять обои быстро и эффективно, даже через программы-скрипты, работающие по расписанию.

  2. Автоматическая смена обоев: Используйте циклы для автоматической смены обоев с периодом, установленным пользователем. Это поможет придать свежесть и разнообразие рабочему окружению.

  3. Тестирование сценариев расположения изображений: Если у вас несколько рабочих столов или монитор, протестируйте сценарии для различных разрешений и расположений, чтобы добиться наилучшего визуального эффекта.

Работа через командную строку может требовать некоторого уровня технических знаний, но это дает гибкость и контроль над вашим рабочим столом. Эти решения помогут вам установить и автоматизировать смену обоев в KDE на профессиональном уровне, обеспечивая удивительный внешний вид вашего рабочего пространства.

Оцените материал
Добавить комментарий

Капча загружается...