В связи с переходом на openbox некоторые привычные вещи пришлось реализовывать собственными силами: одна из них - это выключение компьютера не от root'а. Устанавливать что-то от гнома мне не хотелось, решил лишний раз не засорять систему, поэтому я написал небольшой скрипт на питоне для выключения компьютера.
Чтобы не заморачиваться с компановкой элементов я набросал форму в QtDesigner'е.
С помощью pyuic4 я конвертировал форму в py-файл:
~$pyuic4 mainform.ui -o mainform.py
Теперь приступим к коду. Создадим файл shutdown.py с таким содержанием:
#!/usr/bin/env python2.7
# coding: utf-8
#
import sys
from mainform import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from subprocess import *
class main(QMainWindow, Ui_Form):
def __init__(self):
QMainWindow.__init__(self)
self.setupUi(self)
self.connect(self.h_but, QtCore.SIGNAL("clicked()"), self.on_h_clicked)
self.connect(self.r_but, QtCore.SIGNAL("clicked()"), self.on_r_clicked)
def on_h_clicked(self):
h = Popen(['/sbin/halt'], shell=True)
print(h)
def on_r_clicked(self):
r = Popen(['/sbin/reboot'], shell=True)
print(r)
app = QApplication(sys.argv)
w = main()
w.show()
app.exec_()
Теперь немножко разберем код.
self.connect(self.h_but, QtCore.SIGNAL("clicked()"), self.on_h_clicked)
В этой строке мы передаем сигнал от кнопки(h_but) к функции(on_h_clicked), т.е если мы нажимаем кнопку выключить, то активизируется сценарий /sbin/halt, который выключит компьютер. Тоже самое будет и с кнопкой перезагрузки.
На этом работа с кодом закончилась, осталось лишь сделать так, чтобы обычный пользователь смог пользоваться этой программой. Программу я положил в ~/.config/shutdown, так что все пути здесь будут такими.
Создадим группу, например shutdown:
~#groupadd shutdown
В созданную группу добавим себя:
~#gpasswd -a user shutdown
Устанавливаем группу и даем разрешение на использование:
~#chgrp shutdown /home/user/.config/shutdown
~#chmod u+s,o= /home/user/.config/shutdown
Сделаем программу shutdown.py исполняемой:
~#chmod +x shutdown.py
Теперь проведем небольшие манипуляции с sudo. Группе shutdown нужно дать право на использование программы без пароля, для этого отредактируем sudoers(настоятельно рекомендую пользоваться visudo):
~#visudo или ~#nano /etc/sudoers
Находим строчку ## Same thing without a password и ниже нее пишем:
%shutdown ALL=(ALL) NOPASSWD: /sbin/halt, /sbin/reboot, /home/user/.config/shutdown/shutdown.py
Таким образом вы теперь можете выключать и перезагружать компьютер без пароля и не более того.
Все сделано, осталось добавить кнопку, при нажатии которой вылазило бы меню программы. Для этого я обычно использую кнопку выключения на панели компьютера. Так как у меня openbox мне нужно прописать эту кнопку в rc.xml. Для того чтобы узнать код кнопки - запустим xev:
~$xev
Нажимаем кнопку и в консоли появляется информация о кнопке:
KeyRelease event, serial 39, synthetic NO, window 0x1e00001,
root 0x15a, subw 0x0, time 1613305, (627,558), root:(655,831),
state 0x0, keycode 124 (keysym 0x1008ff11, XF86AudioLowerVolume),
same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
Выделенное жирным шрифтом - это то, что нам нужно, у вас keycode возможно будет другой. Чтобы преобразовать это число(124) в надлежащий вид для rc.xml нужно перевести его в 16-ричное. В консоли набираем:
~$printf "%X\n" 124
Получилось 7C. Это еще не все, теперь к полученному числу добавим "0x" и запишим его в rc.xml:
<keybind key="0x7C">
<action name="Execute">
<command>sudo /home/user/.config/shutdown/shutdown.py</command>
</action>
</keybind>
Ну вот и все, теперь можно спокойно выключать компьютер:)
Исходники программы: shutdown.tar.bz2
P.S: Не забываем менять user на свое имя в системе.
P.P.S: Конечно это все дело с добавлениями в группу и прочими дей-ми можно автоматизировать, но мне было лень, тем более делал для себя.
P.P.P.S: Во 2-ой части рассмотрим реализацию перехода в спящий и ждущий режимы, а так же выход из системы.
Чтобы не заморачиваться с компановкой элементов я набросал форму в QtDesigner'е.

