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

Добавляем поддержку iconv в rsync на Mac OS X

После приобретения MacBook Air с установленной на нем Mac OS X Lion у меня появилось несколько проблем. И главной была проблема с кодировками. Дело в том, что в макос используется не стандартный UTF-8, а так называемый UTF-8-MAC (подробное описание проблемы на странице rsync) и это порождает сложности в простом использовании sshfs или rsync (а сервер то с openSUSE у меня никуда не делся :)), ведь без iconv их использование будет не полноценным.

Да вот беда, в стандартной версии rsync поставляемой со львом нет поддержки iconv:

rsync: --iconv=UTF-8,UTF-8-MAC: unknown option
rsync error: syntax or usage error (code 1) at /SourceCache/rsync/rsync-42/rsync/main.c(1333) [client=2.6.9]

Так что прийдется варить его :) И хоть оффициальной формулы для rsync не видать, расстраиваться не стоит, потому что на помощь приходит homebrew-alt репозиторий и формула оттуда:

$ brew install https://github.com/adamv/homebrew-alt/raw/master/duplicates/rsync.rb

После установки у нас появится rsync версии 3.0.9 с поддержкой опции iconv и все станет хорошо. Теперь при копировании на макос с линукса я просто добавляю --iconv=UTF-8-MAC,UTF-8 к опциям rsync'a.

зы. И чтоб два раза не вставть, для того чтобы использовать iconv в sshfs убедитесь что он установлен при помощи brew и просто добавьте --omodules=iconv,from_code=UTF-8,to_code=UTF-8-MAC в строку маунта или запуска sshfs.

зыы. Не знаю, что там предлогают MacPorts или Fink, но мой выбор сразу пал на homebrew.

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

Стартуем PostgreSQL 9.1

Если при старте PostgreSQL 9.1 (или любого другого) вы ловите что-то похожее:

# service postgresql start
Starting PostgreSQL2011-10-11 14:12:19 EEST   LOG:  could not bind IPv6 socket: Cannot assign requested address
2011-10-11 14:12:19 EEST   HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2011-10-11 14:12:19 EEST   WARNING:  could not create listen socket for "localhost"
2011-10-11 14:12:19 EEST   FATAL:  could not create any TCP/IP sockets
pg_ctl: could not start server
Examine the log output.

то решение проблемы - очень тривиально: просто поправить listen_addresses директиву в конфигурационном файле postgresql.conf (он может распологаться в /var/lib/pgsql/data или /Library/PostgreSQL/9.1/data) c:

# - Connection Settings -

#listen_addresses = 'localhost'  # what IP address(es) to listen on;
     # comma-separated list of addresses;
     # defaults to 'localhost', '*' = all
     # (change requires restart)

на:

# - Connection Settings -

listen_addresses = '*'   # what IP address(es) to listen on;
     # comma-separated list of addresses;
     # defaults to 'localhost', '*' = all
     # (change requires restart)

и перезапустить PostgreSQL.

вторник, 13 сентября 2011 г.

Заставляем guake работать в openSUSE 11.4

Если после установки guake c Packman'а вы ловите:

playpauseandstop@octave:~> DISPLAY=:0 guake
Traceback (most recent call last):
  File "/usr/lib64/guake/guake.py", line 27, in 
    import vte
ImportError: could not import gobject (could not find _PyGObject_API object)
playpauseandstop@octave:/srv/files/RPMs> DISPLAY=:0 guake
Traceback (most recent call last):
  File "/usr/lib64/guake/guake.py", line 29, in 
    import pynotify
  File "/usr/lib64/python2.7/site-packages/gtk-2.0/pynotify/__init__.py", line 21, in 
    from _pynotify import *
ImportError: could not import gobject (could not find _PyGObject_API object)
playpauseandstop@octave:~> DISPLAY=:0 guake-prefs
Traceback (most recent call last):
  File "/usr/lib64/guake/prefs.py", line 25, in 
    import gconf
