Поздно заглянул наверное, но пусть будет.
Автору нужна помощь, несмотря на советы. Как человек я понимаю комментирующих, но вопрос звучал иначе.
Мой вариант. Python+GDM:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import gtk
from time import gmtime, strftime
def wakeup(widget, event):
if event.state & gtk.gdk.CONTROL_MASK and event.keyval == 115: #при нажатии Ctrl+S(115)
time_log = strftime("%H") + ':' + strftime("%M") #получаем текущее время
clipboard=gtk.Clipboard(display=gtk.gdk.display_get_default(), selection="CLIPBOARD") #копируем введённые данные в буфер
start, end = buffer_data.get_bounds()
buffer_data.select_range(start, end)
ptext=text_data.get_buffer().copy_clipboard(clipboard)
ptext=clipboard.wait_for_text()
clipboard.store()
ptext = ptext.decode('utf-8')
chars = len(ptext) #получаем количество символов
space = ptext.count(' ') #ищем все пробелы
chars = chars - space #текст без пробелов
if chars >= 150: #если символов больше или равно 150
f = open('/home/user/workfile.txt', 'w') #записываем данные в файл
f.write(time_log + '\n' + ptext)
f.close()
quit() #и выходим
else: #иначе показываем пользователю сообщение
dialog = gtk.MessageDialog(parent=None, flags=gtk.DIALOG_MODAL, type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_NONE, message_format='\n\nСлишком мало букв. \nПиши ещё. \nНажми Esc.')
dialog.show()
w = gtk.Window(gtk.WINDOW_TOPLEVEL)
w.set_position(gtk.WIN_POS_CENTER)
w.fullscreen()
w.set_size_request(800, 600)
w.set_border_width(5)
w.add_events(gtk.gdk.KEY_PRESS_MASK)
w.connect("key-press-event", wakeup)
w.connect("destroy", quit)
w.set_title('')
time = '<span font_desc="Sans 20"> <b>' + strftime("%H") + ':' + strftime("%M") + '</b> </span>' #время входа
label_time = gtk.Label()
label_time.set_markup(time)
label_time.show()
label_why = gtk.Label('Вы видите данное окно из-за опоздания на работу.\nПожалуйста заполните форму ниже и нажмите Ctrl+S. Спасибо.')
label_why.show()
text_data = gtk.TextView()
buffer_data = text_data.get_buffer()
text_data.set_editable(True)
text_data.set_justification(gtk.JUSTIFY_LEFT)
text_data.set_wrap_mode(gtk.WRAP_WORD_CHAR)
text_data.show()
t = gtk.Table(10, 10, homogeneous=True)
t.attach(label_why, 0, 9, 0, 1)
t.attach(label_time, 9, 10, 0, 1)
t.attach(text_data, 0, 10, 1, 10)
t.show()
w.add(t)
w.show()
#условие запуска скрипта (если днём надо перезагрузиться скрипт не будет работать)
if 11 >= strftime("%H") >= 9 and strftime("%M") >= 5: #если час прихода 9-11 и минуты больше или равны 5 (9:05-11:05)
gtk.main() #запускаем скрипт
else:
quit()
Скрипт называем, например, work_control.py, делаем исполняемым и кладём в /usr/bin/
Далее открываем /etc/gdm/Init/Default и в конце файла до exit 0 вписываем:
if [ -x /usr/bin/work_control.py ]; then
/usr/bin/work_control.py on
fi
В скрипте изменить директорию сохранения файла (объяснительной) и поставить свои параметры опоздания.
Плюсы:
1 Я научился ловить нажатия клавиш
(Недавно с Python'м и с программированием вообще)
2 Старт скрипта до запуска оболочки = хоткеи не работают
Минусы:
Пишите, критикуйте, мне на пользу ))