0
<< предыдущая заметкаследующая заметка >>
20 января 2009
(...)

Вопрос знатокам Линукс (UNIX):

Дано: X11, KDE, число десктопов 1. Необходимо сделать демона, который следил, окно какого приложения является в данную секунду активными (в фокусе). Если более N минут активным остается не окно с гениальным романом, а почта, интернет, ICQ, Skype и т.п., выдавать пользователю информационный сигнал (к примеру, пискнуть динамиком или подать ток на рукоятки кресла). Вопрос в том, как определять окно фокуса на десктопе. Вероятно, это как-то можно сделать через dcop или есть специальные средства. Идеи (а лучше примеры на shell) приветствуются.

Думаю, этот опыт пригодится не только писателям, работающим дома, но и руководителям, в чьем подчинении находятся сотрудники. Извините, сотрудники.


UPD: Спасибо всем откликнувшимся! Во-первых, dcop, увы, не работает — он просто не видит окно Microsoft Word под cxoffice. В итоге решение получилось таким:

spy.sh
#!/bin/bash

# возможно придется: apt-get install xwininfo

PROG=«Microsoft Word»

while : ; do

WIN_ID=`xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)" | cut -d ' ' -f 5`
NAME=`xwininfo -id $WIN_ID |awk 'BEGIN {FS="\""}/xwininfo: Window id/{print $2}' | sed 's/[^-]* — //g'`
WIDTH=`xwininfo -id $WIN_ID | grep «Width:" | cut -d ' ' -f 4`
HEIGHT=`xwininfo -id $WIN_ID | grep «Height:" | cut -d ' ' -f 4`

if [[ "$NAME» != "$PROG» || $(($WIDTH-1000)) < 0 || $(($HEIGHT-900)) < 0 ]] ; then
    #echo "ХАРЕ ПИЗДЕТЬ!!!" ; echo -e \\007
    #нет, еще хуже: /usr/local/bin/220v_to_table.exe
    #нет, еще, еще жестче: /home/work/WORK/xbeep
    play /tmp/Киркоров_-_Зайка_моя.mp3
fi

sleep 30
done

А вот как запускается вся эта конструкция (заодно вместе с текстовым редактором и системой бэкапа в локальной директории и на внешнем сайте — давно собирался написать):

work.sh
#!/bin/sh

DIR="/home/work/WORK»
ARH="$DIR/old»
WORKFILE="$DIR/work.doc»
LAST=`ls $ARH | tail -1`
LASTFILE="$ARH/$LAST»
NEW=`date '+%F_%H-%M-%S.doc'`
NEWFILE="$ARH/$NEW»
LFTPTXT="$DIR/lftp.txt»

DIFF=`diff "$WORKFILE» "$LASTFILE»`

if [[ x»$LAST» = «x» || x»$DIFF» != «x» ]] ; then
    echo «делаем архивирование»
    cp -f "$WORKFILE» "$NEWFILE»

    echo «open lleo.aha.ru» > $LFTPTXT
    echo «user admin gFccdjHL» >> $LFTPTXT
    echo «cd /www/arhive/backup» >> $LFTPTXT
    echo «binary» >> $LFTPTXT
    echo «put \"$NEWFILE\" \"$NEW\"" >> $LFTPTXT
    echo «bye» >> $LFTPTXT
    nohup ftp -pn < "$LFTPTXT» > /dev/null 2>&1 &
    rm -r "$LFTPTXT»

else
    echo «архивирование не требуется»
fi

    kill -9 `ps awuux | grep «spy.sh» | grep -v «grep» | awk '{print $2}'`
    nohup $DIR/spy.sh >/dev/null 2>&1 &

    nohup winword "$WORKFILE» >/dev/null 2>&1 &

exit

Единственное, о чем меня не спрашивайте, это как запускается winword. Ставится Cxoffice, туда ставится MS Офис. Я использую уже готовый архив на 400мб, его развернул в /home/cxoffice — и все работает. Попробуйте поискать в интернете. Все летает. При всей моей органической нелюбви к системной продукции Microsoft, MS Word — единственный безупречный продукт, по сравнению с которым полнейшее удолбище тормозящий и недоделанный Опен Офис, лишенный вдобавок средств русской грамматики (кроме примитивного спелчекера, но это даже любой браузер умеет). В общем, рекомендую для литературной работы Word — хоть тушкой (как у пользователей Виндоус), хоть чучелком (как у меня).

Также рекомендую почитать комменты к этой записи — там реальный отжиг и много полезных идей от разных умных людей. Не сегодня, так в будущем пригодится.

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок

Комментарии к этой заметке сейчас отключены, надеюсь на понимание.