Conky (Русский) - ArchWiki

# Conky (Русский)

From ArchWiki
Jump to navigation Jump to search

Conky является системным монитором для оконной системы X. Он доступен для Linux и FreeBSD. Это свободное программное обеспечение выпущенное на условиях лицензии GPLv3. Conky может производить мониторинг большинства системных параметров, включая частоту и загрузку CPU, RAM, подкачки, дискового пространства, температуру, может отображать системные сообщения, и др. Он довольно легко настраивается, однако, процесс настройки может быть слегка сложным для понимания. Conky - это ответвление от проекта torsmo.

## Установка и настройка

- Установите пакет conky из официальных репозиториев.
- Отредактируйте конфигурационный файл `~/.conkyrc`, используя пример конфигурации с homeproject-screenshot

Редактируя конфигурационный файл, вы сразу же сможете видеть результат внесённых изменений, как только сохраните его. Вам не нужно завершать/начинать ваш X сеанс. Поэтому лучше всего тестировать все опции по порядку, сохраняя конфигурационный файл и наблюдаяя за окном conky, и исправлять их, если они вам не понравились.

- Либо используйте файл стандартной конфигурации `/etc/conky/conky.conf`:

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

Лучше использовать локальный `~/.conkyrc` конфигурационный файл. Как и многие приложения, conky сначала проверит, есть ли локальный файл `.conkyrc`. В случае его отсутствия conky прочитает файл по умолчанию из `/etc/conky`.

В случае, если вы храните вашу конфигурацию локально, например, в домашней директории, вы не сможете читать файлы логов, пока не внесете некоторые изменения. Одной из полезных функций conky является вывод на рабочий стол некоторых файлов из `/var/log/`, чтобы наблюдать за журнальными сообщениями. Большинство этих файлов может читать только `root`, вам придётся запускать conky через `sudo`. Однако, запуск conky с привилегиями `root` не рекомендуется, поэтому выполните следующие действия:

    $ usermod -aG log имя_пользователя

Вы добавили пользователя `имя_пользователя` в группу `log`. Теперь `имя_пользователя` может читать файлы логов, и conky сможет отображать журнальные записи на рабочем столе.

- В случае, если conky не принимает изменения, например, `minimum_size`, которые вы делаете в `~/.conkyrc`, убедитесь, что вы очистили `/etc/conky/conky.conf` или закомментировали соответствующюю секцию. Лучше всего удалить файлы из `/etc/conky/`, так как conky будет пытаться их читать и из-за этого выдавать вам некоторые сообщения об ошибках Xorg.

## Версии из AUR

В дополнение к обычному пакету conky есть ещё нескеолько AUR пакетов с разными опциями компиляции:

- conky-cli — Conky без X11 зависимостей

  || conky-cliAUR

- conky-lua — Conky с поддержкой Lua

  || conky-luaAUR

- conky-lua-nv — Conky с поддержкой Lua и Nvidia

  || conky-lua-nvAUR

- conky-nvidia — Conky с поддержкой Nvidia

  || conky-nvidiaAUR[ссылка недействительна: package not found]

## Советы и рекомендации

### Включить реальную прозрачность в KDE4 и Xfce4

Начиная с версии 1.8.0 conky поддерживает реальную прозрачность. Чтобы её включить, добавьте следующую строку в `~/.conkyrc`:

    own_window_transparent yes

Предыдущая опция не совместима с опцией `OWN_WINDOW_ARGB_VISUAL yes`. Она заменяет feh метод, описанный ниже.

### Автозапуск в Xfce4

В файле `.conkyrc`:

    background yes

Эта переменная запустит conky в фоновом режиме. Если вы хотите сделать окно всегда видимым на вашем рабочем столе, на всех рабочих местах и чтобы оно не отображалось на панели задач, добавьте следующие аргументы:

    own_window yes
    own_window_type override

Опция `override` делает ваше окно неконтролируемым из вашего оконного менеджера.

