Я собираюсь перенести приложение Snoozer, которое я первоначально написал в Windows на AutoIt, а когда дело доходит до него, это Shutdown Snoozer.
Я перечисляю, как засыпаю в кино или шоу, но я просыпаюсь, если мой компьютер работает всю ночь. Поэтому я создал приложение, которое уведомляет вас о предстоящем завершении работы, и у вас есть 10 минут, чтобы отложить это, в противном случае компьютер выключается. Приложение позволяет повторить это приглашение для X раз и с интервалом Y.
Мой вопрос: в Ubuntu мне понадобятся права sudo для завершения работы. Если да, то как я могу запретить приложению постоянно запрашивать у пользователя аутентификацию как sudo для правильного завершения работы системы?
Да, пользователь должен иметь права sudo, но вы все равно можете использовать NOPASSWD, чтобы пропустить аутентификацию по паролю.
Чтобы позволить пользователю запускать определенные команды, в этом случае команду shutdown, отредактируйте файл / etc / sudoers, например:
user ALL=/usr/bin/apt-get,/sbin/shutdown
Более подробная версия, которая лучше соответствует вашим требованиям ( Пользователь может завершить работу с помощью sudo shutdown -h now
и перезагрузиться с помощью sudo reboot
. Пользователи, желающие выключить систему, также могут использовать poweroff
или halt
без пароля):
user hostname =NOPASSWD: /sbin/shutdown -h now,/sbin/halt,/sbin/poweroff,/sbin/reboot
Вы можете использовать следующие Команда, показывающая, что пользователь может запустить, скажет нам, какие команды пользователь может запустить с помощью sudo:
sudo -U user –l
Очень давно я написал это для кого-то с таким же вопросом. Я понятия не имею, работает ли он по-прежнему и не может сейчас проверить, потому что я не хочу перезапускать: -).
Вот, пожалуйста,
#!/usr/bin/env python
import dbus
def main():
answer = raw_input("Do you really want to shutdown your computer? (Y/n): ")
if answer in ('y', 'Y', ''):
bus = dbus.SystemBus()
bus_object = bus.get_object("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer")
bus_object.Shutdown(dbus_interface="org.freedesktop.Hal.Device.SystemPowerManagement")
if __name__ == "__main__":
main()
.