LINUX.ORG.RU

Как узнать текущие обои в KDE через консоль?

 ,


0

1

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

Но имя файла содержит название, отсюда и пара вопросов:

  • Можно ли где что вручную добавить (без conky) чтобы в углу экрана писался путь и имя файла текущих обоев рабочего стола? Может тут что дописать можно?
vim /usr/share/plasma/wallpapers/org.kde.slideshow/contents/ui/main.qml 
  • Как из консоли узнать тоже самое? Я знаю где лежит конфиг, и придумал такой костыль:
cat ~/.config/plasma-org.kde.plasma.desktop-appletsrc | grep -B 1  SlideInterval

Но может есть решение более правильное через запросы к системе, а не прямой grep конфига?

А если название вставить непосредственно в картинку? Сделать копию директории и в файлы этой директории отредактировать соответствующим образом. Думаю это будет быстрее и проще чем победить qml

anonymous
()
Ответ на: комментарий от anonymous

Спасибо, но добавлять текст на картинку или держать избыточную актуальную копию всех скриншотов для меня неприемлимо.

hikikomori ★★★
() автор топика

сделай себе слайдшоу из дерева каталогов вручную - man feh
там можно мелким шрифтом название файлов оказывать, убрать рамку, сделать фулсрин или неочень и тд и тп
ну и потом уже через at или какой планировщик повесишь себе запуск в нужное время (или по хоткею)

anonymous
()
Ответ на: комментарий от anonymous

Что такое feh ? Мне отдельное слайдшоу не нужно, речь только о слайдшоу обоев рабочего стола.

