Russian Qt Forum
Ноябрь 22, 2024, 16:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Программно выключить компьютер под пользователем в Linux  (Прочитано 15426 раз)
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« : Ноябрь 20, 2012, 15:13 »

Доброго дня! Собственно вопрос как это сделать программно (НЕ ИЗ-ПОД ROOT)?
Linux OpenSuse 11.4
Из консоли выключает так:
Код:
su root
Пароль: ***
shutdown -h now

Возможно ли сделать программно выключение компьютера без ввода пароля пользователя, взять его как-либо из системы, либо ввести его вручную в интерфейсе настроек программы, скажем, и подставить его КАК-ТО при запросе пароля командной su..
« Последнее редактирование: Ноябрь 20, 2014, 14:38 от Vladimir » Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Ноябрь 20, 2012, 15:19 »

Добавить пользователя в группу power не? (в слуае если дистрибутив еще без systemd).

А так - поиск в гугле рулит!
Записан

ArchLinux x86_64 / Win10 64 bit
Fat-Zer
Гость
« Ответ #2 : Ноябрь 20, 2012, 15:33 »

можно sudo настроить на выполнение некоторых команд без пароля...
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #3 : Ноябрь 20, 2012, 16:01 »

Добавить пользователя в группу power не? (в слуае если дистрибутив еще без systemd).

А так - поиск в гугле рулит!

не знаю, что такое systemd, но группы power нет!
Пробую писать при отладке
Код:
system("su root")
в дебаге вылазит слово "Пароль:", которые не понятно как ввести..
Если вводить  system("sudo shutdown -h now"), то на консоль выводит "no tty present and no askpass program specified"..
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #4 : Ноябрь 20, 2012, 16:02 »

можно sudo настроить на выполнение некоторых команд без пароля...

А как это сделать в моем случае с выключением компьютера не подскажите?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #5 : Ноябрь 20, 2012, 21:27 »

Посмотри на xdg-su. Этой команды может не быть в некоторых дистрибутивах, так что распространять придётся вместе с программой.
Записан
shame
Гость
« Ответ #6 : Ноябрь 21, 2012, 10:43 »

Не мелите чушь. Все это делается через QDbus
Записан
Fat-Zer
Гость
« Ответ #7 : Ноябрь 21, 2012, 11:55 »

А как это сделать в моем случае с выключением компьютера не подскажите?
если кратко, то добавить строчку в /etc/sudoers
ALL ALL = NOPASSWD: (ALL) /sbin/shutdown
перед этим хорошобы прочитать man 5 sudoers и понять, что оно означает, поставить конкретную группу или юзера итп...

но опять же если надо из программы сделать и на десктопе, а не из шела, то лучше череш dbus послать сигнал кому-надо
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #8 : Ноябрь 21, 2012, 14:12 »

Не мелите чушь. Все это делается через QDbus

например?
Записан
shame
Гость
« Ответ #9 : Ноябрь 21, 2012, 19:03 »

например?

org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #10 : Ноябрь 21, 2012, 19:23 »

org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown

для этого требуется HAL, от которого сейчас отказываются. У меня его нет, например. Причём ставить его только для возможности выключения - явно перебор.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Ноябрь 21, 2012, 19:42 »

Владимир, а может надо "гибче"? Ответы показали что такой простой, очевидной возможности нету. А о кросс-платформенности здесь лучше не вспоминать. Это тоже полезно, значит надо перепланировать задачу и обойтись без этого. Ну да, хотелось бы, но ничего не попишешь. А "упираться рогом" здесь бесперспективно
Цитировать
Не за то отец бил что играл, а за то что отыгрывался
Записан
shame
Гость
« Ответ #12 : Ноябрь 21, 2012, 21:25 »

для этого требуется HAL, от которого сейчас отказываются. У меня его нет, например. Причём ставить его только для возможности выключения - явно перебор.

я просто привел пример  Строит глазки

вот еще org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop

для гнома org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RequestShutdown

для кед org.kde.ksmserver /KSMServer logout 0 2 2
« Последнее редактирование: Ноябрь 21, 2012, 21:31 от shame » Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #13 : Ноябрь 21, 2012, 21:46 »

Владимир, а может надо "гибче"? Ответы показали что такой простой, очевидной возможности нету. А о кросс-платформенности здесь лучше не вспоминать. Это тоже полезно, значит надо перепланировать задачу и обойтись без этого. Ну да, хотелось бы, но ничего не попишешь. А "упираться рогом" здесь бесперспективно
Цитировать
Не за то отец бил что играл, а за то что отыгрывался


ну что касается кросс-платформенности, то думаю развезать под win и linux проблемы не составит (Q_OS_WIN - Q_OS_LINUX) и для каждой платформы написать свой код.. не под все дистрибутивы linux вариант с QDbus пойдет? пока планируется использовать программу только под OpenSUSE, надо попробовать, тем более раньше никогда не работал с QDbus.. а "перепланировать задачу" сложно будет, ибо такая возможность в программе должна быть железно!
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #14 : Ноябрь 21, 2012, 21:47 »

спасибо за ответы! буду пробовать..
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 23.