python - редактор обоев

Программирование 1749 просм. 19 сообщ.

Достаточно продолжительное время использую рандомную смену обоев, которые показываются при помощи feh и нехитрого скрипта:

#!/bin/sh
while true; do
	find ~/.walp -type f \( -name '*.jpg' -o -name '*.png' \) -print0 |
		shuf -n1 -z | xargs -0 feh --bg-fill
	sleep 15m
done

Когда картинок в папке было не так много, то можно было просто её открыть (~/.walp) и удалить/отредактировать.
Однако, искать картинку в распухающей папке с большим количеством файлов вручную занимает очень много времени.
Проще открыть в редакторе текущие обои и что-то с ними сделать.
Недавно обнаружил, что когда происходит смена обоев, то в домашней директории создаётся файл '.fehbg':

#!/bin/sh
'feh' '--bg-fill' '/home/ЮЗЕР/.walp/e28a8e6ba861b8cacfaf44df60e.jpg'

В нём (файле) содержится путь до актуального на текущей момент изображения, которое представлено в виде обоев.
Пришла идея, что эту информацию можно использовать.
Вот скрипт, который позволяет открыть текущие обои в viewnior:
#!/usr/bin/env python

import subprocess, getpass

# # составить команду
comand='viewnior ' + open('/home/ /.fehbg'.replace(' ', getpass.getuser())).readlines()[1][18:]
#print(comand)

# # выполнить и выйти
subprocess.call(comand, shell=True)
raise SystemExit

У меня не получилось сделать такое на "баш", но получилось на питоне3,
если кто подскажет как такое на баше зае*ашить, или оптимизировать пинонячий код,
буду очень признателен.

версия 0.0.2 (понятная и простая)

#!/usr/bin/env python
import os

# путь до ~/.fehbg
path=os.environ['PWD']+'/.fehbg'

# текущее изображение
image=open(path).readlines()[1][18:]

# редактор изображений
editor='viewnior'

# составить команду
comand=editor+' '+image
#print(comand)

# выполнить и выйти
os.popen(comand)
raise SystemExit

BigOrange:


У меня не получилось сделать такое на "баш", но получилось на питоне3,

На bash -e, я бы написал вот так:

viewnior "$(cat ~/.fehbg | awk -F"'" '/feh/{print $6}')" & disown

Привет, ZEN!
воооот, то что нужно.
Спасибо большое!

на питоне хорошо, а на баше лучше

Не за что) Я бы мог написать вариант на Python, но так коротко, как на bash -е, не получится. :)

Да, кстати, если файл ~/.fehbg по какой-то причине отсутствует, то viewnior откроет картинки из домашней директории, если они там есть. Можно доработать однострочник, что бы открывал заранее подготовленную картинку вместо этого. Но не уверен, что оно того стоит.

ZEN:


но так коротко, как на bash
на питоне пробовал сократить, короче твоего варианта не получалось всё равно.
для читаемости просто разложил по полочкам, на скорости особо не сказывается и импорта не избежать как ни крути.

ZEN:


если файл ~/.fehbg по какой-то причине отсутствует...

это в параметрах feh задаётся. (--no-fehbg)
по дефолту создаётся, если права есть.


Добавлено позже:

есть момент ещё один мелкий не досадный, но всё же есть.
когда закрываю viewnior, консоль "занята", надо что-то дописать, чтобы приглашение опять появлялось.

BigOrange:


это в параметрах feh задаётся. (--no-fehbg)
по дефолту создаётся, если права есть.

Я про другую ситуацию) Например, свежая установка системы. feh еще ни разу не запускался и файла нет.

BigOrange:


есть момент ещё один мелкий не досадный, но всё же есть.
когда закрываю viewnior, консоль "занята", надо что-то дописать, чтобы приглашение опять появлялось.

Если я правильно понимаю, то это скорее всего поведение команды disown. Тут уж ничего не поделать.

подскажЫте,а как запилить?
я поудалял 200 скриптов XScreenSaver = "ни о чём/каменный век"
оставил слайдшоу и ещё,какй то,для образца из mate-screensaver ,
у меня стоит заставка http://www.dreamaquarium.com/ ,под Wine,
но иногда и картинки,скопленые тяжким трудом,тоже хочется посмотреть,
кинул рядом в ..... /usr/lib/mate-screensaver/ файл для запуска feh (слайдшоу+рекурс+ещё пару директорий+фулскрин+рандом).