Напишите в `~/.config/autostart/conky.desktop`:

    [Desktop Entry]
    Encoding=UTF-8
    Version=0.9.4
    Type=Application
    Name=conky
    Comment=
    Exec=conky -d
    StartupNotify=false
    Terminal=false
    Hidden=false

### Как предотвратить мерцание

Чтобы предотвратить мерцание, conky требует поддержку Double Buffer Extension (DBE) со стороны X-сервера, потому что он не может достаточно быстро обновлять окно без этого. Поддержка DBE может быть включена в `/etc/X11/xorg.conf` добавлением строки `Load "dbe"` в разделе `"Module"`. Файл `xorg.conf` заменён (начиная с патча 1.8.x и выше) на `/etc/X11/xorg.conf.d`, который содержит отдельные конфигурационные файлы. DBE загружен автоматически.

Для включения double-buffer проверте наличие в `~/.conkyrc` строки:

    # Place below the other options, not below TEXT or XY
    double_buffer yes

### Настройка цвета

Помимо стандартных предопределённых цветов (white, black, yellow...), вы можете задать свой собственный цвет, используя название для кода цвета. Чтобы определить код нужного вам цвета, воспользуйтесь приложением для выбора цвета. Базовый пакет gcolor2 из официальных репозиториев подскажет вам название цвета. Он состоит из шести шестнадцатеричных цифр (0-9, A-F). Добавьте такую строку в конфигурационный файл, чтобы задать собственные цвета:

    color1     Имя_цвета_1
    color2     Имя_цвета_2

Затем, при редактировании раздела `TEXT`, используйте собственный номер цвета, определённый ранее.

### С двумя экранами

При работе с двумя экранами, вам придётся поиграться с двумя опциями, чтобы разместить ваше окно conky. Предположим, у вас разрешение 1680X1050 и вы хотите, чтобы окно было на левом мониторе сверху по центру. Сделайте так:

    alignment top_left
    gap_X 840

Опция `alignment` отвечает за выравнивание, а опция `gap_X` определяет расстояние в пикселях от левой границы вашего экрана.

### Не сворачивать при сворачивании всех окон

Используя Compiz: Если кнопка 'Показать рабочий стол' или комбинация клавиш сворачивает conky вместе со всеми остальными окнами, запустите Compiz configuration settings manager, перейдите в "General Options" и снимите галочку с опции "Hide Skip Taskbar Windows".

Если вы не используете Compiz, попробуйте отредактировать `~/.conkyrc`, добавив/изменив следующую строку:

    own_window_type override

или

    own_window_type desktop

Обратитесь к странице справочного руководства (man) по conky, чтобы выяснить, чем они отличаются. Последний вариант позволяет изменять границы окна с помощью растягивания или сочетаний клавиш, например, в Openbox, а с первым вариантом так не получится.

### Интеграция с Gnome 3

У некоторых возникают проблемы с отображением conky в Gnome 3.

- Добавьте эти строки в `~/.conkyrc`:

    own_window yes
    own_window_type conky
    own_window_transparent yes
    own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager

Если у вас всё ещё остались проблемы с прозрачностью, можете добавить следующие строки:

    own_window_argb_visual yes
    own_window_argb_value 255

### Интеграция с KDE

Conky с конфигурацией из примеров на странице со скриншотами создаёт проблему с отображением иконок. Итак, выполните следующее:

- Добавьте эти строки в `~/.conkyrc`:

    own_window yes
    own_window_type normal
    own_window_transparent yes
    own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager

- Если данная строка есть, закомментируйте или удалите её:

    minimum_size

- Для автозапуска conky создайте следующую символьную ссылку:

- - KDE4:

    $ ln -s /usr/bin/conky ~/.kde4/Autostart/conkylink

- - KDE3:

    $ ln -s /usr/bin/conky ~/.kde/share/autostart/conkylink

- Установите пакет feh из официальных репозиториев.
- Создайте скрипт для разрешения прозрачности с рабочим столом

