четверг, 10 ноября 2011 г.

11.10

Просидев два дня на Unity понял что наверное все-таки смогу ей пользоваться, посему решил не ждать LTS до апреля и проапгрейдится до 11.10 прямо сейчас.

В целом все прошло удачно и все программы работают как и работали раньше. Unity стала чуть покраше и поприятнее в использовании. Однако я заметил нескольких мелких недостатков которые, я надеюсь, скоро пофиксят.

  • indicator-session занимает очень много места из-за того что выводит полное имя пользователя. Можно отключить в настройках через dconf-editor.
  • Лоток привода оптических дисков больше не блокируется (мне это нужно на ноуте). Видимо что-то в свежем третьем ядре.
  • Не запоминается уровень подсветки при перезагрузке
  • Иконка заряда батареи отображается дважды - в индикаторе и в трее.
  • В oneiric новый репозиторий един для обеих (i386 и x86) архитектур из-за чего консольный aptitude не может разрешить зависимости и настойчиво предлагает снести с сотню пакетов. После отмены предлагаемых им изменений можно что-то делать до следующего запуска.
  • Есть впечатление, что визуальный редактор репозиториев Software Source работает как-то не так. Ничего, поредактируем из консоли.
  • weather-indicator все также не может загрузить подробный прогноз для Москвы. Краткий прогноз работает нормально.
  • Thunderbird орет, что не может подключиться к удаленной адресной книге в Ubuntu One (а я и правда не подключен). Снес все пакеты Ubuntu One - орать перестал. Заколебали со своими облаками.
  • Выпадающее окно Guake так же некорректно устанавливает свою ширину при закрепленной панели Unity. Я уже писал как можно вылечить.
Что еще можно заметить?
  • Шрифт очень крупный. Я раньше корректировал DPI в настройках до значения 82-84 и все было в порядке. Сунулся было тут и не нашел ничего подобного, вообще никаких настроек нет. Ставим gnome-tweak-tool (он заодно подтянет альтернативную оболочку gnome-shell AKA Gnome3) - там есть все настройки включая размер и масштаб шрифтов, антиалиасинг и настройки иконок. Все размеры на единицу меньше, моноширийный шрифт - Monospaced-9, новый шрифт Ubuntu Mono как-то не впечатляет вообще.
  • Из-за изменений в лицензионной политике Sun/Oracle JDK больше нет в репозиториях и не будет. К сожалению все прогрессивное человечество вернулось в своем развитии на ступеньку вниз - к виндузятникам и маководам. В репах есть OpenJDK6 и OpenJDK7. Я сначала немного расстроился и кинулся искать что же делать. Вариантов интернет предлагает два: воспользоваться неким загадочным репозиторием, либо полностью реализовывать все действия инсталлятора через механизм Debian alternatives. Потыкавшись немного, понял, что лучше всего оставить OpenJDK6 в качестве общесистемной JDK, а Oracle JDK для разработки, production и особых случаев качать и ставить руками в /opt - эта схема вдобавок дает кучу очень правильных преимуществ, о чем может напишу потом подробней. Так что все это нестрашно на самом деле.
  • Наконец-то можно в программах-по-умолчанию установить раздельно аудио и видео плееры. Для аудио использую Audacious (понимает cue-разметку, что редкость), для видео использую VLC (жрет все и позволяет настраивать размер буфера, что важно при стриминге через Wi-Fi). Пакет banshee снес нафиг - не люблю комбайны, да и выпилят его в следующем релизе все равно.
  • Ubuntu Software Center уверенно удет к успеху - так уверенно, что даже запускать его не хочется.
  • Тема Thunderbird прикольная, но странная и отличается от других приложений. Почему Firefox так себя не рисует?
  • Индикатор нагрузки indicator-multiload уже в штатном репозитории.
  • Настройки все сократили до минимума и сделали похожими на настройки в OS-X
  • Стрелочки около иконок на панели Unity показывают на каком рабочем столе находится окно: на активном или неактивном.
  • Окно Dash home во весь экран - очень правильно.
  • Вместо штатного Static windows switcher по Alt-Tab сделали свой. Красиво, но как-то не очень удобно - мышкой окно нельзя быстро выбрать. Надо доделывать.
  • По Alt-F2 можно вводить цепочки типа gksu gedit doc.txt - в 11.04 не работало