hikikomori ★★★
() автор топика
...
Component {
  id: baseImage
                
  Text {
    id: path
    text: root.modelImage
    anchors.fill: parent
    visible: mainImage.status === Image.Ready && !blurLoader.active
    z: 2
  }

Дальше под себя подправь расположение и цвета.

l4gfcm ★★
()
Последнее исправление: l4gfcm (всего исправлений: 1)
Ответ на: комментарий от l4gfcm

Попробовал поместить фрагмент

Text {
    id: path
    text: root.modelImage
    anchors.fill: parent
    visible: mainImage.status === Image.Ready && !blurLoader.active
    z: 2
  }

в

/usr/share/plasma/wallpapers/org.kde.slideshow/contents/ui/main.qml

после

Component {
  id: baseImage

но без эффекта. Надо как-то без перезагрузки принудительно перечитать конфиг?

hikikomori ★★★
() автор топика
Ответ на: комментарий от l4gfcm

Я тоже так подумал сперва сделать, но без эффекта. Перезагрузка приняла, но вместо обоев черный экран. Что-то не туда или не так вставили. Вернул старый конфигскрипт, сменил режим обоев и обратно слайдшоу - заработал. Вопрос остаётся.

hikikomori ★★★
() автор топика
Ответ на: комментарий от l4gfcm

Спасибо, попробую. Но текст он лепит на экран или на картинку? Картинки могут растягиваться, обрезаться, ещё внизу у меня панель задач…

Попробовал, ничего. Вот фрагмент скрипта с моими правками:

    Component { 
        id: baseImage 
 
        Image { 
            id: mainImage 
 
            property alias color: backgroundColor.color 
            property bool blur: false 
 
            asynchronous: true 
            cache: false 
            autoTransform: true 
            z: -1 
 
            QQC2.StackView.onRemoved: destroy() 
 
            Rectangle { 
                id: backgroundColor 
                anchors.fill: parent 
                visible: mainImage.status === Image.Ready && !blurLoader.active 
                z: -2 
            } 
 
// Добавление подписи к изображению 
 
            Text { 
                  id: path 
                  text: root.modelImage 
                  anchors.fill: parent 
                  visible: mainImage.status === Image.Ready && !blurLoader.active 
                  verticalAlignment: Text.AlignBottom 
                  z: 2 
                 } 
 
// конец изменений 
 
            Loader { 
                id: blurLoader

hikikomori ★★★
() автор топика
Последнее исправление: hikikomori (всего исправлений: 1)
Ответ на: комментарий от hikikomori

Ты прав, лепит на картинку. Этот же кусок кода можно без проблем поместить внутрь root элемента, будет рисовать по экрану. После изменений killall plasmashell && kstart5 plasmashell, убедись что выбран режим слайдшоу.

l4gfcm ★★
()
Ответ на: комментарий от hikikomori
...
        pendingImage.statusChanged.connect(replaceWhenLoaded);
        replaceWhenLoaded();
    }

    Text { 
        text: root.modelImage 
        anchors.bottom: parent.bottom 
        anchors.left: parent.left
        anchors.bottomMargin: 60
        visible: mainImage.status === Image.Ready && !blurLoader.active 
    } 

    Component {
        id: baseImage
...

Протестировал, можешь подправить margin при необходимости.

l4gfcm ★★
()
Ответ на: комментарий от l4gfcm

Попробовал после:

QQC2.StackView { 
    id: root

и перезапустил plasmashell. Снова ничего. даже под нижнюю панель заглянул, пусто. Вы сами пробовали?

hikikomori ★★★
() автор топика
Ответ на: комментарий от hikikomori

Да, всё с первой версии проверял. Первый раз только плохо перенес код на форум.

Цвет текста черный, на темных обоях будет незаметно.

l4gfcm ★★
()
Последнее исправление: l4gfcm (всего исправлений: 1)
Ответ на: комментарий от l4gfcm

У меня снизу панель меню и задач. И фон, которым дополняются широкие картинки по вертикалям черный. Поэтому не видел. Изменил bottom на top А как изменить цвет на скажем зелёный, изменить размер? И можно ли дополнить его фоном? задать заведомый фон на всю длину строки вне зависимости от кол-во букв.

hikikomori ★★★
() автор топика

Вариант путём скриптинга получения названия в консоли вот такой есть:

qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript '                                                                                                                        
         var Desktops = desktops();
         for ( i = 0; i < Desktops.length; i++ ) {
             d = Desktops[i];
             d.currentConfigGroup = Array( "Wallpaper",
                                           "org.kde.image",
                                           "General" );
             print( `Desktop ${i}: ${d.readConfig( "Image" )}\n` );
         }'

Выведет для каждого рабочего стола в многомониторных конфигурациях текущие обои в формате Desktop <номер начиная с нуля>: <путь к файлу обоев>

Конечно это можно улучшить, добавить проверки на то, что используется действительно плагин обоев и т.п., но общая идея такая.

LordTermor ★★
()
Ответ на: комментарий от l4gfcm

А куда это вставить?

Мой фрагмент изменений сверху:

// sudo vim /usr/share/plasma/wallpapers/org.kde.slideshow/contents/ui/main.qml
QQC2.StackView {
    id: root

// Добавление подписи к изображению

            Text {
                  id: path
                  text: root.modelImage
                  anchors.fill: parent
                  visible: mainImage.status === Image.Ready && !blurLoader.active
                  verticalAlignment: Text.AlignTop
                  z: 2
                 }

// конец изменений

В вашем сбщ был отвлечённый пример или куда-то его добавить? Я пока просто добавил из него color: "#00FF00" и вернул черный фон) Остальное это долго читать документацию, мне бы пару примеров, а там зацеплюсь. За ссылку спасибо. Например как изменить путь для экономии места?
С file://home/username/Изображения/smplayer_screenshots/*
на ../smplayer_screenshots/*

вычеркнув избыточную информацию. Имена некоторых файлов и так длинные) Тогда можно будет увеличить шрифт.

@moderator, не режьте плз фрагмент кода ^^^. В прошлый раз приводил и он пропал(

hikikomori ★★★
() автор топика
Последнее исправление: hikikomori (всего исправлений: 3)
Ответ на: комментарий от LordTermor

Это как день потерять, потом за час долететь?) Скрипт вроде бы на баше? Или с каким расширением файл делать?)

Попробовал запустить как sh, вывел 4штуки, но не угадал ни одной из 2х картинок. Может это что-то другое.

Всё же вариант грепать скрипт проще и он работает:

cat ~/.config/plasma-org.kde.plasma.desktop-appletsrc | grep -B 1  SlideInterval | grep Image

Сразу вижу два пути.

hikikomori ★★★
() автор топика
Ответ на: комментарий от hikikomori

А, тю, я не заметил что-то, что используется Slide Show. Это для обычной картинки вариант.

Для слайдшоу версию попозже скину.

Скрипт вроде бы на баше?

Ну по сути это вызов одной команды, которая внутри себя отправляет плазме скрипт на JS и выводит ответ. Так что bash подойдет вполне.

LordTermor ★★
()
Ответ на: комментарий от hikikomori

Приведенный кусок замени вставь по месту приведенном выше. Как узнать текущие обои в KDE через консоль? (комментарий)

Немного поясню код: в квадрат с цветом по размерам текста вписан сам текст.

Ты тут же, в теле квадрата, можешь написать функцию на js и сделать так: text: myJsCutFn(root.modelImage)

l4gfcm ★★
()
Последнее исправление: l4gfcm (всего исправлений: 1)
Ответ на: комментарий от l4gfcm

Так, что-то мозг забурлил, я опять туплю в прострации куда что мне вставлять. Можете отталкиваться от моего последнего коммита? Как узнать текущие обои в KDE через консоль? (комментарий) Что из вашего фрагмента и куда добавить? В js я ноль, саму функцию myJsCutFn() к сожалению не напишу. :(

Вот обновился, и прогнозируемо мои патчи потерлись.

Пробовал кидать файл в ~/.local/share/plasma/wallpapers/org.kde.slideshow/contents/ui/ но тогда черный экран и ничего. Кидать пробовал как один, так всей папкой: config.qml, main.qml, WallpaperDelegate.qml

Плюнул, снова отредактировал на /usr/share.

hikikomori ★★★
() автор топика
Ответ на: комментарий от hikikomori

Собственно там же, вместо добавленного ранее Text, вставь новый код.

С js почти не знаком, разбираться с обработкой строк лень.

Обрати внимание, в терминале после выполнения kstart5 plasmashell сыпятся логи движка, что крайне полезно при отладке.

l4gfcm ★★
()
Ответ на: комментарий от hikikomori

В общем-то надо было просто заменить плагин обоев:

qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript '                                                                                                                        
         var Desktops = desktops();
         for ( i = 0; i < Desktops.length; i++ ) {
             d = Desktops[i];
             d.currentConfigGroup = Array( "Wallpaper",
                                           "org.kde.slideshow",
                                           "General" );
             print( `Desktop ${i}: ${d.readConfig( "Image" )}\n` );
         }'
LordTermor ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.