Главные новости

  • Prev
  • Next

Conky и KDE4 aka Коньки и КЕДЫ

Опубликовано в : 26-12-2009 | Автор : admin | В рубрике : Gentoo, Мои скрипты

4

Conky – это свободная программа, распространяющаяся под лицензией BSD, предназначенная для системного мониторинга. Это мощная программа, которая выводит на рабочий стол различные параметры системы.  Например загрузку процессора, свободную/занятую оперативную память, загрузку сети и очень много всего другого. Причем есть различные варианты вывода – text, graph, bar. Впрочем, взгляните на скрин слева и все станет ясно.

Для установки в gentoo достаточно набрать всего одну команду:

# emerge conky

Глобальный файл настроек находится по адресу /etc/conky/conky.conf . Но обычно его не трогают, а создают личный файл настроек в домашнем каталоге.

$ cp /etc/conky/conky.conf ~/.conkyrc

Давайте разберемся как устроен конфигурационный файл conky и попробуем написать свой скриптик для него.

Как сказано выше, пользовательский конфиг находится в файле ~/.conkyrc. Если его нет, то conky использует глобальный из /etc/conky. Вот пример конфига:

alignment top_left
background no
border_width 1
cpu_avg_samples 2
default_color white
default_outline_color white
default_shade_color white
draw_borders no
draw_graph_borders yes
draw_outline no
draw_shades no
use_xft yes
xftfont DejaVu Sans Mono:size=12
gap_x 5
gap_y 60
minimum_size 5 5
net_avg_samples 2
no_buffers yes
out_to_console no
out_to_stderr no
extra_newline no
own_window yes
own_window_class Conky
own_window_type desktop
stippled_borders 0
update_interval 1.0
uppercase no
use_spacer none
show_graph_scale no
show_graph_range no

TEXT
${scroll 16 $nodename – $sysname $kernel on $machine | }
$hr
${color grey}Uptime:$color $uptime
${color grey}Frequency (in MHz):$color $freq
${color grey}Frequency (in GHz):$color $freq_g
${color grey}RAM Usage:$color $mem/$memmax – $memperc% ${membar 4}
${color grey}Swap Usage:$color $swap/$swapmax – $swapperc% ${swapbar 4}
${color grey}CPU Usage:$color $cpu% ${cpubar 4}
${color grey}Processes:$color $processes ${color grey}Running:$color $running_processes
$hr
${color grey}File systems:
/ $color${fs_used /}/${fs_size /} ${fs_bar 6 /}
${color grey}Networking:
Up:$color ${upspeed eth0} ${color grey} – Down:$color ${downspeed eth0}
$hr
${color grey}Name PID CPU% MEM%
${color lightgrey} ${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}
${color lightgrey} ${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}
${color lightgrey} ${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3}
${color lightgrey} ${top name 4} ${top pid 4} ${top cpu 4} ${top mem 4}

Все, что идет до TEXT – так сказать, системные настройки conky (полный список настроек). Т.е. там описываются параметры отображения (начальное положение, ширина рамки для графиков, шрифты и другое), а также там находятся следующие нужные нам параметры: own_window, own_window_type, own_window_transparent. Дело в том, что conky поддерживает псевдопрозрачность. Т.е. он высчитывает область экрана, которая ему нужна для отображения, затем берет обоину, рисует на этом участке и передает x-серверу. В KDE4 есть некоторые проблемы – если не использовать собственное окно, то conky потеряется под плазмой. Поэтому конфиг должен быть примерно таким:

# Create own window instead of using desktop (required in nautilus)
own_window yes
# If own_window is yes, you may use type normal, desktop or override
own_window_type override
# Use pseudo transparency with own_window?
own_window_transparent yes
# If own_window_transparent is set to no, you can set the background colour here
#own_window_colour hotpink
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
# Use double buffering (reduces flicker, may not work for everyone)
double_buffer yes

Но это еще не все, нужно «правильно» установить обоину. Для этого существует команда feh. Если она не установлена у вас, то делаем:
# emerge feh

Затем создаем в директории ~/.kde4/Autostart/ файлик conky.sh со следующим содержанием:

#!/bin/bash

feh --bg-scale "`grep 'wallpaper=' ~/.kde4/share/config/plasma-desktop-appletsrc | tail --bytes=+11 | head -n 1`"
conky -d

И даем скрипту права на исполнение: chmod +x conky.sh

Желательно проверить, правильно ли парсится путь к обоине, попробуйте выполнить команду:

grep ‘wallpaper=’ ~/.kde4/share/config/plasma-desktop-appletsrc | tail –bytes=+11 | head -n 1

