У меня есть Qt 4 GUI, где у меня должна быть опция в выпадающем меню, которое позволяет пользователю принимать решение перезапустить компьютер. Я понимаю, что это могло бы казаться redunant со способностью перезапустить компьютер другими способами, но выбор должен остаться там. Я попытался использовать систему () для вызова следующего:
и все они правое дело
reboot: must be superuserбыть распечатанным. Используя систему () для вызова перезагрузки непосредственно делает то же самое. Я особенно не привязан к системе использования (), чтобы сделать это, но она походила на самый прямой выбор.
Как я могу перезагрузить систему от GUI?
В двоичном формате попробуйте вызвать
setuid (0);
перед вызовом system ().
Использование сценариев командной оболочки просто опасно, как уже упоминалось (вот почему это не сработало).
Я подозреваю, что suid-ing для двоичного файла не работает, потому что система порождает свой подпроцесс с фактическим uid пользователя, а не suid, опять же по соображениям безопасности (это позволит вам заменить любой двоичный файл на тот, который вызывается и запускается это как root).
Вы можете поместить копию перезагрузки в защищенное место, чтобы только пользователи, которым вы хотите иметь права, могли ее выполнить, а затем suid-root THAT.
Поочередно дайте им привилегию sudoer выполнить ТОЛЬКО нужную вам команду и выполнить что-то вроде «ksh -c 'sudo reboot'»
Вы пробовали запустить сценарий оболочки с помощью gksudo? Что-то вроде
gksudo shutdown -r
Если повезет, это должно вызвать модальный диалог для получения учетных данных пользователя.
как бы вы перезагрузили систему из командной строки в вашей системе?
в основном делают
system( <however you wouuld do it from the command line> );