В целом все работает стабильно, ничего не падает. В целом складывается сильное впечатление, что Космонавту не дают покоя лавры покойного Джобса: "бездарности подражают, гении крадут". Меня все это беспокоит, не знаю радоваться или нет и держу дистрибутив Arch на всякий случай. Однако чем больше домохозяек и хомячков удасться привлечь, тем лучше будет и нам - простым работникам консоли.

Думаю народ поорет немного, набалуется форкнутыми от Ubuntu дистрибутивами и через годик, когда весь софт стабилизируется, будет восхвалять Космонавта за смелость. Только верните простое гномовское меню назад.

вторник, 8 ноября 2011 г.

Unity

В неравной борьбе между моим упрямством и волей Космонавта с предсказуемым преимуществом победила последняя и я от безысходности и с 100-го раза все-таки перешел на Unity. Радости особой не испытываю, так как считаю, что Gnome 2 меня устраивал чуть более чем полностью и был удобен и быстр, однако воля Космонавта непоколебима и начиная с 11.10 никакого Gnome 2 в репозиториях уже нет.

Все нижеследующее относится к Ubuntu 11.04 на которой я все еще временно остаюсь.

Индикаторы

Так как гномовских апплетов больше нет, всю необходимую функциональность приходится реализовывать индикаторами. Для себя лично установил:

  • weather-indicator (в штатном репозитории)
  • classicmenu-indicator (ссылка в статье)
  • indicator-multiload (ссылка в статье)

Индикатор classicmenu-indicator решает одную из самых больших проблем - отсутствие быстрого доступа к запуску приложений через общее меню

Также традиционно удаляю бесполезные для меня:

  • indicator-me
  • indicator-messages

Быстрые клавиши

Да, в Unity есть быстрые клавиши.

Объединенное меню

Вторая серьезная проблема - это объединенное меню. Нет ничего более раздражающего чем искать меню маленького окошка калькулятора на противоположной стороне экрана здорового монитора. Специально спросил маководов - говорят, что тоже привыкали. Мне привыкать к этому не хочется, поэтому решаем проблему удалением следующих пакетов: appmenu-gtk, indicator-applet-appmenu, indicator-appmenu

Трей

Сюрпризом стало то, что иконки большинства приложений в трее не показываются. Оказалось, что необходимо специально выдавать разрешения на публикацию иконок в трее. Я разрешил вообще все иконки - для этого в редакторе dconf-editor для ключа /desktop/unity/panel/systray-whitelist нужно установить значение ['all']

Настройки

Кое-какие настройки Unity можно найти в CompizConfig Settings Manager в разделе Desktop/Ubuntu Unity Plugin. Необходимые для меня:

  • Desktop/Ubuntu Unity Plugin/Behaviour/Hide Launcher = Never (чтобы хоть как-то видеть какие именно приложения сейчас запущены)
  • Desktop/Ubuntu Unity Plugin/Behaviour/Key to show the launcher = <Alt><Super> (активно пользуюсь комбинациями Super+W, Super+D, Super+S - заметил, что иногда при этих командах лаунчер случайно вылазит сам в случае когда у него установлен биндинг лишь на одну лишь клавишу <Super>)
  • Desktop/Ubuntu Unity Plugin/Behaviour/Key to open the first panel menu = Отключить (иначе весьма нужная клавиша F10 будет занята этой ерундовой функцией)
  • Desktop/Ubuntu Unity Plugin/Experimental/Launch Icon Size = 32 (меньше размер - больше иконок влезет)
  • Desktop/Ubuntu Unity Plugin/Experimental/Backlight Mode = Backlight Toggles
  • General/General options/Desktop Size = Нужная конфигурация рабочих столов (я предпочитаю 1x3)
  • Window Management/Static Application Switcher/Appearance/Mipmap = Enabled
  • Desktop/Expo/Appearance/Mipmaps = Enabled
  • Desktop/Desktop Wall/Viewport Switching/Allow Wrap-Aroung = Enabled