Если будет какая-то ошибка, то измените эту команду и подставьте обратно между ` `. Bash ведь знаем, правда? :)

Раздел TEXT

В данном разделе описывается вывод Conky. Здесь вы ограничены только своей фантазией. Вот примеры конфигов:

Список переменных для раздела TEXT можно найти здесь. Примеры конфигов можно найти на официальном сайте проекта, также есть много форумов, где люди выкладывают результаты своих трудов, например вот этот.

Синтаксис описания раздела TEXT прост:
# Вот такая конструкция выведет System: цветом color1, который был определен до раздела TEXT (color1 #ffffff)
${color1} $sysname $kernel
# Вот так можно задать шрифт и стиль текста
${color1}${font DejaVu Sans Mono:style:Bold} $sysname $kernel
# Вот так можно вызывать какой-либо скрипт каждые 300 секунд, вывод будет помещаться на экран
${execi 300 /path/to/script/bash.org.py}
# А вот так можно вызывать скрипт и делать вывод в виде прогресс-бара. Скрипт должен возвращать число от 0 до 100.
${color3}${execibar 30 /path/to/script/emerge-progress.sh}

Выложу свой конфиг, правда он немного не доработан, но может послужить отправной точкой. За основу был взят конфиг hellfire с оф.сайта. Ссылка на 2 строки выше. Там же найдете прилагаемые к нему скрипты. Для lastsync.pl нужно будет установить библиотеку DateManip  (emerge dev-perl/DateManip).

# set to yes if you want Conky to be forked in the background
background no# X font when Xft is disabled, you can pick one with program xfontsel
#font 5×7
#font 6×10
#font 7×13
#font 8×13
#font 9×15
#font *mintsmild.se*
#font -*-*-*-*-*-*-34-*-*-*-*-*-*-*

# Use Xft?
use_xft yes

# Xft font when Xft is enabled
xftfont DejaVu Nimbus Sans L:style:bold:size=10

# Text alpha when using Xft
xftalpha 0.9

# Update interval in seconds
update_interval 3

# This is the number of times Conky will update before quitting.
# Set to zero to run forever.
total_run_times 0

# Create own window instead of using desktop (required in nautilus)
own_window yes

# If own_window is yes, you may use type normal, desktop or override
own_window_type override

# Use pseudo transparency with own_window?
own_window_transparent yes

# If own_window_transparent is set to no, you can set the background colour here
#own_window_colour hotpink

# If own_window is yes, these window manager hints may be used
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager

# Use double buffering (reduces flicker, may not work for everyone)
double_buffer yes

# Minimum size of text area
minimum_size 410 5

# Maximum width
maximum_width 308

draw_shades no
draw_outline no
draw_borders no
stippled_borders 8
border_margin 4
border_width 1

# Default colors and also border colors
default_color 000000
default_shade_color darkgray
default_outline_color black

# Text alignment, other possible values are commented
alignment top_left
#alignment top_right
#alignment bottom_left
#alignment bottom_right
#alignment none

# Gap between borders of screen and text
# same thing as passing -x at command line
gap_x 31
gap_y 21

# Subtract file system buffers from used memory?
no_buffers yes

# set to yes if you want all text to be in uppercase
uppercase no

# number of cpu samples to average
# set to 1 to disable averaging
cpu_avg_samples 2

# number of net samples to average
# set to 1 to disable averaging
net_avg_samples 2

# Force UTF8? note that UTF8 support required XFT
override_utf8_locale yes

# Add spaces to keep things from moving about? This only affects certain objects.
use_spacer none

# Allow each port monitor to track at most this many connections (if 0 or not set, default is 256)
#max_port_monitor_connections 256

# Maximum number of special things, e.g. fonts, offsets, aligns, etc.
#max_specials 512

# Maximum size of buffer for user text, i.e. below TEXT line.
#max_user_text 16384

# Show time
#show_graph_range yes

# variable is given either in format $variable or in ${variable}. Latter
# allows characters right after the variable and must be used in network
# stuff because of an argument

# stuff after ‘TEXT’ will be formatted on screen

# Colours

# Заголовки
color1 ffffff
# Текст
#color2 00557f
color2 639800
# Графики
color3 ffffff
color4 000000

TEXT

${color1}System:
${color1} Uptime:${color2} $uptime ${color1}- Load:${color2} $loadavg
${color1} CPU Frequency:${color2} $freq ${color1}
${color1} CPU Usage:${color2} $cpu% ${color3}${cpubar}
${color3}${cpugraph cpu0 32,309 color3 color4}
${color1} RAM Usage:${color2} $mem/$memmax – $memperc% ${color3}${membar}
${color1} Swap Usage:${color2} $swap/$swapmax – $swapperc% ${color3}${swapbar}
${color1} Processes:${color2} $processes ${color1}Running:${color2} $running_processes

