Раз тут о Conky, то влезу со своими пятью копейками. Мне без надобности выводы сенсоров и параметров, но я всегда мечтал о выводе цитат на рабочий стол. Причём - автоматической их замене. Программы для этого есть, но они все выводят цитаты на английском. Сайтов с цитатами на русском много, но удалось найти всего один, имеющий API, которое отдаёт цитаты по GET или POST запросу. Осталось дело за малым - вывести их на рабочий стол. Разумеется, на ум сразу же пришли коньки. Что же до их минусов - возможно, я использую мало клавиатурных сочетаний, либо просто мне везёт, но не работающих я не замечал. Да даже если бы и заметил, цитаты довольно сильно стимулируют мышление, подталкивая мысли в интересных направлениях, полезно для креатива. Или для хорошего настроения. Для меня, это перевешивает.
Рабочая Matuntu-TV64-MR112-X115:
Matuntu-TW32-M112 на виртуалке:
Казалось бы, что реализовать такое просто. Достаточно в файле .conkyrc, в секции TEXT, оформить через
curl GET-запрос на сайт и Conky выведет цитату. В принципе, так и есть. Но цитата выведется в одну строку. И если она длинная - вылезет за пределы экрана. Можно реализовать переносы строк, но здесь и кроется заковыка. Conky режет строки посимвольно, сколько символов указано. И часто получается деление слов в непереносимых местах. К примеру "согласование" - "с" оставит, а "огласование" перенесёт. Некрасиво. Тем более, что при переносах часто теряются целые слова, а то и строки. В общем - эта функция реализована из рук вон плохо и не подходит. Возникла мысль, что Conky должен нормально вывести текст из файла, при условии, что текст в файле уже отформатирован как надо. Значит нужно написать скрипт, который ходит на сайт forismatic, берёт там рандомную цитату и пишет её в файл, задавая длинну строки и реализующий перенос слов целыми, не разрезая их. Логично было бы написать его на Lua, раз речь о Conky, но, увы мне - я им не владею. По этому написал его на Ruby.
В целом, реализация получилась такая. В папке .conky (или директории, а то мне сейчас по Linux-Way за папку глазик выколят, а у меня их всего два) создал папку (директорию) Quotes. В ней создал два файла:
.conkyrc
Спойлер
# Use Xft?
use_xft yes
xftfont Comic Sans MS:size=12
xftalpha 0.8
text_buffer_size 2048
background no
# Update interval in seconds
update_interval 1
xftalpha 0.8
own_window_argb_visual yes
# 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
own_window_transparent yes
own_window_type normal
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 450 150
# Draw shades?
draw_shades no
# Draw outlines?
draw_outline no
# Draw borders around text
draw_borders no
# Stippled borders?
stippled_borders 0
# border width
border_width 1
# 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
#position
gap_x 15
gap_y 50
alignment top_left
default_color 464646
own_window_argb_value 0
own_window_colour 000000
minimum_size 450 150
TEXT
${execp cat quote.txt}
И quotes.rb
Спойлер
require 'net/http'
require 'uri'
class String
def wrap(col = 95)
gsub(/(.{1,#{col}})( +|$\n?)|(.{1,#{col}})/, "\\1\\3\n")
end
end
url = "http://api.forismatic.com/api/1.0/?method=getQuote&format=text&lang=ru"
uri = URI.parse(url)
response = Net::HTTP.get_response(uri)
content = response.body
File.open('/home/sam/.conky/Quotes/quote.txt', 'w'){ |file| file.write(content.wrap) }
В quotes.rb цифра 95, в строке def wrap(col = 95), задаёт длину строки. Можно задать по усмотрению. И если кто решится повторять, то в пути к файлу нужно заменить пользователя Сэм на своего. В системе должен быть установлен Ruby:
sudo apt-get install ruby
Теперь Conky Manager видит нашу директорию Quotes, как виджет.
Но если его включить, то пока ничего не произойдёт, наш ruby-скрипт ещё не сходил за цитатой. Для этого я добавляю его в cron. В терминале: crontab -e. И там задаю путь и пятнадцатиминутный интервал:
*/15 * * * * ruby /home/sam/.conky/Quotes/quotes.rb
Если всё верно - терминал подтверждает: crontab: installing new crontab. Вдруг чего - здесь в пути тоже нужно Сэма сменить на своего пользователя. Теперь всё работает, выводятся случайные цитаты с интервалом в 15 минут (шрифт и цвет можно легко сменить в .conkyrc). Что меня очень радует. А что меня печалит, так это то, что вместо одной строчки в файле .conkyrc пришлось городить запутанный велосипед со скриптом и crontab-ом. Что же по оформлению, то тему я предпочитаю Moka, иконки Moka или Vibrancy, а курсор BlackStyle.