Guake

У выскакивающей панели Guake есть одна проблема: она растягивается по всей ширине монитора, что на современных мониторах приводит к тому, что такой широкой консолью пользоваться не совсем удобно. Кроме того, в Unity эта ширина не совсем корректна сама по себе. К сожалению, настроить ширину окна через диалог настроек не представляется возможным, поэтому настраиваем ширину прямо в коде

--- /usr/lib/guake/guake.py.bak 2011-11-07 11:42:14.580261012 +0400
+++ /usr/lib/guake/guake.py 2011-11-07 12:29:05.500261042 +0400
@@ -814,7 +814,7 @@
         """
         screen = self.window.get_screen()
         height = self.client.get_int(KEY('/general/window_height'))
-        width = 100
+        width = 70
         halignment = self.client.get_int(KEY('/general/window_halignment'))
 
         # get the rectangle just from the first/default monitor in the

Заодно добавляем рамку вокруг окна в 1 пиксел

--- /usr/share/guake/guake.glade.bak 2011-11-07 12:33:05.830261044 +0400
+++ /usr/share/guake/guake.glade 2011-11-07 12:44:12.660261052 +0400
@@ -13,6 +13,7 @@
     <child>
       <widget class="GtkVBox" id="mainframe">
         <property name="visible">True</property>
+        <property name="border_width">1</property>
         <child>
           <widget class="GtkNotebook" id="notebook-teminals">
             <property name="visible">True</property>

пятница, 28 октября 2011 г.

PDF > DJVU

Читаю много книжек в последнее время на планшете. Периодически попадаются странные (но не растровые!) PDF документы, которые открываются с жуткими тормозами - не помогает даже перегон файла через pdfedit. Для таких книжиц выполняю конвертирование в DJVU через штатную утилиту pdf2djvu командой типа:
pdf2djvu --monochrome -j0 -o output.djvu input.pdf

At

Оказалось, что штатная утилита at не способна запустить ни одну gui программу. Проблема в том, что переменная окружения DISPLAY не запоминается и не передается дочернему процессу - причем это даже описано в руководстве по at. Решением будет запоминать и передавать переменную DISPLAY принудительно.
echo export DISPLAY=$DISPLAY \&\& zenity --info --text \"Hello\" | at now + 1 minutes
Небольшой скрипт-напоминалка:
#!/bin/bash

if (( $# < 1 ))
then
    echo "Time for 'at' is not specified"
    exit -1
fi

echo export DISPLAY=$DISPLAY \&\& \(play -q /usr/share/sounds/ubuntu/stereo/dialog-information.ogg \&\) \&\& \
  zenity --info --title \"Alarm\" --text \"Notification for [$@]\" | at "$@"

вторник, 4 октября 2011 г.

Обои для экрана входа

Мне никогда не нравилась штатная черно-синюшняя тема Ubuntu. Но, если основную тему и обои рабочего стола сменить очень просто, то смена обоев для экрана входа является неочевидной.

Вот инструкция по простой смене обоев для экрана входа: http://maketecheasier.com/change-login-and-boot-screen-in-ubuntu-lucid/2010/05/13:

  1. Скопировать файл с картинкой в /usr/share/backgrounds
  2. sudo cp /usr/share/applications/gnome-appearance-properties.desktop /usr/share/gdm/autostart/LoginWindow
  3. Завершить сеанс (log out). Появится экран входа с запущенным апплетом в котором можно сменить обои. Залогиниться обратно.
  4. sudo unlink /usr/share/gdm/autostart/LoginWindow/gnome-appearance-properties.desktop

суббота, 1 октября 2011 г.

KVM и Microsoft Windows XP

Решил перейти с безблагодатного VirtualBox на православный KVM. Как и ожидал, основные проблемы возникли с переводом гостевой Windows XP SP3 EN, которую держу лишь ради пары нужных программ.

Проблемы возникли следующие.

  • Просто сконвертировать контейнер с виртуалкой не получилось - из-за смены виртуального оборудования Windows вылетает при загрузке с синим экраном. Поскольку возиться с выяснением причин было лень, пришлось переустановить Windows заново
  • Низкая производительность виртуального диска - все сильно тормозит
  • В VirtualBox можно было задать Shared Folders для удобного обмена файлами между хостом и гостем, обещанная в KVM опция -smb почему-то не работает
  • Нет интеграции буфера обмена между хостом и гостевой системой
  • Можно задать только фиксированные стандартные разшения экрана у гостевой системы, при этом окно QEMU использует рабочее пространство на моем мониторе неэффективно. Нельзя задать произвольный размер окна как в VirtualBox

Устранение всех проблем и заметки по интеграции.

После внимательного чтения мануала к KVM выяснилось, что режим работы виртуального диска по-умолчанию "writethrough" является надежным, но не очень производительным, особенно для файловых контейнеров в формате QCOW2 - поэтому меняем его на гораздо более производительный режим "writeback".

Отказываемся от работы с гостевой системой через окно QEMU - вместо этого используем программу rdesktop и доступ к гостевой системе через протокол RDP-v5. Для этого нужно включить в Windows XP опцию доступа через RDP и пробросить порт RDP (3389) из гостевой системы в хост. При этом можно запускать гостевую систему KVM даже в headless режиме, т.е. без основного окна.

У програмы rdesktop кроме кучи задокументированных ключей есть отсутствующий в man-руководстве ключик -r "clipboard:PRIMARYCLIPBOARD" который дает возможность интегрировать буферы обмена между хостом и гостевой системой.

Рекламируемый seamless-rdp режим у меня так нормально и не заработал - впрочем, не очень-то и нужно

Гостевая система может получить доступ к файлам хоста с помощью опции -r disk:{name}={path} программы rdesktop. При этом гостевая система видит диск как шару \\tsclient\name

Если опция -r disk:{name}={path} включена, гостевая система Windows XP при создании файлов устанавливает у них аттрибут "+x" что не очень приемлимо. Чтобы атрибуты у создаваемых и модифицируемых файлов были нормальными нужно установить umask для процесса rdesktop в значение 0133.

Размер экрана rdesktop настраивается под конкретный монитор опцией -g, причем кроме фиксированного размера в пикселах можно задать размер окна в процентах от размера экрана.

Неочевидный момент, который поначалу вводил в сильное замешательство - после запуска гостевой системы подключение через RDP возможно лишь по истечении 40-50 секунд. Причина такого поведения не совсем ясна: возможно это происходит из-за того, что необходимые сервисы Windows подгружаются не сразу; а возможно такое поведение обуславливается политиками безопасности Windows XP.

После окончательной настройки Windows XP можно установить у виртуальной системы опцию -snapshot которая будет предохранять файловый контейнер гостевой системы от новых изменений. Таким образом при каждом повторном запуске система будет в одном и том же состоянии, независимо от производимых в ней операций.

Для Windows XP существует паравиртуализированный драйвер для сетевой карты virtio. Без этого сетевого драйвера перерисовка окон в rdesktop происходит очень медленно, также без этого драйвера в rdesktop не работает шаринг папки. Также существует драйвер и для жесткого диска virtio.

Windows XP (в отличие от Linux) предполагает что часы на материнской плате идут по локальному времени - поэтому необходима опция KVM -rtc "base=localtime"

Опция -usbdevice "tablet" позволит избежать захвата мыши окном QEMU

В режиме удаленного RDP-подключения в главном меню Windows XP отстутствует пункт Shutdown. Однако, если нажать Ctrl+Alt+Del, то в меню появившегося приложения "Windows Task Manager" операция отключения компьютера будет доступна. Кроме того, если у виртуальной машины включена опция -snapshot ее можно отключать простым закрытием окна QEMU без риска повредить файловую систему.

Финальный скрипт запуска виртуальной машины с гостевой системой Windows XP

#!/bin/bash

# user: winxp/winxp

CURRENT_DIR=`readlink -f $0`
CURRENT_DIR=`dirname ${CURRENT_DIR}`

unset NET_FWD
NET_FWD="hostfwd=tcp:127.0.0.1:13389-:3389" # RDP

XP_DISTRO="/home/archive/distro/xp/winxppro-sp3-x86-vl-en.iso"
XP_ADDONS="/home/archive/distro/xp/NETKVM-20081229.iso"

unset OPTS
OPTS=("${OPTS[@]}" -snapshot)
OPTS=("${OPTS[@]}" -daemonize)
OPTS=("${OPTS[@]}" -pidfile "${CURRENT_DIR}/vm-winxp.pid")
#OPTS=("${OPTS[@]}" -vnc "127.0.0.1:1")
#OPTS=("${OPTS[@]}" -monitor "tcp:127.0.0.1:34526,server,nowait")
OPTS=("${OPTS[@]}" -name "WinXP Workstation")
OPTS=("${OPTS[@]}" -uuid "46036849-8658-4998-a918-166d900cffc7")
OPTS=("${OPTS[@]}" -enable-kvm)
OPTS=("${OPTS[@]}" -smp 1)
OPTS=("${OPTS[@]}" -m "512M")
OPTS=("${OPTS[@]}" -drive "file=${CURRENT_DIR}/vm-winxp.qcow2,if=ide,media=disk,index=0,cache=writeback")
#OPTS=("${OPTS[@]}" -drive "file=${XP_DISTRO},if=ide,media=cdrom,index=1,cache=writeback")
#OPTS=("${OPTS[@]}" -drive "file=${XP_ADDONS},if=ide,media=cdrom,index=1,cache=writeback")
OPTS=("${OPTS[@]}" -boot "order=c")
OPTS=("${OPTS[@]}" -rtc "base=localtime")
OPTS=("${OPTS[@]}" -soundhw "es1370")
OPTS=("${OPTS[@]}" -vga "cirrus")
OPTS=("${OPTS[@]}" -net "nic,vlan=0,macaddr=52:54:00:12:34:56,model=virtio")
OPTS=("${OPTS[@]}" -net "user,vlan=0,hostname=vm-winxp,${NET_FWD}")
OPTS=("${OPTS[@]}" -usb)
OPTS=("${OPTS[@]}" -usbdevice "tablet")

kvm "${OPTS[@]}" "$@"

Финальный скрипт запуска rdesktop

#!/bin/bash

WORKAREA=$(xprop -root "_NET_WORKAREA")
WORKAREA_X1=$(echo ${WORKAREA} | awk -F'[, ]+' '{print $3}')
WORKAREA_Y1=$(echo ${WORKAREA} | awk -F'[, ]+' '{print $4}')
WORKAREA_X2=$(echo ${WORKAREA} | awk -F'[, ]+' '{print $5}')
WORKAREA_Y2=$(echo ${WORKAREA} | awk -F'[, ]+' '{print $6}')
WORKAREA_W=$(( ${WORKAREA_X2} - ${WORKAREA_X1} - 2 ))
WORKAREA_H=$(( ${WORKAREA_Y2} - ${WORKAREA_Y1} - 2 ))

unset OPTS
OPTS=("${OPTS[@]}" -u "winxp")
OPTS=("${OPTS[@]}" -p "winxp")
OPTS=("${OPTS[@]}" -T "WindowsXP Workstation")
OPTS=("${OPTS[@]}" -a 24)
OPTS=("${OPTS[@]}" -P)
OPTS=("${OPTS[@]}" -5)
OPTS=("${OPTS[@]}" -g "${WORKAREA_W}x${WORKAREA_H}")
OPTS=("${OPTS[@]}" -r "clipboard:PRIMARYCLIPBOARD")
OPTS=("${OPTS[@]}" -r "sound:local")
OPTS=("${OPTS[@]}" -r "disk:home=${HOME}")
OPTS=("${OPTS[@]}" "127.0.0.1:13389")

daemon \
    --noconfig \
    --umask=0133 \
    -- \
    rdesktop "${OPTS[@]}" "$@"