${color1}Networking:
${color1}Down:${color2} ${downspeed eth1}${alignr 80}${color1}Up:${color2} ${upspeed eth1}
${color3}${downspeedgraph eth1 32,150 color2 color3} ${color3}${upspeedgraph eth1 32,150 color2 color3}
${color1}Address: ${color2}${addr eth1}${alignr}${color1}TCP Connections: ${color2}${tcp_portmon 1 65535 count}

${color1}File Systems:
${color1}/ ${color2}${fs_used /}/${fs_size /} ${color3}${fs_bar /}
${color1}media ${color2}${fs_used /mnt/media}/${fs_size /mnt/media} ${color3}${fs_bar /mnt/media}

${color1}Name PID CPU% MEM%
${color2} ${top name 1}${alignr 90}${top pid 1} ${top cpu 1} ${top mem 1}
${color2} ${top name 2}${alignr 90}${top pid 2} ${top cpu 2} ${top mem 2}
${color2} ${top name 3}${alignr 90}${top pid 3} ${top cpu 3} ${top mem 3}

${color1}Portage:
${color1}Last Sync: ${color2}${execi 30 /path/to/script/lastsync.pl}
${color1}Current Progress: ${color3}${execibar 30 /path/to/script/emerge-progress.sh}
${color1}Current Package: ${color2}${execi 30 /path/to/script/emerge-current.sh}
${color1}Current Status: ${color2}${execi 30 /path/to/script/emerge-status.sh}

${color1}Gentoo.ru RSS:
${color2}${execi 300 /path/to/script/conky-rss.sh http://gentoo.ru/node/feed 5 2}

${color1}Bash.org.ru:
${color2}${execi 300 /path/to/script/bash.org.py 50}

Скрипт bash.org.py я написал сам,  он парсит цитаты с bash.org.ru ) Вот его код:

#!/usr/bin/python
# -*- coding: utf-8 -*-

# Первый параметр у скрипта - ширина поля вывода в символах
# Если параметр опущен, то ширина равно 50 символов

import pycurl, cStringIO, re, sys, textwrap

# Функция перевода html-кодов и тегов в нормальное представление
def unescape(s):
s = s.replace("<br>", "\n")
s = s.replace("<br />", "\n")
s = s.replace("&quot;", "\"")
s = s.replace("&lt;", "<")
s = s.replace("&gt;", ">")
return s

# Если дополнительные параметры не переданы,то
# Ставим ширину поля вывода равной 50 символов
if len(sys.argv) < 2:
text_width = 50
else:
# Иначе равной первому параметру
text_width = int(sys.argv[1])

# cStringIO понадобится для CURL
data = cStringIO.StringIO()

# Инициализация CURL
curl = pycurl.Curl()
# Передаем адрес сайта - страница с рандомными цитатами
curl.setopt(pycurl.URL, 'http://bash.org.ru/random')
# Указываем функцию, которой будет передаваться содержимое страницы
curl.setopt(pycurl.WRITEFUNCTION, data.write)
# Выполняем запрос
curl.perform()
curl.close()

# По регулярному выражению ищем все цитаты на странице
# В дальнейшем будет браться только одна, но решил оставить так
res = re.findall("<div>(.*)</div>",data.getvalue())

data.close()

# Придаем тексту читабельный вид
quote= unescape(res[0])

# Переводим в кодировку utf8
quote = quote.decode('cp1251')
quote = quote.encode('utf8')

# Разбиваем текст на список строк. Дело в том, что textwrap.fill
# Игнорирует существующие переносы строк, он соединяет весь текст
# А затем заново делает переносы
quotes = quote.split("\n")

# Создаем объект для нашего "враппера"
wrapper = textwrap.TextWrapper(width=text_width, # Ширина поля вывода
initial_indent="", # Символы красной строки
subsequent_indent="") # Символы, которые будут
# вставляться после переноса

# Наконец-то перебираем строки и выводим их
for quote in quotes:
print wrapper.fill(quote)

На этом все, удачи с экспериментами, и с наступающим 2010 годом :)

Комментариев (4)

с кде 4.4 не работает
feh ERROR: Couldn’t load image in order to set bg

tail: невозможно открыть «–bytes=+11» для чтения: Нет такого файла или каталога

Скорее всего с кавычками что-то нахимичил…

Да, там еще проблема – если для каждой комнаты свои обои, то получается ерунда.
Предлагаю пока прописывать полный путь к картинке:
feh –bg-scale «/path/to/image/»
Естественно при смене изображения надо править скрипт.

Написать комментарий

Изображения должны быть включены!