У меня есть служба, которая запускается во время загрузки и контролирует ИБП. Каждый раз, когда пользователь входит в систему, мне нужно отображать диалоговое окно, в котором говорится, что ИБП подключен, отключен и т. Д. Есть ли способ, которым мое приложение может узнать, когда пользователь входит в систему и отображает диалоговое окно?
Приложение должно запускаться на экране входа в систему на случай, если ИБП перейдет в автономный режим и системе потребуется завершить работу. Кроме того, требуются права root, поэтому его нельзя просто запустить в сценарии запуска пользователя.
Каждый пользователь в системе должен получить диалог, поэтому добавить его в пользовательский .profile непросто.
Спасибо за любую помощь, которую вы можете предоставить.
Если вы используете Solaris, вместо того, чтобы установить suid, вы можете подумать о создании профиля rbac, который позволяет пользователям выполнять эту команду состояния ups с uid, равным 0, и вставлять ее в профили системы и / или по умолчанию.
Несколько вещей:
Первый, /etc/profile
будет использоваться практически для каждой оболочки входа. Во-вторых, бит SUID используется для обеспечения того, чтобы программа всегда запускалась от имени конкретного пользователя (например, root). Поэтому, если вы хотите, чтобы приложение запускалось от имени пользователя root для каждого пользователя, который входит в систему, вы должны убедиться, что приложение принадлежит пользователю root, запустите chmod u+s /the/app
и добавьте его в / etc / profile.
В-третьих, вы, вероятно, захотите запустить службу от имени root при запуске, а затем использовать syslog()
для записи этих сообщений в emerg
level, который по умолчанию транслируется каждому пользователю. Это предупредит людей, которые уже вошли в систему, если статус ИБП изменится, пока они вошли в систему.
Итак - вы просите пользователя выключить машину с помощью сценария, если он сообщает, что ИБП отключен?
Альтернативный подход может заключаться в том, чтобы просто создать задание CRON, которое опрашивает ИБП каждый час, полчаса, с любым интервалом, который вы хотите, и отключает при необходимости. Существуют также демоны, которые будут отслеживать живые сообщения от ИБП и реагировать соответствующим образом - например, отправлять электронную почту системному администратору, предупреждать пользователей и корректно завершать работу системы.
Демон ИБП Linux: http://linux.die.net/man/8/upsd
Инструменты ИБП Solaris: http://blogs.oracle.com/mikey/entry/network_ups_tools_on_solaris
Последнее объясняет как уведомление пользователя, так и выключение.