Форум
python - редактор обоев
Достаточно продолжительное время использую рандомную смену обоев, которые показываются при помощи 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Не за что) Я бы мог написать вариант на 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 раз
BigOrange:
@ZEN, ваша команда перестала работать, видимо дообновляли disown ((
Сложно сказать в чем причина. Разве что команда запускается не в bash, а скажем в dash (можно проверить командой ls -la /bin/sh)... В dash, к слову, вообще нет команды disown.
Попробуй вот так запустить:
bash -c "viewnior \"\$(cat ~/.fehbg | awk -F\"'\" '/feh/{print \$6}')\" & disown"В теории должно помочь
первоначальный вариант скрипта слегка переделал и заработало
почему-то смещение из-за каких-то левых символов
#!/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]
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