ImportError: could not import gobject (could not find _PyGObject_API object)

Не спешите расстраиваться, решение есть, для начала подключаем репозитарий с Python-библиотеками и устанавливаем оттуда python-gobject2:

$ sudo -s
# zypper ar -f http://download.opensuse.org/repositories/devel:/languages:/python/openSUSE_11.4 Python
# zypper ref Python
# zypper in python-gobject2

А потом скачиваем с Factory обновленные пакеты python-gconf, python-notify и python-zte и обновляем их (для python-notify понадобятся более свежие версии libnotify-tools и libnotify4, а для python-vte - более свежие версии libvte9 и gnome-pty-helper):

$ cd /path/to/RPMs
$ wget http://download.opensuse.org/factory/repo/oss/suse/x86_64/python-gconf-2.28.1-11.5.x86_64.rpm
$ wget http://download.opensuse.org/factory/repo/oss/suse/x86_64/python-notify-0.1.1-19.5.x86_64.rpm
$ wget http://download.opensuse.org/factory/repo/oss/suse/x86_64/libnotify4-0.7.4-1.1.x86_64.rpm
$ wget http://download.opensuse.org/factory/repo/oss/suse/x86_64/libnotify-tools-0.7.4-1.1.x86_64.rpm
$ wget http://download.opensuse.org/factory/repo/oss/suse/x86_64/python-vte-0.28.1-2.3.x86_64.rpm
$ wget http://download.opensuse.org/factory/repo/oss/suse/x86_64/libvte9-0.28.1-2.3.x86_64.rpm
$ wget http://download.opensuse.org/factory/repo/oss/suse/x86_64/gnome-pty-helper-0.28.1-2.3.x86_64.rpm
$ sudo -s
# rpm -Uvh python-gconf-2.28.1-11.5.x86_64.rpm
# rpm -Uvh libnotify4-0.7.4-1.1.x86_64.rpm libnotify-tools-0.7.4-1.1.x86_64.rpm python-notify-0.1.1-19.5.x86_64.rpm
# rpm -Uvh gnome-pty-helper-0.28.1-2.3.x86_64.rpm libvte9-0.28.1-2.3.x86_64.rpm python-vte-0.28.1-2.3.x86_64.rpm

Все, готово, теперь и gconf, и pynotify, и vte библиотеки успешно импортируются питоном, а guake спокойно открывается и работает!

зы. Если честно, в итоге решение не особо красивым получилось, но удалось заставить guake (а также другие Python-приложения, использующие обозначенные библиотеки, работать).

пятница, 15 апреля 2011 г.

Joli OS 1.2 и HP LaserJet M1005MFP

На самом деле, рассказ не стоит и выеденного яйца ибо все известно и так, что для работы HP LaserJet M1005MFP в Linux надо установить foo2xqx, входящий в пакет foo2zjs. Но помня, что во времена Jolicloud 1.1 я так и не подружил систему с сетевым принтером, решил добавить эту заметку.

Итак, первым делом:

$ sudo aptitude update
$ sudo aptitude install foo2zjs

Затем, для облегчения управления принтерами было бы неплохо установить в Joli App Center Printing Add-on, или:

$ sudo aptitude install jolicloud-addons-printing

Дальше, все элементарно, заходим в Printing Add-on, нажимаем Add -> Printer, выбираем тип принтера локальный или сетевой (для сетевых принтеров не забудьте расрешить доступ к нему на сервере), находим принтер, верифицируем, нажимаем Forward, наименовуем принтер, как нравится и нажимая еще раз Forward получаем предложение о печати тестовой страницы, игнорируем это предложение.

