Авторские статьи об OpenSource

Скрипты


Скрипты, которые автоматизируют рутинные операции и/или помогают в работе.
Новый скрипт Сетевой принтер в каталоге /dev/.

Оглавление
Сетевой принтер в каталоге /dev/.
Случайная картинка из папки на Рабочий Стол
Восстановление прав доступ и владельца
Запуск игр в префиксах WINE
Зависания Compiz на картах nVidia
Массовый SSH к нескольким серверам
Программная перезагрузка ADSL модема
Проверка скриптом репозитории Ubuntu
Перезапускаем демона после восстановления связи с Интернет
Уменьшаем приоритет тяжёлым приложениям
Тотальная чистка и реиндексация Sqlite
Прозрачность Conky в KDE4


Сетевой принтер в каталоге /dev/.

Если вы вынуждены использовать старую программу, которая умеет работать только с принтерами, представленными в каталоге /dev/ в виде файлов-устройств, то вам поможет следующий финт ушами. Мы сделаем сетевой принтер в виде файла-устройства в /dev/.

#!/bin/sh
sudo clear
if [ ! -f /dev/myfakenetprint ];
then
    sudo mknod /dev/myfakenetprint p
    sudo chmod 666 /dev/myfakenetprint
fi
while :
do
    cat /dev/myfakenetprint | lp -dHP-LaserJet-P2055
done
exit 0

Скрипт проверяет наличие уже ранее созданного файла устройства /dev/myfakenetprint и если он не создавался, то это первый запуск скрипта и мы создаём pipe /dev/myfakenetprint и даём всем-всё в виде прав 666.

Затем в вечном цикле мы ждём поступлений данных в пайп канале и выводим их на принтер, указанный в параметре -d через утилиту lp. Имя принтера возьмите в своей системе у настроенного CUPS, например имя принтера можно посмотреть в localhost:631. Теперь печатайте в "псевдолокальный" принтер /dev/myfakenetprint и забирайте распечатанное у вашего сетевого принтера.


Случайная картинка из папки на Рабочий Стол

Скрипт, который случайную картинку из папки делает обоями на Рабочем Столе. Поправьте скрипт, изменив папку в переменной DIR и длительность между случайными выборками (sleep).

