Light Locker - Запуск сценария при блокировке / разблокировке экрана

Совет, который Вы получили о том, где найти gcc касается Соляриса 10, не Соляриса 11. Вы уже узнали, что для Соляриса 11 необходимо установить названный пакет gcc-45 но это не достаточно.

Вот является список пакетами GNU, которым я верю, должен существовать в любой системе Соляриса:

Просто выполнитесь следующим образом:

pkg install pkg://solaris/archiver/gnu-tar
pkg install pkg://solaris/developer/gnu-binutils
pkg install pkg://solaris/diagnostic/top
pkg install pkg://solaris/file/gnu-coreutils
pkg install pkg://solaris/file/gnu-findutils
pkg install pkg://solaris/text/gawk
pkg install pkg://solaris/text/gnu-diffutils
pkg install pkg://solaris/text/gnu-grep
pkg install pkg://solaris/text/gnu-sed

(не, я понимаю, что Вы действительно не попросили это, но имение в наличии их сделает Вашу жизнь легче в будущем),

Вот то, что Вы попросили: при использовании хоста к цели разработки/сборки, необходимо добавить:

pkg install pkg://solaris/developer/build/gnu-make
pkg install pkg://solaris/developer/build/make
pkg install pkg://solaris/developer/gcc-45
pkg install pkg://solaris/system/header
pkg install pkg://solaris/developer/build/autoconf
pkg install pkg://solaris/developer/build/automake-110

(просто установка gcc-45 не достаточно),

Вышеупомянутое даст Вам хост со всеми традиционными инструментами GNU/Linux и традиционными инструментами для разработки C/C++, которые обычно используются различными пакетами с открытым исходным кодом во время сборки/процесса компиляции.

Инструменты GNU поднимают очень, очень мало дискового пространства поэтому действительно никакая причина не установить их, по моему скромному мнению. dev инструменты поднимают немного больше, можно пропустить их на хостах, где Вы не хотите делать сборку/компиляцию.

6
13.04.2017, 15:37
3 ответа

Предыдущий ответ помог мне написать этот фрагмент сценария bash, который обрабатывает события сеанса блокировки и разблокировки для текущего сеанса. Я использую его для приостановки процессов браузера, когда сеанс заблокирован, и для их возобновления, когда он разблокируется. Протестировано в нестабильной версии Debian (Xfce 4.12) Наслаждайтесь!

session=/org/freedesktop/login1/session/$XDG_SESSION_ID
iface=org.freedesktop.login1.Session
dbus-monitor --system "type=signal,path=$session,interface=$iface" 2>/dev/null |
 while read signal stamp sender arrow dest rest; do
  case "$rest" in
    *Lock)
      echo   LOCKED at $stamp
      pause $@
;;
    *Unlock)
      echo UNLOCKED at $stamp
      resume $@
;;  #unknown Session signal received
    *)
#      echo $signal $stamp $sender $arrow $dest $rest
  esac
done
5
27.01.2020, 20:25

При блокировке или разблокировке с помощью light-locker выполняется дата. Однако я не знаю, как узнать, блокирует ли он или разблокирует.

dbus-monitor --system "type='signal',sender='org.freedesktop.login1',path='/org/freedesktop/login1/seat/seat0',interface='org.freedesktop.DBus.Properties',member='PropertiesChanged'" | grep --line-buffered "ActiveSession" | while read line; do date; done

Ссылка: Комментарий к сообщению об ошибке на Launchpad

1
27.01.2020, 20:25

Основываясь на ответе Брента Романа , я реализовал сценарий, используя dbus-monitor, а затем заменил его на gdbus, который имеет более понятный интерфейс и более четкий вывод. Сценарий довольно длинный, я уберу все, что не связано с -dbus, чтобы проиллюстрировать смысл запуска сценария при разблокировке экрана.

Сначала пример вывода при запуске gdbus, блокировке и затем разблокировке экрана:

paulo@monk:~$ gdbus monitor --system --dest org.freedesktop.login1 --object-path /org/freedesktop/login1/session/c2
Monitoring signals on object /org/freedesktop/login1/session/c2 owned by org.freedesktop.login1
The name org.freedesktop.login1 is owned by :1.6
/org/freedesktop/login1/session/c2: org.freedesktop.DBus.Properties.PropertiesChanged ('org.freedesktop.login1.Session', {'Active': <false>}, @as [])
/org/freedesktop/login1/session/c2: org.freedesktop.login1.Session.Lock ()
/org/freedesktop/login1/session/c2: org.freedesktop.login1.Session.Unlock ()
/org/freedesktop/login1/session/c2: org.freedesktop.DBus.Properties.PropertiesChanged ('org.freedesktop.login1.Session', {'Active': <true>}, @as [])

Итак, скелет скрипта:

OBJECT_PATH=/org/freedesktop/login1/session/$XDG_SESSION_ID
BUS_NAME=org.freedesktop.login1
UNLOCK="$OBJECT_PATH: $BUS_NAME.Session.Unlock ()"
GDBUS_MONITOR="gdbus monitor --system --dest $BUS_NAME --object-path $OBJECT_PATH"
PROGNAME=$(basename "$0")
LOGFILE=~/log/$PROGNAME.log

#...

function log {
    echo "$(date +'%F %T.%3N') [$$]" "$@"
}

#...

function run_daemon {
    exec &>>"$LOGFILE"

    kill_running "$GDBUS_MONITOR"

    local signal
    while read -r signal; do
        log "$signal"
        if [[ $signal == "$UNLOCK" ]]; then
            check_quodlibet
        fi
    done < <(eval "exec $GDBUS_MONITOR")
}

#...

run_daemon

Функция kill_runningпроверяет, запущен ли экземпляр, и уничтожает его. Если скрипт запускается автоматически при каждом входе в систему lightdm, у нас потенциально может быть запущено несколько экземпляров, следовательно, перед запуском необходимо убить все текущие экземпляры.

Функция check_quodlibetперезапускает quodlibet если подключенное USB-устройство (с моей музыкальной коллекцией )было сброшено (это происходит случайным образом после выхода из режима ожидания ). Я не думал, что это уместно включать его.

execпри запуске gdbusне является строго обязательным, но тогда он позволяет избежать дополнительного процесса, поскольку сценарий разветвляется перед запуском gdbus. Таким образом, будет только 2 процесса, выполняющих :сам скрипт и gdbus.

Я создал~/.config/autostart/quodr.desktop(quodr — это имя скрипта )для запуска скрипта при каждом входе в систему lightdm:

[Desktop Entry]
Version=1.0
Type=Application
Name=quodr
Exec=quodr
Comment=Check if quodlibet needs refresh
Icon=dialog-question-symbolic
Hidden=false

В качестве TODO для себя :Я намерен выяснить, как запустить скрипт в качестве пользовательской службы systemd, D -Bus -активирован.

Этот вопрос со всеми ответами был неоценим для меня, чтобы найти это решение. Эта проблема глючила очень давно, я перепробовал множество решений, но более четкое представление о том, что нужно, я получил только после прочтения того, что здесь все писали. Спасибо всем, и в частности Бренту Роману .

В качестве последнего комментария:Я построил и установил d -ножки и турнюр , пока я исследовал это, они были действительно полезны.

Я работаю Xubuntu 17.10 .

6
27.01.2020, 20:25

Теги

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