Теперь мы видим добавленный принтер в главной области Printing Add-on, вызываем контекстное меню и нажимаем Properties, находим Make and Model и нажимаем Change, ждем пока оно еще раз "найдет" доступные драйвера, и в появившемся окне выбираем производитель HP, кнопка Forward, драйвер LaserJet M1005 MFP (HP LaserJet M1005 MFP Foomatic/foo2xqx), нажимаем последний раз Forward и получаем рабочий сетевой принтер, о чем убеждаемся напечатав тестовую страницу или что-либо еще.

Если же после, описанных мною манипуляций вы все еще получаете:

**** Unable to open the initial device, quitting.

убедитесь еще раз, что вы выбрали драйверы для принтера из пакета foo2zjs, а не из стандартного hpjs.

вторник, 12 апреля 2011 г.

Пишем в Skype используя не Latin-1 символы на 64-битной системе

Сегодня столкнулся с довольно таки забавной проблемой. Установил последнюю бету Skype для Linux под свой openSUSE 11.4 x86_64 и он мне кодировал все символы русской и украинской раскладки в крякозабры во всех полях ввода. Странно, подумал я и решил явно указать локаль в которой следует работать Skype, однако это ничего не дало. И после:

$ LOCALE=ru_RU.utf8 skype &

все не ASCII символы преобразовались во что-то человеко не читаемое. Окей, сказал я и полез в гугл. Оказалось все легко. После предыдущего запуска в консоле остались следующие диагностические сообщения от Skype:

QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv failed for BOM: Bad file descriptor
QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv_open failed
QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed
QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv failed for BOM: Bad file descriptor

и именно по ним я вышел на решение моей проблемы. Оказалось, что надо всего-то доустановить glibc-locale-32bit из стандартного репозитория, перезапустить Skype и настанет счастье.

Остается только загадкой почему эту зависимость разработчики скайпа не добавили в RPM-пакет и почему упоминание про нее отсутствует на официальной странице по установке Skype в openSUSE.

Итак, не возможно напечатать не Latin-1 символы в полях ввода в Skype? В консоли выполняем:

$ sudo zypper in glibc-locale-32bit

И проблема решена!

вторник, 1 февраля 2011 г.

Убираем строку "wine core exe" из меню "Открыть с помощью" в Dolphin, Konqueror, Nautilus, etc

Какое-то время назад, во время пользования Jolicloud установил себе Wine для пощупывания Spotify и чего-то еще. Spotify и это что-то еще совершенно не впечатлил, Wine снес, а через какое-то время вернулся и на openSUSE 11.3 в этот раз с KDE 4. Посидел, более менее привык и тут заметил раздражающую проблему, вызывая контекстное меню в Dolphin или Konqueror для любого рисунка (*.jpg, *.png, etc) вижу "wine core exe" в пункте "Открыть с помощью" (Open with...).

В системе Wine не установлен, более того ~/.wine тоже давно отправлен утиль, а "wine core exe" все так же гордо распологаются в контекстном меню. Оказывается, проблема в том, что при установке какой-то программы Wine понасоздавал кучу расширений в ~/.local/share/applications и ясное дело после удаления Wine эти расширения все так же остались в системе и как следствие в контекстном меню.

Что ж, удаляем все расширения:

$ rm ~/.local/share/applications/wine-extension-*

И даже без перезапуска Dolphin или Konqueror видим, что наше меню "Открыть с помощью" приобрело цивилизованный вид и избавилось от ненужных строк "wine core exe".

ps. Как говорит интернет этот способ помагает и для Nautilus'а.

четверг, 13 января 2011 г.

Отмечаем опцию "Enable Wireless" в NetworkManager апплете программно

В последнее время на разных дистрибутивах (openSUSE 11.3, Jolicloud 1.1) заметил интересную проблему. В апплете NetworkManager'а по дефолту не выбрана опция "Enable Wireless", хотя все необходимые драйвера и прошивки для работы устройства беспроводной связи были установлены. И если в openSUSE 11.3 я не особо размышлял о решении этой проблемы и вручную включал устройство, то пересев на Jolicloud мне захотелось понять почему так происходит и найти решение.

