Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Как добавить "Корзину" на панель приложений gnome!  (Прочитано 5903 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн zg_nico

  • Заслуженный пользователь
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3513
  • Nil mortalibus arduum est
    • Просмотр профиля
там нужно алгоритм прописать
интересно: а это вообще возможно - динамически изменить значок для .desktop-файла?! (о_О). Мне видится лишь один путь: сажать какого-нибудь демона, который мониторит содержимое каталога .../Trash каким-нибудь ls $HOME/.local/share/Trash/files/. Если в выхлопе ls ничего нет, то держим в заведомо понятном месте символьную ссылку на "иконка пустой корзины". Если в выхлопе что-то появляется - то удаляем старую ссылку и создаем новую с блекджеком и на "иконка полной корзины". А в desktop-файле на месте с Icon=... вместо иконки прописываем эту самую символьную ссылку... Только что-то мне сомнительно что взлетит. Да и оперативку есть лишним "мониторингом" как-то не кошерно... Да и мониторится же это уже по-умолчанию - понять бы только где...
Thunderobot G150-D2: Intel SkyLake Core i7-6700HQ 2.60GHz, 8Gb DDR4 2133 MHz, Intel HD530, NVidia GeForce GTX 960M 2Gb.  Ubuntu 16.04 64x [Unity], KUbuntu 18.04 64x.

Оффлайн MrGaijin

  • Автор темы
  • Новичок
  • *
  • Сообщений: 18
    • Просмотр профиля
Цитировать
Да и оперативку есть лишним "мониторингом" как-то не кошерно... Да и мониторится же это уже по-умолчанию - понять бы только где...

Ну как бы да...

Мне вот другое интересно стало "Как они реализовали эту мусорку"! ;D

Оффлайн MrGaijin

  • Автор темы
  • Новичок
  • *
  • Сообщений: 18
    • Просмотр профиля

TO BE CONTINUED...  :coolsmiley:


Пользователь добавил сообщение 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
« Последнее редактирование: 08 Мая 2018, 05:36:53 от MrGaijin »

 

Страница сгенерирована за 0.062 секунд. Запросов: 25.