~$pyuic4 mainform.ui -o mainform.py
Теперь приступим к коду. Создадим файл shutdown.py с таким содержанием:
#!/usr/bin/env python2.7
# coding: utf-8
#
import sys
from mainform import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from subprocess import *
class main(QMainWindow, Ui_Form):
def __init__(self):
QMainWindow.__init__(self)
self.setupUi(self)
self.connect(self.h_but, QtCore.SIGNAL("clicked()"), self.on_h_clicked)
self.connect(self.r_but, QtCore.SIGNAL("clicked()"), self.on_r_clicked)
def on_h_clicked(self):
h = Popen(['/sbin/halt'], shell=True)
print(h)
def on_r_clicked(self):
r = Popen(['/sbin/reboot'], shell=True)
print(r)
app = QApplication(sys.argv)
w = main()
w.show()
app.exec_()
Теперь немножко разберем код.
self.connect(self.h_but, QtCore.SIGNAL("clicked()"), self.on_h_clicked)
В этой строке мы передаем сигнал от кнопки(h_but) к функции(on_h_clicked), т.е если мы нажимаем кнопку выключить, то активизируется сценарий /sbin/halt, который выключит компьютер. Тоже самое будет и с кнопкой перезагрузки.
На этом работа с кодом закончилась, осталось лишь сделать так, чтобы обычный пользователь смог пользоваться этой программой. Программу я положил в ~/.config/shutdown, так что все пути здесь будут такими.
Создадим группу, например shutdown:
~#groupadd shutdown
В созданную группу добавим себя:
~#gpasswd -a user shutdown
Устанавливаем группу и даем разрешение на использование:
~#chgrp shutdown /home/user/.config/shutdown
~#chmod u+s,o= /home/user/.config/shutdown
Сделаем программу shutdown.py исполняемой:
~#chmod +x shutdown.py
Теперь проведем небольшие манипуляции с sudo. Группе shutdown нужно дать право на использование программы без пароля, для этого отредактируем sudoers(настоятельно рекомендую пользоваться visudo):
~#visudo или ~#nano /etc/sudoers
Находим строчку ## Same thing without a password и ниже нее пишем:
%shutdown ALL=(ALL) NOPASSWD: /sbin/halt, /sbin/reboot, /home/user/.config/shutdown/shutdown.py
Таким образом вы теперь можете выключать и перезагружать компьютер без пароля и не более того.
Все сделано, осталось добавить кнопку, при нажатии которой вылазило бы меню программы. Для этого я обычно использую кнопку выключения на панели компьютера. Так как у меня openbox мне нужно прописать эту кнопку в rc.xml. Для того чтобы узнать код кнопки - запустим xev:
~$xev
Нажимаем кнопку и в консоли появляется информация о кнопке:
KeyRelease event, serial 39, synthetic NO, window 0x1e00001,
root 0x15a, subw 0x0, time 1613305, (627,558), root:(655,831),
state 0x0, keycode 124 (keysym 0x1008ff11, XF86AudioLowerVolume),
same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
Выделенное жирным шрифтом - это то, что нам нужно, у вас keycode возможно будет другой. Чтобы преобразовать это число(124) в надлежащий вид для rc.xml нужно перевести его в 16-ричное. В консоли набираем:
~$printf "%X\n" 124
Получилось 7C. Это еще не все, теперь к полученному числу добавим "0x" и запишим его в rc.xml:
<keybind key="0x7C">
<action name="Execute">
<command>sudo /home/user/.config/shutdown/shutdown.py</command>
</action>
</keybind>
Ну вот и все, теперь можно спокойно выключать компьютер:)
Исходники программы: shutdown.tar.bz2
P.S: Не забываем менять user на свое имя в системе.
P.P.S: Конечно это все дело с добавлениями в группу и прочими дей-ми можно автоматизировать, но мне было лень, тем более делал для себя.
P.P.P.S: Во 2-ой части рассмотрим реализацию перехода в спящий и ждущий режимы, а так же выход из системы.