Как отключить звук, когда XSCreenSaver заблокирует экран

Проблема связана с комбинацией первой строки сценария и самой команды rsync . Давайте посмотрим ...

Команда find / backup / staging / -mtime +7 -exec rm -rf {} \; удаляет все файлы и целые деревья каталогов где файл или корень дерева каталогов не изменялся в течение как минимум семи дней.

Вы также используете rsync -a ... , который копирует файлы и каталоги во время модификации.

В результате ваша находка сопоставит и удалит файлы и деревья каталогов, которые были созданы не менее семи дней назад. Обычно это системные файлы, такие как / bin / ls и почти наверняка сам / . Вы можете проверить с помощью ls -ld / и подтвердить, что отображаемая дата изменения больше недели назад.

Одним из решений может быть использование rsnapshot , который очень хорошо управляет синхронизированным и датированным резервным копированием. Другой вариант - использовать rsync -a ...--delete , но в целом я бы рекомендовал rsnapshot .

Если вы действительно хотите развернуть собственное решение, рассмотрите что-то вроде этой пары команд:

find /backup/staging -mtime +7 \! -type d -delete
find /backup/staging -depth -type d -exec rmdir {} + 2>/dev/null

Это удалит все не каталоги (например, файлы, узлы устройств и т. Д.), Которые старше семи дней, а затем удалить все пустые каталоги.

2
09.09.2018, 00:09
2 ответа

Я обнаружил, что самым простым способом является сценарий оболочки, который запускается при запуске. Это должно работать независимо от -используемой экранной заставки (, если таковая имеется ).

#!/bin/bash

gdbus monitor -y -d org.freedesktop.login1 | grep LockedHint --line-buffered |
    while read line
    do
        case "$line" in
            *"<true>"*)
                amixer -q -D pulse sset Master off
            ;;
            *"<false>"*)
                amixer -q -D pulse sset Master on
            ;;
        esac
    done
0
27.01.2020, 22:08

Запустить этот скрипт (или настроить автозапуск этого скрипта при входе в систему):

#!/bin/bash -euET
{
set -o pipefail

export DBUS_SESSION_BUS_ADDRESS="${DBUS_SESSION_BUS_ADDRESS:-unix:path=/run/user/$(id -u)/bus}"
export DISPLAY="${DISPLAY:-:0}"

xscreensaver-command -watch | while read -r line ; do
    echo "handling event: $line"

    if [[ $line = LOCK* ]]; then
      volume=$(pamixer --get-volume)
      echo "current volume is $volume"
      pamixer --set-volume 0
    fi

    if [[ $line = UNBLANK* ]]; then
      echo "setting volume to $volume"
      pamixer --set-volume "$volume"
    fi
done

exit
}

Объяснение:"демон" часть этого скрипта xscreensaver-command -watchбудет зависать и ждать каких-либо событий от xscreensaver. Всякий раз, когда происходит событие "LOCK" или "UNBLANK", громкость звука обнуляется и восстанавливается соответственно.

2
27.01.2020, 22:08

Теги

Похожие вопросы