Скрипт для опроса написан, изображение компьютера также имеется. Пора все это совместить. И сделать вывод максимально удобным - ведь опрашивать можно, как 1-2 адреса, так и 30-50, а то и более, лишь бы монитор был подходящего размера.
Экспериментальный опрос (средний комп в оффе):
А теперь ближе к самим Conky.
В ".conkyrc" надо добавить строчку для запуска скрипта каждые 60 секунд (при большом количестве адресов время нужно увеличить):
${execi 60 /home/ramzes/LuaConky/netping.sh}
Дальше строки добавляются в стартовую функцию ранее написанного Lua-скрипта (Lua и Cairo. Рисуем нечто похожее на компьютер):
local file = io.open("/home/ramzes/LuaConky/ip_net") --открывает файл для чтения
local tIPName={} --таблица для строк файла
local nIndex=1 --начальная позиция в таблице
if file ~= nil then --если файл существует, то
while true do --начало цикла
local nLine = file:read("*l") --читает строку из файла до признака конца строки
if nLine == nil then break end --если конец файла, то прерывает цикл
tIPName[nIndex]=nLine --записывает строку в таблицу
nIndex=nIndex+1 --увеличивает позицию в таблице на единицу
end --конец цикла
end --конец "if file ~= nil then"
io.close(file) --закрывает файл
Здесь из файла с адресами, именами и состояниями считываются строки и записываются в таблицу. Каждая строка со своим индексом, начиная с единицы.
local nX=50
local nY=50
local nCol=3
Локальные переменные, задающие начальные координаты (nX и nY) и количество столбцов (nCol). Меняя значение nCol можно получить любую ширину "таблицы" на экране, хоть в десять столбцов, если позволяет монитор.
for i=1, nIndex-1 do
local nIP = string.sub (tIPName[i], 1, string.find (tIPName[i], "_")-1)
local nName = string.sub (tIPName[i], string.find (tIPName[i], "_")+1, string.find (tIPName[i], " ")-1)
local nOnline = string.sub (tIPName[i], -1)
fSimpleComp(nX, nY, 0.05, nName, nIP)
if tonumber(nOnline) == 0 then fDrawTextCenter (nX+25, nY+26, "?", 32, 0.05) end
nX=nX+150
if (i%nCol == 0) then
nX=50
nY=nY+100
end
end
Непосредственно цикл отрисовки. Строка в таблице с индексом i разбивается на переменные nIP (адрес), nName (название), nOnline (состояние). Рисуются иконки компьютеров функцией fSimpleComp. Далее, если адресат оффлайн (if tonumber(nOnline) == 0) рисуется знак вопроса.
Затем идет расчет смещения следующей иконки, с учетом количества заданных столбцов.
Теперь осталось придумать, чем же занять правую часть рабочего стола (:
Послесловие
Прежде чем подавать заявление в суд на взыскание морального вреда, обратитесь за консультацией к юристу. Вам подскажут, как правильно составить иск для возмещения ущерба в виде денежной компенсации.
Смотри также

ramzport, а не информативней ли было бы, например, раскрашивать компьютеры в цвет, чем рисовать вопросительный знак?
ОтветитьУдалитьАнонимный, цветовая гамма не позволяет раскрашивать, да и в таком случае, надо более детализированную иконку рисовать... Пробовал отображать черным цветом без прозрачности - выглядит это не очень. Да и как утверждают знатоки) рабочий стол все равно не виден за открытыми приложениями. Так что информативней был бы звук, чем цвет.
ОтветитьУдалитьА здесь цель такая - звонит человек, говорит "не могу связаться с тем-то", сворачиваем окна (переключаемся на чистый рабочий стол) и смотрим в ком проблема.
zabbix решит Ваши проблемы :)
ОтветитьУдалитьPalenniy, самому оно ж интересней (: Да и смотрится не навязчиво.
ОтветитьУдалитьВот, к примеру те же Conky - уже столько разных конфигураций, а люди все пилят и пилят (:
Понравилась идея, ведь по сути сочитая разные скрипты, conky, lua и cairo можно выводить на монитор что угодно.
ОтветитьУдалитьУ меня на каждый день недели расписаны почти одни и те же дела и была идея вывести на экран эти дела в зависимости от дня недели, а в зависимости от времени указывать какие дела прошли, а какие еще нужно сделать. Как можно это реализовать?
acid, это совсем несложно:
ОтветитьУдалитьlocal Sec=tonumber(os.date('%S'))
local Min=tonumber(os.date('%M'))
local Hour=tonumber(os.date('%H'))
local WeekDay=tonumber(os.date('%u'))
if WeekDay==1 then
if Hour<=1 and Min<=1 and Sec<=1 then
cairo_show_text(cr, 'Делать Задание1')
else
cairo_show_text(cr, 'Сделано Задание1')
end
if Hour<=2 and Min<=2 and Sec<=2 then ...
end
if WeekDay==2 then ...
Это если совсем просто. Можно попробовать на таблицах сделать. Зависит от конкретной задачи конечно.
acid, хотя логика этой строчки "if Hour<=1 and Min<=1 and Sec<=1 then" не верна.
ОтветитьУдалитьЛучше высчитывать количество минут/секунд от полночи:
local Time=Sec + 60 * Min + 3600 * Hour
или
local Time=Min + 60 * Hour
в зависимости от нужной точности, а затем сравнивать:
if Time<=(15 + 60 * 15) then --задание на 15ч15мин
и далее по тексту