Для пользователей KDE4 `~/.kde4/Autostart/fehconky`:

    #!/bin/bash
    feh --bg-scale "$(sed -n 's/wallpaper=//p' ~/.kde4/share/config/plasma-desktop-appletsrc)"

Для пользователей KDE3 `~/.kde/share/autostart/fehconky`:

    #!/bin/bash
    feh --bg-scale $(dcop kdesktop KBackgroundIface currentWallpaper 1)

используйте `--bg-center`, чтобы расположить фоновый рисунок по ценру.

- Сделайте его исполняемым:
  - KDE4:

    $ chmod +x ~/.kde4/Autostart/fehconky

- - KDE3:

    $ chmod +x ~/.kde/share/autostart/fehconky

- По желанию, вместо использования скрипта, вы можете добавить подобную строку в самый низ файла `~/.conkyrc`
  - Для KDE4

    ${exec feh --bg-scale "$(sed -n 's/wallpaper=//p' ~/.kde4/share/config/plasma-desktop-appletsrc)"}

- - Для KDE3

    ${exec feh --bg-scale $(dcop kdesktop KBackgroundIface currentWallpaper 1)}

### Интеграция с Razor-qt

С конфигурацией по умолчанию окно conky может исчезнуть с рабочего стола, если вы кликнете на букву. Добавьте эти строки в:

    ~/.conkyrc

    own_window yes
    own_window_class Conky
    own_window_type normal
    own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
    own_window_transparent yes

### Показывать информацию об обновлениях пакетов

- Pacman предоставляет свой собственный скрипт, называемый `checkupdates`, который отображает обновления пакетов из официальных репозиториев. Используйте `${execpi 3600 checkupdates | wc -l}`, чтобы показать общее количество пакетов
- Paconky - показывает информацию об обновлении пакета в формате, определённом пользователем. Вывод этой программы может быть включён в Conky с помощью команды `${execpi}`
- Прокручиваемые уведомления - печатает прокручиваемые уведомления об обновлениях. От создателя paconky
- Perl Script - более простой и древний скрипт от автора paconky. Печатает только количество пакетов, нуждающихся в обновлении
- Python Script - хорошо настраиваемая программа для уведомления пользователя о наличии обновлений, написанная на python
- Bash Script - bash-скрипт для пользователей, которые включили ShowSize

### Показывать прогноз погоды

Смотрите это обсуждение.

### Показывать RSS ленты