Не скажу, что я понял, почему NetworkManager 0.8 автоматически выключает эту опцию, но зато я нашел, как этому противостоять. Решение оказалось очень простым, просто нужно отправить сообщение по dbus, которое включит "Enable Wireless":

dbus-send --system --type=method_call --dest=org.freedesktop.NetworkManager \
/org/freedesktop/NetworkManager org.freedesktop.DBus.Properties.Set \
string:org.freedesktop.NetworkManager string:WirelessEnabled variant:boolean:true

Дальше я добавил эту команду в автозагрузку ДЕ (System -> Preferences -> Startup Applications в Jolicloud, например) и при входе в систему теперь получаю автоматически работающее беспроводное соединение. Мелочь, а приятно!

зы. Если вы наоборот хочете автоматически выключить устройство беспроводной связи, то посылайте это же сообщение, только с false вместо true в конце.

зыы. Решение подсмотрел здесь и здесь.

Добавляем сторонние PPA репозитории в Jolicloud 1.1 или Joli OS 1.2

Последнюю неделю играюсь на своем Lenovo S12 с Jolicloud 1.1. Впечатления практически сугубо положительные. Очень удобный дистрибутив для людей, проводящих очень много времени в интернете.

Единственное, что раздражало пару дней было отсутствие нового Gajim'а. Не секрет, что Jolicloud 1.1 построен на основе Ubuntu Lucid Lynx, а в нем версия Gajim'a уж очень стара на текущий момент - 0.13.2 (да и иконка не поддерживала полупрозначности и выбивалась из общего стиля системного лотка). В то же время, новая версия этого замечательного джаббер-клиента была доступна в репозитории ppa:gajim/gajim-ppa. Пойдя путем найменьшего сопротивления, я было попытался добавить этот репозиторий, стандартно для Убунту:

# add-apt-repository ppa:gajim/gajim-ppa

но меня ожидал облом:

Traceback (most recent call last):
  File "/usr/bin/add-apt-repository", line 40, in 
    sp = SoftwareProperties(options) 
  File "/usr/lib/python2.6/dist-packages/softwareproperties/SoftwareProperties.py", line 90, in __init__
    self.reload_sourceslist()
  File "/usr/lib/python2.6/dist-packages/softwareproperties/SoftwareProperties.py", line 538, in reload_sourceslist
    self.distro.get_sources(self.sourceslist)    
  File "/usr/lib/python2.6/dist-packages/aptsources/distro.py", line 90, in get_sources
    raise NoDistroTemplateException("Error: could not find a "
aptsources.distro.NoDistroTemplateException: Error: could not find a distribution template

Вручную задать версию Убунту add-apt-repository не позволяет. Потому пришлось идти долгим путем. Для начала добавляем репозиторий в файл /etc/apt/sources.list.d/ubuntu.list (удобно в конце файла создать условный блок для всех сторонних репозиториев):

deb http://ppa.launchpad.net/gajim/gajim-ppa/ubuntu lucid main 
deb-src http://ppa.launchpad.net/gajim/gajim-ppa/ubuntu lucid main

А затем вручную добавляем ключ (находится на странице репо, блок Signing key) при помощи:

# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 00EECF10

Дальше, все легко, на арену выходит aptitude и без проблем обновляет gajim, который после обновления получает иконку в системном лотке с прозрачностью, ну и возможность общаться голосом/видео посредством вашего Jabber-аккаунта.

Аналогично вы можете добавлять и любые другие репозитории, которые совместимы с Lucid Lynx. И это позволяет превратить Jolicloud в операционную систему общего предназначения, а не только для интернет-сёрферов :)


Добавлено 15 апреля 2011 г. Описанный в посте метод работает и для новой Joli OS 1.2, которая все также построена на пакетной базе Ubuntu 10.04 Lucid Lynx.