TO BE CONTINUED...
Пользователь добавил сообщение 07 Мая 2018, 18:04:11:
Из личной переписке с
zg_nico.
MrGaijin, ну что, есть результат, похоже... Итак, вот такой проект имеем:
Суть вопроса:
1. Организуем ярлык для корзины, который можно вытащить туда, куда только можно вытащить ярлык (на панели, на специально закрепленные области в DE и тому подобное)
2. В этом ярлыке предусматриваем функцию "Очистить корзину" по ПКМ, которая работает с запросом.
3. Ярлык динамический, т.е. его иконка меняется в завсисимости от того, есть файлы в корзине или нет.
Как все это сотворить:
1. Создаем сам ярлык:
sudo gedit /usr/share/applications/trash.desktop
В ярлыке прописываем (вместо ПОЛЬЗОВАТЕЛЬ вписать свой юзернейм, с которым логинились, - иначе не работает нифига):
[Desktop Entry]
Type=Application
Icon=/home/ПОЛЬЗОВАТЕЛЬ/.icons/trash.svg
Name=Trash
Name[ru]=Корзина
Comment=Открыть корзину
Exec=nautilus trash:///
StartupNotify=true
Terminal=false
Actions=EmptyTrash
[Desktop Action EmptyTrash]
Name=Empty Trash
Name[ru]=Очистить корзину
Terminal=false
Exec=sh -c 'Ts=`ls $HOME/.local/share/Trash/files | wc -l` && if `zenity --question --title="Очистка корзины" --text="Файлов в корзине: $Ts\n Вы действительно хотите очистить корзину?"`; then gio trash --empty; fi'
Сохраяем, закрываем (это уже не тот ярлык, что был в нашем топике - я его модифицировал, - пересоздайте). Не забываем присвоить права на исполнение:
sudo chmod + /usr/share/applications/trash.desktop
2. Теперь создаем управляющий скрипт для "перещелкивания" ярлыка:
gedit $HOME/TrashMonitor
В появившемся окне вводим код:
#!/bin/bash
#
# Скрипт мониторинга состояния корзины. Своеобразный "триггер" для ярлыка
#
WAIT="1" # Время ожидания перед следующей проверкой в секундах
FullTrash='/usr/share/icons/Humanity/places/64/user-trash-full.svg' # Иконка "полной корзины"
EmptyTrash='/usr/share/icons/Humanity/places/64/user-trash.svg' # Иконка "пустой корзины"
# Проверка наличия директории - бывает что и не бывает, серьезно
Test=`ls $HOME/.icons 2>/dev/null`
if [[ $Test == "" ]]
then
#директории нет - создаем
mkdir $HOME/.icons
fi
# Проверка наличия символьной ссылки:
Test=`ls $HOME/.icons/trash.svg 2>/dev/null`
if [[ $Test == "" ]]
then
#ссылки нет - создаем
ln -s $FullTrash $HOME/.icons/trash.svg
fi
#получаем текущее состояние файлов в корзине
TrushStatus=`ls $HOME/.local/share/Trash/files | wc -l`
#получаем текущий ярлык:
IconStatus=`readlink $HOME/.icons/trash.svg`
#Проверим на соответствие:
if [[ $TrushStatus -eq "0" ]]
then
if [[ $IconStatus == $FullTrash ]]
then
#не соответствует - меняем
rm $HOME/.icons/trash.svg
ln -s $EmptyTrash $HOME/.icons/trash.svg
fi
else
if [[ $IconStatus == $EmptyTrash ]]
then
#не соответствует - меняем
rm $HOME/.icons/trash.svg
ln -s $FullTrash $HOME/.icons/trash.svg
fi
fi
#организуем бесконечный цикл
while :
do
#файлов в корзине на этой итерации:
CurStat=`ls $HOME/.local/share/Trash/files | wc -l`
#проверяем: поменялся ли статус
if [[ ! $TrushStatus -eq $CurStat ]]
then
if [[ $CurStat -eq 0 ]]
then
#Статус поменялся, и теперь корзина пуста
echo 'Новый ярлык: корзина пуста'
rm $HOME/.icons/trash.svg
ln -s $EmptyTrash $HOME/.icons/trash.svg
else
#проверяем - оставались ли файлы в корзине в прошлой итерации
if [[ ! $TrushStatus -gt 0 ]]
then
#Статус поменялся, и теперь корзина не пуста
echo 'Новый ярлык: корзина содержит файлы'
rm $HOME/.icons/trash.svg
ln -s $FullTrash $HOME/.icons/trash.svg
fi
fi
#сохраняем изменившийся статус корзины в переменной
TrushStatus=$CurStat
fi
sleep "$WAIT" #пауза между итерациями
done
сохраняем, закрываем. Даем скрипту права на исполнение и прячем его от пользователя:
sudo chmod + $HOME/TrashMonitor
echo TrashMonitor >> $HOME/.hidden
3. Запускаем для проверки:
sh $HOME/TrashMonitor
, попробовать поудалять в корзину/повосстанавливать из корзины файлы. Посмотреть за поведением иконки. Должны меняться значки, ну и в выводе консоли при этом будут соответствующие записи. Остановить работу скрипта на данном этапе можно нажав в этом терминале Ctrl+C, либо закрыв окно терминала (дочерний процесс будет убит автоматически). Если все работает как надо - можно запариваться с автозагрузкой.
4. Для добавления всей этой бяки в автозагрузку выполняем:
gnome-session-properties
, нажимаем там "Добавить"/"Add", и вводим такое содержимое в поля (вместо ПОЛЬЗОВАТЕЛЬ вписываем свой юзернейм, с которым логинились, - иначе нифига не заработает):
Имя: TrashMon
Команда: nohup /home/ПОЛЬЗОВАТЕЛЬ/TrashMonitor > /dev/null &
Описание: Мониторинг состояния корзины
После перезагрузки проверяем состояние корзины. Должна вести себя адекватно "изкаробки". Если что-то пошло не так - завершить этот процесс мониторинга корзины можно командой
killall TrashMon
в терминале в любую секунду (после этой команды естественно придется повторно инициировать процесс чтобы восстановить работу видоизменений значка.
Р Е З У Л Ь Т А Т !https://hkar.ru/TXuQ