feh -dZzFr -D 3  '/home/svm/Pictures/Wallpaper' '/home/svm/Pictures/aku-aku' '/home/svm/Pictures/animals' 

feh делает полный листинг ,а как бы увидеть последние ,показаные,когда тормознул screensaver.
я его ,скрипт , выбрал в скринсейверах через гуй (в /usr/share/applications/screensavers/ сделал ярлык , .desktop ) ,
демон,mate-screensaver его стартует ,но он не убивает feh ,его могу только как /через ПКМ>exit, а как убить , а-ля = при клике/дрочке мышкой? (ну как обычную заставку).
в этой теме/вопросе , меня заинтересовало,как узнать , какая картинка показывалась последней?,
не вседа найдёшь,то что увидел ,5-15 сек назад (хотелось БЫ видеть лог, последних 5-10,
чтоб знать ,что удалит/подправить и.т.д ,особенно когда они отображаются рандомно
ЗЫ
исправлено 100500 раз

@ZEN, ваша команда перестала работать, видимо дообновляли disown ((

BigOrange:


@ZEN, ваша команда перестала работать, видимо дообновляли disown ((

Сложно сказать в чем причина. Разве что команда запускается не в bash, а скажем в dash (можно проверить командой ls -la /bin/sh)... В dash, к слову, вообще нет команды disown.

Попробуй вот так запустить:

bash -c "viewnior \"\$(cat ~/.fehbg | awk -F\"'\" '/feh/{print \$6}')\" & disown"

В теории должно помочь

@ZEN, Привет!
твоя не рабоать((

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

~/programs/fehbg$ ./feh-bg-edit.py
  File "./feh-bg-edit.py", line 6
    path=/home/sveta/.fehbg
         ^
SyntaxError: invalid syntax

первоначальный вариант скрипта слегка переделал и заработало
почему-то смещение из-за каких-то левых символов

#!/usr/bin/env python
import subprocess, getpass
# # составить команду
comand='viewnior ' + open('/home/ /.fehbg'.replace(' ', getpass.getuser())).readlines()[1][15:-3]
#print(comand)

# # выполнить и выйти
subprocess.call(comand, shell=True)
raise SystemExit

то есть было readlines()[1][18:]
теперь стало readlines()[1][15:-3]

Интересно почему изменился формат файла ~/.fehbg... Покажи содержимое, посмотрим что можно поправить в однострочнике, что бы все учесть

@ZEN, там в строке добавились "лишние" символы.
питон видит по 3 с каждой стороны.

а linuxhub.ru всё?

BigOrange:


@ZEN, там в строке добавились "лишние" символы.
питон видит по 3 с каждой стороны.

Нужно их как-то распарсить. Потому что вот эти изменения

BigOrange:


то есть было readlines()[1][18:]
теперь стало readlines()[1][15:-3]

решают проблему лишь на время. Ты же не хочешь каждую неделю исправлять скрипт? :)

BigOrange:


а linuxhub.ru всё?

Да, более пяти лет прошло, а цель свою форум не оправдал. Разве что был полезной строчкой в резюме. :)

Кстати, если нужны статьи с форума, то есть возможность поднять его локально с помощью docker.
https://github.com/LinuxHubRu/dockerized-linuxhub_ru

@BigOrange, ты же feh юзаешь, подскажи, как его запускать без рамки окна?

UPD. Разобрался сам, надо запускать с ключом -x. Это я в тунар добавил особое действие - слайдшоу, а в нем рамка - как у коровы седло:

Выделил изображения, открыл и оно само их переключает, можно и колесиком, если интересно:

Name        : View as Slideshow

Description : Shows images in a nice view

Command     : feh -. -g800x600 -Z -d -x -Bblack -D2.5 %F

Appearence Conditions:

File Pattern: *

Appears if  : Images

@redix, ЭЭЭЭЭЭЭЭЭЭ....
я ещё юзаю опенбокс там всё можно без рамки окна запускать
~/.config/openbox/rc.xml

    <keybind key="W-0x24">
      <action name="ToggleMaximizeFull"/>
      <action name="ToggleDecorations"/>
    </keybind>
    <keybind key="W-h">
      <action name="ToggleDecorations"/>
    </keybind>

BigOrange:


юзаю опенбокс там всё можно без рамки окна запускать

Если поставить компиз, то все и так будет без рамки. ))))

Вот что получилось:

ЗЫ. В следующий раз нужно будет установить частоту 60hz в vokoscreen, а то моргает.

Написать ответ…