Conky имеет возможность отображать RSS-ленты самостоятельно, без необходимости применения внешних скриптов. Например, чтобы отображать заголовки десяти последних обновлений Planet Arch и обновлять ленту каждую минуту вы должны поместить это в ваш `~/.conkyrc` в раздел `TEXT`:

    ${rss https://planet.archlinux.org/rss20.xml 1 item_titles 10 }

Если вы хотите отображать rss ленту форума Arch, добавьте следующую строку:

    ${rss https://bbs.archlinux.org/extern.php?action=feed&type=rss 1 item_titles 4}

где 1 - это интервал обновлений в минутах (15 мин по умолчанию), 4 - количество объектов, которые вы хотите отображать.

Ленты русскоязычного форума:

- Последние сообщения: http://archlinux.org.ru/forum/feeds/posts/
- Последние темы: http://archlinux.org.ru/forum/feeds/topics/

### Показывать состояние rTorrent

Смотрите это обсуждение.

### Показывать состояние вашего WordPress блога

Вы можете это сделать, используя расширение, написанное на python ConkyPress.

### Показывать количество новых писем из Gmail

Создайте файл `gmail.py` в удобнов месте (в данном примере в `~/.scripts/`) со следующем python-кодом:

    gmail.py

    #!/usr/bin/env python

    from urllib.request import FancyURLopener

    email = 'ваш email' # @gmail.com can be left out
    password  = 'ваш пароль'

    url = 'https://%s:%s@mail.google.com/mail/feed/atom' % (email, password)

    opener = FancyURLopener()
    page = opener.open(url)

    contents = page.read().decode('utf-8')

    ifrom = contents.index('<fullcount>') + 11
    ito   = contents.index('</fullcount>')

    fullcount = contents[ifrom:ito]

    print(fullcount + ' new')

Вы также можете использовать Python urllib, как описано ниже:

    gmail.py

    #! /usr/bin/env python

    import urllib.request
    from xml.etree import ElementTree as etree

    # Enter your username and password below within quotes below, in place of ****.
    # Set up authentication for gmail
    auth_handler = urllib.request.HTTPBasicAuthHandler()
    auth_handler.add_password(realm='New mail feed',
                              uri='https://mail.google.com/',
                              user= '****',
                              passwd= '****')
    opener = urllib.request.build_opener(auth_handler)
    # ...and install it globally so it can be used with urlopen.
    urllib.request.install_opener(opener)

    gmail = 'https://mail.google.com/gmail/feed/atom'
    NS = '{http://purl.org/atom/ns#}'
    with urllib.request.urlopen(gmail) as source:
        tree = etree.parse(source)
    fullcount = tree.find(NS + 'fullcount').text

    print(fullcount + ' new')

Добавьте следующую строку в ваш `~/.conkyrc`, чтобы проверять свой Gmail на предмет новых писем каждые пять минут (300 секунд) и показать их:

    ${execpi 300 python ~/.scripts/gmail.py}

#### Аналогичные способы

Всё то же самое, но используя `curl`, `grep` и `sed`:

    $ curl -s -u '''email''':'''пароль''' https://mail.google.com/mail/feed/atom | grep fullcount | sed 's/<[^0-9]*>//g'

замените email и пароль на свои данные.

Также вы можете воспользоваться stunnel, предоставленном в пакете stunnel.

Следующая конфигурация взята из FAQ по conky

Измените `/etc/stunnel/stunnel.conf` как показано ниже, а затем запустите демон `stunnel`:

    # Service-level configuration for TLS server
    [imap]
    client = yes
    accept  = 143
    connect = imap.gmail.com:143
    protocol = imap
    sslVersion = TLSv1
    # Service-level configuration for SSL server
    [imaps]
    client = yes
    accept  = 993
    connect = imap.gmail.com:993

Теперь осталось только отредактировать `~/.conkyrc`:

    imap localhost username * -i 120 -p 993
    TEXT
    Inbox: ${imap_unseen}/${imap_messages}

Здесь использована `*` вместо пароля для того, чтобы сonky его спрашивал, но вы не обязаны так делать.

### Показывать новые письма (IMAP + SSL)

Conky имеет встроенную поддержку IMAP аккаунтов, но не поддерживает SSL. Его может обеспечить следующий скрипт, взятый с этого форума. Для этого требуются Perl/CPAN модули Mail::IMAPClient и IO::Socket::SSL, которые находятся в пакетах perl-mail-imapclientAUR и perl-io-socket-ssl.

Создайте файл `imap.pl` в месте, где его сможет прочитать conky. Добавьте следующее содержимое в этот файл, внеся соответствующие изменения:

    #!/usr/bin/perl

    # gimap.pl by gxmsgx
    # description: get the count of unread messages on imap

    use strict;
    use Mail::IMAPClient;
    use IO::Socket::SSL;

    my $username = 'имя_пользователя';
    my $password = 'пароль123';

    my $socket = IO::Socket::SSL->new(
      PeerAddr => 'imap.server',
      PeerPort => 993
     )
     or die "socket(): $@";

    my $client = Mail::IMAPClient->new(
      Socket   => $socket,
      User     => $username,
      Password => $password,
     )
     or die "new(): $@";

    if ($client->IsAuthenticated()) {
       my $msgct;

       $client->select("INBOX");
       $msgct = $client->unseen_count||'0';
       print "$msgct\n";
    }

    $client->logout();

Добавьте в `~/.conkyrc`:

    ${execpi 300 ~/.conky/imap.pl}

или другое расположение, куда вы сохранили файл.

Если вы пользуетесь Gmail, вам может понадобиться сгенерировать пароль для конкретного приложения.

Также вы можете использовать stunnel, как описано выше: #Показывать количество новых писем из Gmail

### Исправление прокручивания для кодировки UTF-8

В текущей версии conky (1.9.0) замечена ошибка (http://sourceforge.net/p/conky/bugs/341/), из-за которой прокрутка текста производится по байтам, а не по символам, из-за чего в тексте, содержащем мультибайтные символы происходит их исчезновение и появление при прокрутке. Пакет, с исправлением данного бага можно установить из AUR: conky-utfscrollAUR[ссылка недействительна: package not found]

## Примеры конфигурации от пользователей

### Graysky

Вот оно - изменяйте под вашу систему. Оптимизировано для четырёх ядерного процессора с несколькими hdd (хотя один из них не подсоединён на скриншоте) и видеокарты nvidia. Вы легко можете изменить этот пример под двух- или однопроцессорную машину с одним или любым другим количеством hdd.

### Пример скрипта с поддержкой nvidia

    # -- Conky settings -- #
    background no
    update_interval 1

    cpu_avg_samples 2
    net_avg_samples 2

    override_utf8_locale yes

    double_buffer yes
    no_buffers yes

    text_buffer_size 2048
    imlib_cache_size 0

    # -- Window specifications -- #

    own_window yes
    own_window_type normal
    own_window_transparent yes
    own_window_hints undecorate,sticky,skip_taskbar,skip_pager,below

    border_inner_margin 0
    border_outer_margin 0

    minimum_size 320 800
    maximum_width 320

    alignment bottom_right
    gap_x 0
    gap_y 0

    # -- Graphics settings -- #
    draw_shades no
    draw_outline no
    draw_borders no
    draw_graph_borders yes

    # -- Text settings -- #
    use_xft yes
    xftfont MaiandraGD:size=24
    xftalpha 0.4

    uppercase no

    default_color 888888

    # -- Lua Load -- #
    lua_load ~/conky/lua/lua.lua
    lua_draw_hook_pre ring_stats

    TEXT
    ${alignr}${voffset 53}${goto 90}${font MaiandraGD:size=11}${time %A, %d %B %Y}

    ${voffset 5}${goto 164}${font MaiandraGD:size=16}${time %H:%M}

    ${voffset -40}${goto 100}${font MaiandraGD:size=9}Kernel:${offset 70}Uptime:
    ${goto 90}${font MaiandraGD:size=9}$kernel${offset 40}$uptime
    ${voffset 57}${goto 117}${font snap:size=8}${cpu cpu0}%
    ${goto 117}${cpu cpu1}%
    ${goto 117}CPU
    ${voffset 19}${goto 145}${memperc}%
    ${goto 145}$swapperc%
    ${goto 145}MEM
    ${voffset 25}${goto 170}${nvidia gpufreq}
    ${goto 170}${nvidia memfreq}
    ${goto 170}GPU
    ${voffset 27}${goto 198}${totaldown ppp0}
    ${goto 198}${totalup ppp0}
    ${goto 205}NET
    ${voffset 21}
    ${goto 222}${fs_used /home}
    ${goto 230}DISK

И приложеный lua.lua скрипт:

    --[[
     Ring Meters by londonali1010 (2009)

     This script draws percentage meters as rings. It is fully customisable; all options are described in the script.

     IMPORTANT: if you are using the 'cpu' function, it will cause a segmentation fault if it tries to draw a ring straight away. The if statement on line 145 uses a delay to make sure that this does not happen. It calculates the length of the delay by the number of updates since Conky started. Generally, a value of 5s is long enough, so if you update Conky every 1s, use update_num > 5 in that if statement (the default). If you only update Conky every 2s, you should change it to update_num > 3; conversely if you update Conky every 0.5s, you should use update_num > 10. ALSO, if you change your Conky, is it best to use "killall conky; conky" to update it, otherwise the update_num will not be reset and you will get an error.

     To call this script in Conky, use the following (assuming that you save this script to ~/scripts/rings.lua):
             lua_load ~/scripts/rings-v1.2.1.lua
             lua_draw_hook_pre ring_stats

     Changelog:
     + v1.2.1 -- Fixed minor bug that caused script to crash if conky_parse() returns a nil value (20.10.2009)
     + v1.2 -- Added option for the ending angle of the rings (07.10.2009)
     + v1.1 -- Added options for the starting angle of the rings, and added the "max" variable, to allow for variables that output a numerical value rather than a percentage (29.09.2009)
     + v1.0 -- Original release (28.09.2009)
     ]]

     settings_table = {
             {
                     -- Edit this table to customise your rings.
                     -- You can create more rings simply by adding more elements to settings_table.
                     -- "name" is the type of stat to display; you can choose from 'cpu', 'memperc', 'fs_used_perc', 'battery_used_perc'.
                     name='time',
                     -- "arg" is the argument to the stat type, e.g. if in Conky you would write ${cpu cpu0}, 'cpu0' would be the argument. If you would not use an argument in the Conky variable, use ''.
                     arg='%I.%M',
                     -- "max" is the maximum value of the ring. If the Conky variable outputs a percentage, use 100.
                     max=12,
                     -- "bg_colour" is the colour of the base ring.
                     bg_colour=0x888888,
                     -- "bg_alpha" is the alpha value of the base ring.
                     bg_alpha=0.3,
                     -- "fg_colour" is the colour of the indicator part of the ring.
                     fg_colour=0x888888,
                     -- "fg_alpha" is the alpha value of the indicator part of the ring.
                     fg_alpha=0.5,
                     -- "x" and "y" are the x and y coordinates of the centre of the ring, relative to the top left corner of the Conky window.
                     x=191, y=145,
                     -- "radius" is the radius of the ring.
                     radius=32,
                     -- "thickness" is the thickness of the ring, centred around the radius.
                     thickness=4,
                     -- "start_angle" is the starting angle of the ring, in degrees, clockwise from top. Value can be either positive or negative.
                     start_angle=0,
                     -- "end_angle" is the ending angle of the ring, in degrees, clockwise from top. Value can be either positive or negative, but must be larger (e.g. more clockwise) than start_angle.
                     end_angle=360
             },
             {
                     name='time',
                     arg='%M.%S',
                     max=60,
                     bg_colour=0x888888,
                     bg_alpha=0.3,
                     fg_colour=0x888888,
                     fg_alpha=0.5,
                     x=191, y=145,
                     radius=37,
                     thickness=4,
                     start_angle=0,
                     end_angle=360
             },
             {
                     name='time',
                     arg='%S',
                     max=60,
                     bg_colour=0x888888,
                     bg_alpha=0.3,
                     fg_colour=0x888888,
                     fg_alpha=0.5,
                     x=191, y=145,
                     radius=42,
                     thickness=4,
                     start_angle=0,
                     end_angle=360
             },
             {
                     name='cpu',
                     arg='cpu0',
                     max=100,
                     bg_colour=0x888888,
                     bg_alpha=0.3,
                     fg_colour=0x888888,
                     fg_alpha=0.5,
                     x=140, y=300,
                     radius=26,
                     thickness=5,
                     start_angle=-90,
                     end_angle=180
             },
             {
                     name='cpu',
                     arg='cpu1',
                     max=100,
                     bg_colour=0x888888,
                     bg_alpha=0.3,
                     fg_colour=0x888888,
                     fg_alpha=0.5,
                     x=140, y=300,
                     radius=20,
                     thickness=5,
                     start_angle=-90,
                     end_angle=180
             },
             {
                     name='memperc',
                     arg='',
                     max=100,
                     bg_colour=0x888888,
                     bg_alpha=0.3,
                     fg_colour=0x888888,
                     fg_alpha=0.5,
                     x=170, y=350,
                     radius=26,
                     thickness=5,
                     start_angle=-90,
                     end_angle=180
             },
             {
                     name='swapperc',
                     arg='',
                     max=100,
                     bg_colour=0x888888,
                     bg_alpha=0.3,
                     fg_colour=0x888888,
                     fg_alpha=0.5,
                     x=170, y=350,
                     radius=20,
                     thickness=5,
                     start_angle=-90,
                     end_angle=180
             },
             {
                     name='time',
                     arg='%d',
                     max=31,
                     bg_colour=0x888888,
                     bg_alpha=0.3,
                     fg_colour=0x888888,
                     fg_alpha=0.5,
                     x=191, y=145,
                     radius=50,
                     thickness=5,
                     start_angle=-140,
                     end_angle=-30
             },
             {
                     name='time',
                     arg='%m',
                     max=12,
                     bg_colour=0x888888,
                     bg_alpha=0.3,
                     fg_colour=0x888888,
                     fg_alpha=0.5,
                     x=191, y=145,
                     radius=50,
                     thickness=5,
                     start_angle=30,
                     end_angle=140
             },
     --      {
     --              name='fs_used_perc',
     --              arg='/',
     --              max=100,
     --              bg_colour=0x888888,
     --              bg_alpha=0.3,
     --              fg_colour=0x888888,
     --              fg_alpha=0.5,
     --              x=260, y=503,
     --              radius=26,
     --              thickness=5,
     --              start_angle=-90,
     --              end_angle=180
     --      },
             {
                     name='fs_used_perc',
                     arg='/home',
                     max=100,
                     bg_colour=0x888888,
                     bg_alpha=0.3,
                     fg_colour=0x888888,
                     fg_alpha=0.5,
                     x=260, y=503,
                     radius=20,
                     thickness=5,
                     start_angle=-90,
                     end_angle=180
             },
             {
                     name='totalup',
                     arg='ppp0',
                     max=2,
                     bg_colour=0x888888,
                     bg_alpha=0.3,
                     fg_colour=0x888888,
                     fg_alpha=0.5,
                     x=230, y=452,
                     radius=20,
                     thickness=5,
                     start_angle=-90,
                     end_angle=180
             },
             {
                     name='totaldown',
                     arg='ppp0',
                     max=2,
                     bg_colour=0x888888,
                     bg_alpha=0.3,
                     fg_colour=0x888888,
                     fg_alpha=0.5,
                     x=230, y=452,
                     radius=26,
                     thickness=5,
                     start_angle=-90,
                     end_angle=180
             },
             {
                     name='nvidia',
                     arg='gpufreq',
                     max=475,
                     bg_colour=0x888888,
                     bg_alpha=0.3,
                     fg_colour=0x888888,
                     fg_alpha=0.5,
                     x=200, y=401,
                     radius=26,
                     thickness=5,
                     start_angle=-90,
                     end_angle=180
             },
     {
                     name='nvidia',
                     arg='memfreq',
                     max=700,
                     bg_colour=0x888888,
                     bg_alpha=0.3,
                     fg_colour=0x888888,
                     fg_alpha=0.5,
                     x=200, y=401,
                     radius=20,
                     thickness=5,
                     start_angle=-90,
                     end_angle=180
             },
     }

     require 'cairo'

     function rgb_to_r_g_b(colour,alpha)
             return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
     end

     function draw_ring(cr,t,pt)
             local w,h=conky_window.width,conky_window.height

             local xc,yc,ring_r,ring_w,sa,ea=pt['x'],pt['y'],pt['radius'],pt['thickness'],pt['start_angle'],pt['end_angle']
             local bgc, bga, fgc, fga=pt['bg_colour'], pt['bg_alpha'], pt['fg_colour'], pt['fg_alpha']

             local angle_0=sa*(2*math.pi/360)-math.pi/2
             local angle_f=ea*(2*math.pi/360)-math.pi/2
             local t_arc=t*(angle_f-angle_0)

             -- Draw background ring

             cairo_arc(cr,xc,yc,ring_r,angle_0,angle_f)
             cairo_set_source_rgba(cr,rgb_to_r_g_b(bgc,bga))
             cairo_set_line_width(cr,ring_w)
             cairo_stroke(cr)

             -- Draw indicator ring

             cairo_arc(cr,xc,yc,ring_r,angle_0,angle_0+t_arc)
             cairo_set_source_rgba(cr,rgb_to_r_g_b(fgc,fga))
             cairo_stroke(cr)
     end

     function conky_ring_stats()
             local function setup_rings(cr,pt)
                     local str=''
                     local value=0

                     str=string.format('${%s %s}',pt['name'],pt['arg'])
                     str=conky_parse(str)

                     value=tonumber(str)
                     if value == nil then value = 0 end
                     pct=value/pt['max']

                     draw_ring(cr,pct,pt)
             end

             if conky_window==nil then return end
             local cs=cairo_xlib_surface_create(conky_window.display,conky_window.drawable,conky_window.visual, conky_window.width,conky_window.height)

             local cr=cairo_create(cs)

             local updates=conky_parse('${updates}')
             update_num=tonumber(updates)

             if update_num>5 then
                     for i in pairs(settings_table) do
                             setup_rings(cr,settings_table[i])
                     end
             end
     end

## Замечание о шрифтах

Большинство из наиболее красивых конфигураций `.conkyrc` используют шрифты PizzaDude Bullets и Pie Charts for Maps. Они доступны в AUR в пакетах ttf-pizzadude-bulletsAUR и ttf-piechartsformapsAUR[ссылка недействительна: package not found] соответственно, или же вы можете найти и скачать их из интернета и установить вручную, как описано в статье Шрифты.

## Универсальный способ включения настоящей прозрачности

Прозрачность в conky ведёт себя упрямо, но есть универсальный способ включения настоящей прозрачности с любым окружением или оконным менеджером - использование xcompmgr и transset-df. Установите пакеты xcompmgr и transset-dfAUR из официальных репозиториев. Оба эти пакета имеют одинаковые зависимости, поэтому это самый легкий способ для компоновки, для тех кто использует отдельные оконные менеджеры для достижения минимальной установки (или по какой-либо другой причине :D)

Примечание: Это может привести к конфликту с другими композитными менеджерами, которые вы уже используете

Проверьте документацию xcompmgr, чтобы разобраться, какие композитные опции вы хотите применить. Вот стандартная команда:

    $ xcompmgr -c -t-5 -l-5 -r4.2 -o.55 &

Убедитесь, что conky запущен с `conky &`. Используйте transset-df, чтобы включить прозрачность для окна conky. Установите '.5' в любое значение из диапазона 0 - 1:

    $ transset-df .5 -n Conky

Это сделает окно conky по-настоящему прозрачным. Если у вас возникает ошибка типа:

    $ transset-df .5 -n Conky

    No Window matching Conky exists!

Проверьте, что conky запущен и, используя xprop, нажмите на окно conky, чтобы узнать название, которое вы должны вписать в `transset-df`:

    $ xprop | grep WM_NAME

    WM_NAME(STRING) = "Conky (ArchitectLinux)"

В данном случае подошло conky, но у вас оно может отличаться, поэтому убедитесь, что вы использовали своё значение. Если в `~/.conkyrc` написано `own_window_type panel`, тогда этот вызов xprop может сейчас выводить. Попробуйте использовать какую-нибудь из следующих опций: `own_window_type {dock,normal,override,desktop}`.

Напишите в `~/.xinitrc` следующие строки, чтобы conky был прозрачным при запуске `startx`:

    xcompmgr -c -t-5 -l-5 -r4.2 -o.55 &
    conky -d; sleep 1 && transset-df .5 -n Conky

## Смотрите также

- Конфигурация сonky на официальном сайте
- Конфигурация сonky на Arch форумах
- Официальный сайт
- Conky на Freshmeat
- Conky на SourceForge
- #conky IRC чат канал на freenode
- FAQ

Category:

- System monitors (Русский)

Hidden category:

- Pages with broken package links