#!/bin/bash
DIR="/home/vasilisc/Ubuntu One/wallpaper/acters"
while [[ 1 -eq 1 ]]; do
        PIC=$(ls "${DIR}"/*.jpg | shuf -n1)
        gsettings set org.gnome.desktop.background picture-uri file:///"$PIC"
        sleep 120
done
exit 0

Поместите скрипт в автозагрузку и наслаждайтесь чередой любимых изображений.


Восстановление прав доступ и владельца

Часто при копировании с флешки файлы на диске приобретают странные права доступа. Это не проблема если файлы нужны только себе, но становятся проблемой если ими делиться по сети с коллегами или семьёй. Права доступа можно изменить через Наутилус, но предлагаемый скрипт выполняет эту работу надёжней и быстрее.

Добавьте в массив DIR_LIST нужные к исправлению каталоги. По желанию измените выставляемые права доступа для каталогов chmod 775 и для файлов chmod 664. Владелец выставляется тот, кто запустил скрипт ( itsme=`whoami` ). Можно жёстко указать владельца, изменив sudo chown -R ${itsme}:${itsme} ${papka}.

Sudo требуется из-за того, что файлы теоретически могут принадлежать root'у и чтобы вернуть владычество над ними и требуется sudo.

#!/bin/sh
# http://vasilisc.com/
clear
DIR_LIST="${HOME}/Distrib/
${HOME}/Incoming/
${HOME}/Видео/
${HOME}/Музыка/
${HOME}/Документы/"
#
itsme=`whoami`
#
for papka in $DIR_LIST
do
    echo ""
    echo "========================================================="
    echo ${papka}
    echo "Меняем владельца для всех файлов и подкаталогов"
    sudo chown -R ${itsme}:${itsme} ${papka}
    echo "Меняем права доступа для всех файлов и подкаталогов"
    sudo find ${papka} -type d -exec chmod 775 '{}' \;
    sudo find ${papka} -type f -exec chmod 664 '{}' \;
    # ------------------------
done
exit 0


Запуск игр в префиксах WINE

Есть множество замечательных программ, которые помогают в работе с WINE и его префиксами. Сам лично, не люблю лишних сущностей-программ между основной программой и мной, особенно в конфигурировании. Хотелось бы контролировать WINE напрямую и в помощь оформил скрипт, который позволяет использовать мощь префиксов WINE и облегчает запуск различных игр, даже с возможностью играть на другом экране Xorg.
Вот скрипт, объяснения ниже.

#!/bin/bash
#
# Игры в Linux
# http://vasilisc.com/games_linux
#
clear
echo `date`
echo "---=== Старт игры через WINE ===---"
###################### начало переменных ############################################
# wine префикс
wprefix="${HOME}/wineroot/hon1015"
#
if [ ! -d "${wprefix}" ]; then
    echo "[${wprefix}] Нет такого пути!"
    exit
fi
#
# полный путь к исполняемому файлу игры
path_game="${HOME}/gamez/hon1015/hon.exe"
#
if [ ! -r "${path_game}" ]; then
    echo "[${path_game}] Нет такого файла!"
    exit
fi
# Играть на этом экране или отдельном экране Xorg
# больше информации
# help.ubuntu.ru/fullcircle/25/%D1%83%D1%81%D0%BA%D0%BE%D1%80%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B8%D0%B3%D1%80_%D0%BF%D0%BE%D0%B4_%D1%85
# 0 - на этом экране
# 1 - на отдельном экране
sxorg="0"
# версия WINE
vwine=`wine --version`
# переменная WINEDEBUG
# WINEDEBUG=warn+all установите для отладки
# больше информации
# opennet.ru/docs/RUS/wine_guide/wine-ug-4.html
# winehq.org/docs/winedev-guide/wine-debugger
setWINEDEBUG="fixme-all,warn-cursor,-relay"
######################## конец переменных ##############################################
echo "Игра ${path_game} "
echo "${vwine} префикс ${wprefix}"
echo -n "Переходим в каталог с игрой "
echo `dirname "${path_game}"`
cd `dirname "${path_game}"`
echo -n "Запуск игры в "
#
if [ "${sxorg}" = "0" ]; then
    # будем играть на этом экране Xorg
    echo "этом же экране Xorg "
    echo "----- вывод сообщений от WINE -----"
    sleep 2
    env WINEPREFIX="${wprefix}" WINEDEBUG="${setWINEDEBUG}" wine "${path_game}"
else
    # будем играть на отдельном экране Xorg
    echo "отдельном экране Xorg "
    echo "----- вывод сообщений от WINE -----"
    sleep 2
    X :2 -terminate -config xorg.conf & sleep 3
    DISPLAY=:2 nice -2 env WINEPREFIX="${wprefix}" WINEDEBUG="${setWINEDEBUG}" wine "${path_game}"
fi
#
echo "----- конец вывода сообщений от WINE -----"
echo "При проблемах с запуском игры, сначала обновите WINE"
echo "sudo apt-get update; sudo apt-get install wine"
echo "Больше информации об запуске игры в WINE и устранении различных проблем - на сайте appdb.winehq.org"
echo "---=== Завершение игры через WINE ===---"
echo `date`
sleep 2
exit 0

Через переменные wprefix, path_game указываем, где расположены существующие каталоги префикса и путь к исполняемому файлу игры, рекомендую использовать команду realpath.

Самый лучший способ создать в новом префиксе основу для игры - это использовать что-то типа env WINEPREFIX="${HOME}/wineroot/hon1015/" winecfg, который у меня оформлен в виде отдельного скрипта и помогает в дальнейшем в настройке соответствующего префикса вайн.

Переменная sxorg помогает запускать игру или в текущем экране Xorg (если =0) или в отдельном экране Xorg (если =1). Игра в отдельном Xorg более комфортна и я рекомендую использовать эту возможность. Но сначала настройте фичу, используя статью Игра в отдельном X.

Ну в общем-то и всё. Изменяйте скрипт под ваши нужды, копируйте его для всех ваших игр и настраивайте префиксы, которые позволят подстроиться под каждую игру индивидуально и не мешать друг другу. Команда-скрипт winetricks поможет в установке необходимых библиотек и компонент, например env WINEPREFIX="${HOME}/wineroot/hon1015" winetricks directx9.

Рекомендую свою статью к прочтению про ситуацию с играми в Linux.


Зависания Compiz на картах nVidia

Если у вас видеокарта nVidia и Ubuntu с включённым Compiz, то, возможно, вы встретились с проблемой, когда система "замирает" (freeze) на некоторое время или глухо виснет.
В логах обычно наблюдаются строки:
NVRM: Xid (0000:01:00): 6, PE0004
NVRM: Xid (0000:01:00): 13, 0004 00000000 00000497 00000ff4 05000000 00000000
NVRM: Xid (0000:01:00): 12, COCOD 00000004 beef5097 00008597 00000ff4 05000000

Если отключить Compiz, то зависания пропадают. Но в релизе Ubuntu 11.10 Compiz будет обязателен и его отключение не выход и он тут совершенно не причём.
Суть проблемы в том, что видеокарта nVidia с включённой по умолчанию опцией PowerMizer динамически меняет частоты памяти и GPU на видеокарте, а система болезненно на это реагирует. Выходом является смена в nvidia-settings в разделе PowerMizer - Preferred Mode режима с Adaptive на Maximum Performance.
После перезагрузки ПК, настройки сбросятся и нужно автоматизировать установку Maximum Performance.
Создайте скрипт и сделайте его исполняемым:

#!/bin/sh
# Больше информации на сайте http://vasilisc.com/
# Загружаем настройки
nvidia-settings -l
# меняем с Adaptive на Maximum Performance
nvidia-settings -a [gpu:0]/GPUPowerMizerMode=1
# Включаем возможность Overclocking
# Для смены частот требуется установка Coolbits в /etc/X11/xorg.conf
# Section "Device"
# Identifier "Device0"
# Driver "nvidia"
# VendorName "NVIDIA Corporation"
# Option "Coolbits" "1"
# EndSection
#nvidia-settings -a GPUOverclockingState=1
#nvidia-settings -a GPU2DClockFreqs=135,260 -a GPU3DClockFreqs=405,405
exit 0

В Параметры системы - Автоматически запускаемые приложения добавьте скрипт, чтобы он автоматически стартовал и менял с Adaptive на Maximum Performance. Ваши зависания Compiz в Ubuntu на видеокартах nVidia исчезнут как страшный сон.


Массовый SSH к нескольким серверам

Если вы админ и вам часто требуется подсоединяться к вашим серверам по безопасному протоколу SSH, то ввод множества паролей утомляет. Мы автоматизируем процесс, используя вместо паролей ключи и создадим скрипт, который откроет нам SSH консоли ко всем нашим серверам. Чтобы перейти от парольной авторизации к авторизации по ключам, на своём компьютере под управлением Linux командуйте создание ключей (без sudo!)
ssh-keygen -t rsa
Вас попросят ввести ключевую фразу passphrase, не вбивайте её, нажмите просто Enter! Не нужно защищать ключи парольной фразой, так как теряется смысл перехода. Если вместо вбивания пароля, будете вбивать парольную фразу, то от чего ушли - к тому и пришли. Защищать наши ключи мы будем физически, то есть блокируя компьютер, когда уходим и не давая кому-либо копировать ключи куда-либо. Когда создадите ключи, то у вас появятся два файла: id_rsa и id_rsa.pub в вашем каталоге ~/.ssh/
id_rsa - ваш приватный ключ, который нужно охранять
id_rsa.pub - публичный ключ, который будем копировать на сервера
Командой ssh-copy-id вашsshакаунт@ваш_адрес_сервера скопируется автоматически публичный ключ id_rsa.pub на ваш_адрес_сервера и добавится на ваш_адрес_сервера в файл ~/.ssh/authorized_keys. Повторите команду для других ваших серверов, меняя ваш_адрес_сервера. Теперь вы можете не использовать пароль, а подключаться ssh вашsshакаунт@ваш_адрес_сервера
Теперь напишем скрипт, который в Gnome Terminal откроет во вкладках ssh консоли серверов и переименует вкладки, чтобы легче было ориентироваться. Создайте исполняемый скрипт, вставьте строки и отредактируйте под ваши нужды
#!/bin/sh
gnome-terminal --tab --title="server1" --command="ssh вашsshакаунт@192.168.0.1" \
--tab --title="server2" --command="ssh вашsshакаунт@192.168.0.2" \
--tab --title="server3" --command="ssh вашsshакаунт@192.168.0.3" \
--tab --title="server4" --command="ssh вашsshакаунт@192.168.0.4"
exit 0

Вызывайте скрипт, который облегчит массовый SSH к серверам. Чтобы запуск некоторых программ, типа Midnight Commander, не изменял установленный вами заголовок, можно в Правка - Параметры профиля установить во вкладке "Заголовок и команда" параметр "Оставить начальный заголовок".


Программная перезагрузка ADSL модема

Изучая Питон, сел написать себе скрипт перезагружающий мой D-link ADSL DSL-2500U/BRU/D. На Хабре человек выкладывал похожий скрипт, но мне он не подходит так как мой ADSL модем не позволяет зайти на него по телнету, есть только веб-мордочка через которую нужно нажать кнопку Reboot или на самом устройстве нажать кнопочку.
Часто ночью модем "залипает" и перестают качаться торренты и раздаваться интернет друзьям по локалке. Логика скрипта на Питоне проста:
1) пингаем сайты в инете
2) если нет хотя бы одного пакета дошедшего до серверов в инете, то
3) авторизуемся программно в веб-мордочке ADSL модема и
4) вызываем скрипт в недрах модема для перезагрузки
Подводные камни для тех у кого модем так же имеет только веб-морду, но другой фирмы и модели
1) вам нужно узнать realm вашей веб формы модема, вам поможет в этом google.ru.
2) нужно узнать какой скрипт вызывается для рестарта модема, для этого зайдите браузером на модем и исследуйте его.
Проверьте работу скрипта, отредактируйте его, прописав свои данные и смело вызывайте скрипт через cron

Если вы настроены на получение писем от вашей машины, то будете получать уведомления когда пропадал Интернет.
Скачать скрипт rstdlink.py


Проверка скриптом репозиториев Ubuntu

Пишу скрипт VerRep.py на Питоне, который проверяет репозитории в ваших /etc/apt/source.list и /etc/apt/sources.list.d/.
Как вы знаете в Ubuntu репозитории прописаны в виде
deb ppa.launchpad.net/ubuntu-mozilla-daily/ppa/ubuntu karmic main multiverse restricted universe
Скрипт VerRep.py открывает на чтение файлы в ваших /etc/apt/source.list и /etc/apt/sources.list.d/ и производит проверку указанных там репозиториев. Что уже реализовано:
1) Проверяется доступность сервера, в нашем примере ppa.launchpad.net. Если сервер не доступен, то выводится рекомендация.
2) Проверяется релиз, в нашем примере karmic. Так же скрипт проверяет наличие вашего релиза в данном репозитарии,
так как вы можете использовать, для примера релиз jaunty, а в репозитории есть файлы для вашего релиза karmic.
3) Проверяются указанные компоненты, в нашем примере main multiverse restricted universe. Если какой-нибудь компонент отсутствует, то выводится рекомендация
Что хочется реализовать в будущем:
1) Нормальную обработку работы скрипта VerRep.py через прокси-сервер. Пока только прямое соединение с интернетом.
2) Проверку скриптом VerRep.py недостающих компонентов, например, вы указали только компонент main, а в репозитории есть еще разделы multiverse restricted universe. Следовательно часть программ вы не сможете поставить из данного репозитория. Тут много подводных камней, я пока взял таймаут.
3) Хочу реализовать проверку скриптом VerRep.py репозиториев, которые не подписаны ключом, чтобы скрипт помогал получить ключ из интернета.
4) Интернационализировать скрипт VerRep.py, чтобы скрипт "разговаривал" с вами на вашем родном языке.
5) Пока скрипт не обрабатывает репозитории на ftp:// вам придется временно закомментировать такие репозитории, если вы хотите проверить оставшиеся скриптом VerRep.py.
6) Ввести параметры скрипту VerRep.py, чтобы управлять его поведением.
Скачать скрипт VerRep.py


Перезапускаем демона после восстановления связи с Интернет

Есть множество решений позволяющих перезапускать демона при определённых условиях, но мне понадобилось перезапускать rinetd после восстановления связи с Интернетом. Эта глупая программа rinetd при проблеме с Интернетом сразу же выходит из памяти и её бесполезно перезапускать, пока не появится Интернет. Логика скрипта проста. Проверяем доступ в Интернет, если пропала связь, создаём файл-флаг. Как только связь с Интернет восстановлена, скрипт проверяет доступ в Интернет и наличие файла-флага, который сигнализирует что была потеря связи, файл-флаг стирается и выполняется необходимое действие, например рестарт демона.
Требуется выполнение скрипта с некоторой периодичностью, например раз в 10 минут. Для этого внесите изменения в /etc/crontab.
Текст скрипта:
#!/bin/bash
# после восстановления инета рестартим
# vasilisc 2010
/usr/bin/curl --silent --output /dev/null ya.ru
response=$?
if [ "$response" -ne "0" ]; then
  # Пропал интернет - создаём файл-флаг
  /bin/date >> /root/date_noinet
  /bin/touch /root/flag_noinet
else
  if [ -e /root/flag_noinet ]; then
    # Появился интернет и файл-флаг существует, то есть было пропадание интернета
    # стираем файл-флаг
    /bin/rm -f /root/flag_noinet
    # рестарт демона
    /etc/init.d/rinetd restart
  fi
fi
exit 0

Скачать скрипт restart_after_restore


Уменьшаем приоритет тяжёлым приложениям

Некоторые программы на обычном компьютере слишком прожорливы и ухудшают отзывчивость системы на команды пользователя.
Примерами таких программ можно считать различные p2p клиенты (torrent и DC), менеджеры закачек (d4x, KGet), конверторы видео/аудио файлов, индексация персональной поисковой системой Tracker, Beagle, Google Desktop и т.д и т.п. Таким программам, часто работающим в фоне, требуется производить множество операций и занимать время процессора (CPU) и пропускную способность жесткого диска (HDD). Например p2p клиенты часто выполняют хеширование (подсчет контрольных сумм), которое интенсивно использует процессор для расчетов (занят CPU) над большими видеофайлами (занят HDD). В это время реакция системы на действия пользователя снижается.
В Linux вы можете понизить CPU приоритет запущенному процессу, чтобы процесс выполнялся позже остальных. Свою работу процесс выполнит, но не будет мешать остальным процессам и реакция системы на ваши действия будет быстрой.
Вы так же можете понизить I/O приоритет запущенному прожорливому процессу, чтобы сделать его последним в очереди к диску.
Чтобы каждый раз вручную не выставлять приоритеты через Системный монитор, можно использовать скрипт lowprio.
Откройте его в Текстовом Редакторе и добавьте имя процесса программы в массив ARRAY.
Помните:

  • Имя программы НЕ РАВНО имени процесса программы. Например, p2p клиент Холодный Лёд - EiskaltDC++ имеет имена процессов eiskaltdcpp-qt (в KDE) и eiskaltdcpp-gtk (в Gnome). Браузер Firefox в памяти представлен процессом firefox-bin. Запустите Системный монитор и посмотрите списки процессов, чтобы узнать имя процесса, которому будете менять приоритет.
    Заполнив ARRAY именами ваших тяжёлых программ (точнее процессов) вы можете вызывать скрипт с Рабочего Стола.
  • Программа должна быть запущена, скрипт меняет приоритет ЗАПУЩЕННОГО процесса. Изменив приоритет, скрипт не остаётся в памяти и не отслеживает программы.
  • Программа может "знать" о своей прожорливости и менять свой приоритет самостоятельно. Прежде чем вносить имя такой программы в массив ARRAY проверьте настройки данной программы и поищите пункт, связанный с приоритетом.
  • Если прожорливая программа выходит из памяти и вы запускаете её вновь, то приоритеты выставляются по умолчанию и снова необходимо их изменить по вашему желанию. Скрипт lowprio можно вызывать часто как пожелаете. Изменение изменённого не разрушительно и безвредно.
  • Скрипт lowprio уменьшает приоритет выбранным вами процессам на +2 (renice +2) и приоритет ввода-вывода I/O на idle (ionice -c3)

Текст скрипта:

#!/bin/bash
# скрипт изменяет приоритет программам, требующим большие ресурсы от ПК
# улучшается отзывчивость системы на действия пользователя
# vasilisc 2010
clear
ARRAY=(
'eiskaltdcpp-qt'
'gdl_indexer'
'gdl_fs_crawler'
'amule'
'opera'
'beagled'
'beagle-search'
'beagled-helper'
'ktorrent' )
ELEMENTS=${#ARRAY[@]}
for (( i=0;i<$ELEMENTS;i++)); do
 pidof -s -x ${ARRAY[${i}]} >> /dev/null 2>&1
  if [ $? -ne 0 ]; then
    echo ${ARRAY[${i}]} " процесс не запущен! Приоритет не изменён."
    echo -----------------------
  else
    #меняем CPU приоритет на +2 (чуть ниже обычного)
    #меняем I/O приоритет на idle (-с3 - самый последний)
    echo "* Процессу " ${ARRAY[${i}]} " приоритет изменён!"
    renice +2 $(pidof -s ${ARRAY[${i}]}) #>> /dev/null 2>&1
    ionice -c3 -p $(pidof -s ${ARRAY[${i}]}) #>> /dev/null 2>&1
    echo -----------------------
  fi
done

Скачать скрипт lowprio


Тотальная чистка и реиндексация Sqlite

Подробнее об оптимизации можно прочесть в статье Ускорение Ubuntu
Многие программы в Ubuntu хранят данные не в текстовых файлах, а в базах данных и часто в качестве последней выступает система управления базами данных (СУБД) Sqlite. Можно провести средствами Sqlite чистку пустых записей и создание заново индексов файла базы данных. Лучшим вариантом будет создание скрипта, содержащего вызовы Sqlite, для периодического запуска его время от времени. И так:
1. Установите sqlite3 через Синаптик или в Терминале sudo apt-get install sqlite3
2. Запустим файловый менеджер Nautilus и создадим папку bin в домашней папке. Перейдем в папку bin и там в меню Наутилуса Файл — Создать документ — Пустой файл. Дайте имя файлу, например optimizer. Откройте этот файл в Текстовом редакторе и вставьте строки, сохраните изменения
#!/bin/bash
find ~/ -size +100k -type f -print0 | \
while read -d '' FILE; do
  abs_file_name=$(readlink -f "$FILE")
  headfile=`head -c 15 "$abs_file_name"`;
  if [ "$headfile" = "SQLite format 3" ]; then
    file_size_do=`du -b "$abs_file_name"|cut -f1`;
    sqlite3 "$abs_file_name" "VACUUM; REINDEX;" > /dev/null 2>&1
    file_size_posle=`du -b "$abs_file_name"|cut -f1`;
    echo "$abs_file_name";
    echo "Размер ДО $file_size_do";
    echo "Размер ПОСЛЕ $file_size_posle";
    echo -n "Процент "
    echo "scale=2; ($file_size_posle/$file_size_do)*100"|bc -l
  fi
done
sleep 2
exit 0

3. В Наутилусе на файле optimizer щелкните правой клавишей мыши и вызовите Свойства, в закладке «Права» выставьте права Выполнения или все это можно сделать в Терминале, используя команду chmod +x ~/bin/optimizer
4. Перейдите в консоль, нажав Ctrl + Alt + F1 и залогиньтесь под своей учетной записью.
5. Завершите Gnome/KDE
$ sudo /etc/init.d/gdm stop && sudo stop gdm
$ sudo /etc/init.d/kdm stop && sudo stop kdm

6. Запустите скрипт, который разыщет все файлы SQLite в домашней директории и оптимизирует их. Перенаправляем вывод в файл, чтобы посмотреть его позже в удобной среде Gnome.
$ ~/bin/optimizer > ~/report_sqlite_shrink.txt
7. Дождитесь окончания работы скрипта и перезагрузись:
$ sudo shutdown -r +0
8. Откройте в Текстовом Редакторе файл ~/report_sqlite_shrink.txt и посмотрите какие файлы подверглись оптимизации, посмотрите в процентах на сколько лишнего баласта было до оптимизации.
Скачать скрипт optimizer


Прозрачность Conky в KDE4

В KDE4 у известного монитора Conky не работает "прозрачность". Суть проблемы в том, что Conky использует псевдопрозрачность, копируя на свою область часть Рабочего Стола. Но в KDE4, в отличии от Gnome, Рабочий Стол это не папка и не файл, а виджет, как и всё остальное. Добавьте сюда невозможность узнать через консоль какой файл KDE4 сейчас использует в роли Обоев на Рабочем Столе, выкиньте все советы для KDE3 и получите полную картину проблемы.
Выходы из ситуации следующие:
1) Не использовать Conky, а добавить из репозитория дополнительные виджеты и использовать их вместо Conky
2) Смирится с тем, что фон Conky не прозрачен
3) Использовать данный совет и применить скрипт Прозрачность Conky в KDE4
Что делает данный скрипт?
Скрипт определяет текущий режим Обоев в KDE4 и вызывает утилиту feh, которая помогает Conky оформить свой фон. На сегодняшний день скрипт может обрабатывать только два режима Обоев KDE4 - Изображение (одна статичная картинка) и Слайдшоу (один! каталог с изображением). С помощью inotifywait отслеживаются изменения файла настроек KDE4 и каталога с картинками для Рабочего Стола, который укажете вы в свойствах KDE4. Как только происходят изменения, они применяются с помощью утилиты feh. Следующее обновление своего окна Conky учитывает изменения и фон Conky согласуется с картинкой на Рабочем Столе. Как применять скрипт?
0) Установите пакеты inotify-tools и feh (sudo apt-get install inotify-tools feh)
1) Распакуйте архив скрипта в любую папку в домашней директории, например в ~/bin/. И сделайте его исполняемым, например в Konsole chmod +x ~/bin/kde4conky
2) Запустите в Konsole скрипт для проверки его работы ~/bin/kde4conky. Прервать работу скрипта вы можете с помощью Ctrl + C.
3) В свойствах Рабочего Стола измените на нужный вам режим показа. В окне, где работает скрипт, вы должны наблюдать изменения.
4) Conky должна автоматом получать изменения от feh и менять свой фон, согласуясь с текущей картинкой Рабочего Стола.
5) Если все проверки и тесты прошли нормально, можно занести скрипт в Автозагрузку KDE4.
Минусы скрипта:
1) У KDE4 не узнать смену одну статичной картинки на другую статичную картинку в режиме Изображение. Выход один - сменить режим на СлайдШоу и вернуться назад на режим Изображение, но указать уже новую картинку.
2) В режиме СлайдШоу пока можно использовать только ОДИН каталог.
3) В режиме СлайдШоу бывает, что Conky использует не текущую картинку и происходит рассогласование до следующей смены картинки. Советую на чистом месте Рабочего Стола KDE4 щелчок правой клавишей мыши и там пункт меню Следущее Изображение.
4) KDE4 свои изменения не сразу сохраняет в файл и поэтому наблюдается некоторая инертность, на Рабочем Столе новая картинка, а фон Conky еще "старый".
Итог:
Как у любого костыля, у данного скрипта Прозрачность Conky в KDE4 много минусов, но в целом скрипт нормально работает. Временная дикость и нестыковки можно наблюдать только при смене режимов, в остальном костыль работает. На просторах Интернета вы можете найти другие костыли, но у них жирным минусом идёт необходимость, чтобы раздел /home не использовал в /etc/fstab параметры noatime и relatime, а я на это не согласен и поэтому пришлось писать свой костыль. Вообщем, ждем нормальной реализации функции позволяющей получать путь к
текущему изображению Рабочего Стола KDE4, тогда этот скрипт будет не нужен или он станет более элегантным и простым. Можно еще у автора Conky попросить, чтобы он в Conky реализовал нормальную работу в KDE4.

Родственные материалы:
Часто Задаваемые Вопросы Ubuntu
Различные советы Ubuntu, которые показывают нестандартные приёмы или красивое решение какой-либо проблемы.

    Twitter   


Разделы

Главная
Новости
Ворох бумаг
Видео Linux
Игры в Linux
Безопасность
Статьи о FreeBSD
Статьи об Ubuntu
Статьи о Snappy
Статьи об Ubuntu Phone
Статьи о Kubuntu
Статьи о Xubuntu
Статьи о Lubuntu
Статьи об Open Source
Карта сайта

Лучшее на сайте:

1С под Linux.   Ускорение Ubuntu.   21 пример iptables.   Цикл статей о Ceph.   Убунту в дикой среде.   Ubuntu Linux на SSD.   Ubuntu для блондинок.   Поддержка железа в Linux.   BTSync на службе у админа.   Андроид программы в Ubuntu.   Прокидывание портов для p2p.   Анти СПАМ в Postfix.   Такая поисковая оптимизация сайта считается мобильной.



Круги Гугл Ада.


Группа поддержки