Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: C#: перезагрузка ПК с Linux  (Прочитано 1380 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Mixim

  • Автор темы
  • Участник
  • *
  • Сообщений: 114
    • Просмотр профиля
C#: перезагрузка ПК с Linux
« : 10 Май 2013, 04:15:48 »
Приветствую! Необходимо в мою программу добавить функционал для перезагрузки машины. Немного поискал в сети, как это делается, нашел кучу статей, посвященных Windows (1, 2), но как сделать это в Linux (GNOME\C#) практически ничего нет, нашел только это, но технологию понять не смог. Ни могли бы подсказать, какой системный процесс нужно вызвать из программы на C#, чтобы перезагрузить машину с Linux (если не затруднит, то хотелось бы посмотреть на код)?
Код:
System.Diagnostics.Process.Start("/sbin/reboot");возвращает:
Цитировать
reboot: must be superuser.
, т.е. reboot должна запускаться от имени суперпользователя
Заранее спасибо
« Последнее редактирование: 10 Май 2013, 04:23:32 от Mixim »

Оффлайн Freezeman

  • Активист
  • *
  • Сообщений: 637
  • Xubuntu 14.04.2 LTS :: SSD Kingston HyperX Fury
    • Просмотр профиля
Re: C#: перезагрузка ПК с Linux
« Ответ #1 : 10 Май 2013, 04:43:55 »
Я так понимаю, sudo вас не устраивает?
Попробуйте shutdown -r now, хотя наверное тоже нужны права рута.

Оффлайн rayanAyar

  • Старожил
  • *
  • Сообщений: 1027
  • Да пребудет с вами совпавшая контрольная сумма
    • Просмотр профиля
Re: C#: перезагрузка ПК с Linux
« Ответ #2 : 10 Май 2013, 05:46:07 »
Насколько я знаю, послать команду на перезагрузку рабочему окружению можно с помощью DBus. Это будет аналогично нажатию пункта перезагрузка в GNOME/Unity/KDE. Нужно только знать нужный метод. Может вот это подойдет:
http://forums.debian.net/viewtopic.php?p=413941

Оффлайн Daynin

  • Любитель
  • *
  • Сообщений: 88
    • Просмотр профиля
    • Google+
Re: C#: перезагрузка ПК с Linux
« Ответ #3 : 10 Май 2013, 13:15:08 »
Mixim,
пришлось лишний раз перезагрузить машину :), но вот эта штука вполне себе работает:
Код: C#
  1. System.Diagnostics.Process.Start("gksudo","reboot");
  2.  
Правда перед перезагрузкой нужно будет все равно ввести пароль рута. Но от этого не уйти. Либо придется ввести перед самой перезагрузкой, либо же придется запускать приложение с правами рута.
Замечательный тут у вас форум! Много интересных людей.

Оффлайн rayanAyar

  • Старожил
  • *
  • Сообщений: 1027
  • Да пребудет с вами совпавшая контрольная сумма
    • Просмотр профиля
Re: C#: перезагрузка ПК с Linux
« Ответ #4 : 10 Май 2013, 13:21:39 »
Правда перед перезагрузкой нужно будет все равно ввести пароль рута. Но от этого не уйти.
Когда вы нажимаете пункт перезагрузка в меню Unity/GNOME/KDE вас ведь не спрашивают пароль рута. Отправка сообщения через dbus равносильна выбору этого пункта. Т.е. будет перезагрузка без запроса пароля.

Оффлайн Daynin

  • Любитель
  • *
  • Сообщений: 88
    • Просмотр профиля
    • Google+
Re: C#: перезагрузка ПК с Linux
« Ответ #5 : 10 Май 2013, 13:28:41 »
Правда перед перезагрузкой нужно будет все равно ввести пароль рута. Но от этого не уйти.
Когда вы нажимаете пункт перезагрузка в меню Unity/GNOME/KDE вас ведь не спрашивают пароль рута. Отправка сообщения через dbus равносильна выбору этого пункта. Т.е. будет перезагрузка без запроса пароля.
rayanAyar,
да, вы правы. Так будет работать и без ввода пароля:
Код: C#
  1. System.Diagnostics.Process.Start("dbus-send","--system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart");
  2.  
Замечательный тут у вас форум! Много интересных людей.

Оффлайн SergeyIT

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5033
  • Все по палатам!
    • Просмотр профиля
Извините, я все еще учусь

Оффлайн Mixim

  • Автор темы
  • Участник
  • *
  • Сообщений: 114
    • Просмотр профиля
Re: C#: перезагрузка ПК с Linux
« Ответ #7 : 11 Май 2013, 03:51:31 »
Всем спасибо, чуть позже попробую (сейчас собираю ядро)

Оффлайн Mixim

  • Автор темы
  • Участник
  • *
  • Сообщений: 114
    • Просмотр профиля
Re: C#: перезагрузка ПК с Linux
« Ответ #8 : 16 Май 2013, 03:52:19 »
Еще раз всем спасибо за помощь, проверил - все работает и без sudo. Хотелось бы от себя добавить, что для выключения машины можно использовать следующую строчку:
System.Diagnostics.Process.Start("dbus-send", "--system   --dest=org.freedesktop.ConsoleKit   --type=method_call   --print-reply   --reply-timeout=2000   /org/freedesktop/ConsoleKit/Manager   org.freedesktop.ConsoleKit.Manager.Stop");

 

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