Не отрабатывает команда в "Session and Startup"

Системные сервисы и системы инициализации: systemd, sysvinit и другие


yurius
Аватара пользователя
Сообщения: 41
Зарегистрирован: 15.08.2022

#

AndAnd:Сунь команду в скрипт и будет работать.
Пробовал, не работает.

В общем, нашёл другой путь - даже более радикальный, чтобы файлы в корзину даже не помещались по кнопке Del. В ~/.config/Thunar/accels.scm прописал такую строчку:
(gtk_accel_path "<Actions>/ThunarLauncher/delete" "Delete")
- и теперь при нажатии Del на выделенных файлах вылезает окно-подтверждение удаления, там жмёшь Энтер, и файлы исчезают бесследно. То есть, нафиг эту корзину вообще.

Однако, вопрос, заявленный в топике, так и остался нерешённым: почему не работает команда, прописанная в "Settings" -- "Session and Startup". Это же интересно, чтобы понять вообще границы применимости "Settings" -- "Session and Startup": какие команды там могут работать, а какие не могут в принципе, и почему?
vasek
Сообщения: 458
Зарегистрирован: 31.08.2022

#

yurius:Однако, вопрос, заявленный в топике, так и остался нерешённым: почему не работает команда, прописанная в "Settings" -- "Session and Startup".
Чтобы конкретно ответить на этот вопрос нужно провести анализ, а без него одни гадания.
Во вторых, предположим, что ты решил эту частную проблему ... но стоит сменить файл-манджер, а там не будет таких настроек или они будут измененные … и что ты будешь делать?
Не нужно быть в зависимости от используемых программ - нужно быть выше этого.
Имеется systemd, который и предназначен для решения подобных задач.
Как пример, напишем service, который решает данную задачу.
Создаем файл /etc/systemd/system/trash.service
cat /etc/systemd/system/trash.service
[Unit]
Description=Cleaning Trash
After=multi-user.target

[Service]
Type=idle
ExecStart=/home/vasek/.local/bin/test_trash.sh

[Install]
WantedBy=multi-user.target
……………………………………..…
Содержание скрипта
cat /home/vasek/.local/bin/test_trash.sh
#!/bin/bash
rm -rf /home/vasek/.local/share/Trash/files/*
exit 0
Не забываем сделать его исполняемым
chmod +x /home/vasek/.local/bin/test_trash.sh
………………………………………...
Пояснение
- секция Unit - даем краткое описание и объясняем с помощью опции After, что нужно запускать данный скрипт в многопользовательском режиме (multi-user).
- секция Service - указываем тип сервиса и полный путь к скрипту. В данном случае указали idle - это означает, что нужно просто запустить и забыть (вести наблюдение не нужно), а в параметре ExecStart указываем полный путь к нашему скрипту.

Чтобы все заработало, выполняем две комнды:
sudo systemctl daemon-reload
sudo systemctl enable trash.service

Есть еще один нюанс - это место расположения скрипта, чтобы система понимала и запускала его.
У меня все самописные скрипты находятся в ~/.local/bin … а чтобы система могла их запускать в файл ~/.bash_profile прописал строчку
export PATH=$PATH:/home/vasek/.local/bin
Что понимает система, можно посмотреть в выводе
env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/home/vasek/.dotnet/tools:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/home/vasek/.local/bin

…………………………………………..
ПРОВЕРКА
Смотрим содержимое корзины
ls ~/.local/share/Trash/files
test_trash.txt

… reboot … и провереям корзину
ls ~/.local/share/Trash/files
… пусто ...

Это самый простой сервис, чтобы писать более сложные, нужно читать DOC ...
Иногда проще прописать отдельную команду в .xinitrc, если его используешь ... вообщем все зависит от ситуации ...

Ошибки не исчезают с опытом - они просто умнеют

yurius
Аватара пользователя
Сообщения: 41
Зарегистрирован: 15.08.2022

#

vasek:ExecStart=/home/vasek/.local/bin/test_trash.sh
А, то есть в юните сама команда работать не будет, её надо через ещё другой скрипт запускать? Капец!

Блин, как же всё просто в итоге оказалось! У меня же XFCE запускается через lxdm! И в файле /etc/lxdm/PreLogin я просто прописал свою команду:
/usr/bin/rm -rf /home/yurius/.local/share/Trash/files/*
- и после перезагрузки файлы из корзины исчезли! Ты был прав, что у меня не xinit стартует XFCE.

Проблема РЕШЕНА.
vasek
Сообщения: 458
Зарегистрирован: 31.08.2022

#

yurius:А, то есть в юните сама команда работать не будет, её надо через ещё другой скрипт запускать?
Можно прописывать и отдельную команду и несколько команд, но есть нюансы использования ... а потому проще использовать скрипт.
Также удобно писать свои timers-ы - например, я уже довольно старый и забываю передовать во время показания счетчиков воды и электроэнергии - написал пользователький timers и компьютер мне напоминает об этом (и звуковой сигнал и сообщение) ... очень удобно.
Если уж имеется компьютер, то нужно использовать его по полной.

Ошибки не исчезают с опытом - они просто умнеют

yurius
Аватара пользователя
Сообщения: 41
Зарегистрирован: 15.08.2022

#

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

Спасибо за помощь и примеры скриптов!
Ответить