вторник, 27 ноября 2012 г.

Пересборка deluge



После обновления до Ubuntu 12.10 стал жутко тормозить Deluge. При том тормоза начинались через минут 10 после старта deluge-gtk и превращали систему в слайдшоу. Разделение на клиент-сервер не помогло - gui начинало тормозить всё равно, а после его рестарта - не могло соединиться с сервером.
Гуглил-гулил и не нашёл, что бы у кого-нибудь был такая проблема.
Компиляция новых версий libtorrent-rasterbar и deluge из репозиториев не помогла.
Раньше у меня стоял deluge из https://launchpad.net/~deluge-team/+archive/ppa?field.series_filter=oneiric, но в quantal он не ставится из-за зависимости от старой версии libtorrent-rasterbar.
Пришлось перекомпилить.

sudo apt-get build-dep libtorrent-rasterbar
sudo apt-get build-dep deluge
apt-get source libtorrent-rasterbar6=0.15.9-2~oneiric~ppa1
cd libtorrent-rasterbar-0.15.9/
debuild -us -uc -i -I
cd ..
sudo dpkg -i libtorrent-rasterbar6_0.15.9-2~oneiric~ppa1_amd64.deb python-libtorrent_0.15.9-2~oneiric~ppa1_amd64.deb
apt-get source deluge=1.3.5-0~oneiric~ppa2
cd deluge-1.3.5/
debuild -us -uc -i -I
cd ..
sudo dpkg -i deluged_1.3.5-0~oneiric~ppa2_all.deb deluge-web_1.3.5-0~oneiric~ppa2_all.deb deluge-torrent_1.3.5-0~oneiric~ppa2_all.deb  deluge-gtk_1.3.5-0~oneiric~ppa2_all.deb deluge-console_1.3.5-0~oneiric~ppa2_all.deb deluge-common_1.3.5-0~oneiric~ppa2_all.deb

И что бы вы думали? Всё стало отлично. В общем, не нравится мне этот quantal.

Заставляем работать Network UPS Tools (NUT) после выхода из спящего режима


После обновления до Ubuntu 12.10, заметил, что NUT стал сыпать ошибки в консоль после выхода из спящего режима.

Не уверен как было раньше, но теперь после выхода из спящего режима (да и просто при переподключении кабеля) "usb кабелю" упса стал выдаваться новый файл в /dev.

/dev/bus/usb/008:
crw-rw-r--  1 root root 189, 896 нояб. 25 21:53 001
crw-rw-r--  1 root nut  189, 897 нояб. 27 01:48 002
выдёргиваем и вставляем кабель заново

/dev/bus/usb/008:
crw-rw-r--  1 root root 189, 896 нояб. 25 21:53 001
crw-rw-r--  1 root nut  189, 898 нояб. 27 01:48 003

А в конфиге у меня был прописан абсолютный путь. Пичаль.

/etc/nut/ups.conf
[ippon]
driver = blazer_usb
port = /dev/bus/usb/008/002
desc = "Ippon Black Power Pro 400"

Вообще, можно ставить port = auto, но и это мне не помогло - nut детектил и открывал девайс только при старте демона.

Сперва я подумал сделать правило в udev (есть отличная статья - http://hackaday.com/2009/09/18/how-to-write-udev-rules/), которое бы давало бы упсу одно и тоже имя всегда
~# udevadm info -a -p $(udevadm info -q path -n /dev/bus/usb/008/003)
~# cat /etc/udev/rules.d/50-ups.rules 
# This file maintains persistent name for UPS.
# See udev(7) for syntax.

SUBSYSTEM=="usb", ATTR{idVendor}=="0665", ATTR{idProduct}=="5161", SYMLINK+="ups2", NAME="ups"

Однако, если если задать в правиле имя устройства, то в syslog можно прочитать пару ругательств в свой адрес о созданном конфликте наименования девайса:

udevd[27845]: kernel-provided name 'bus/usb/008/010' and NAME= 'ups' disagree, please use SYMLINK+= or change the kernel to provide the proper name

Если попробовать
SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="0665", ATTR{idProduct}=="5161", KERNEL=="bus/usb/008/0*", SYMLINK+="ups2", NAME="ups"

то... ничего интересного не происходит и в логах нет ошибок.
(Кстати, вместо
sudo /etc/init.d/udev restart
можно использовать
sudo udevadm control --reload-rules)

В общем, после различных экспериментов я остановился на такой строчке
SUBSYSTEM=="usb", ATTR{idVendor}=="0665", ATTR{idProduct}=="5161", SYMLINK+="ups"

по факту, кроме красоты (симлинки), ничего не даёт.
Но зато в /etc/nut/ups.conf пишем вместо auto
port = /dev/ups

Так что пришлось решать проблему по другому:

~# cat /etc/pm/sleep.d/20_ups 
#!/bin/sh

PATH=/sbin:/usr/sbin:/bin:/usr/bin

case "${1}" in
        hibernate)
:
                ;;
        resume|thaw)
service nut restart&
                ;;
esac

При выходе из сна сервис будет перезапускаться и открывать вновь нами созданную симлинку уже на новый девайс. Хотя опять же можно было не заморачиваться и сделать просто port=auto. Но раз уже сделал правило, чего добру пропадать :-)

Хотя в принципе можно в тех же udev rules через RUN+="service nut restart" обновлять подключение к девайсу, заодно и для переподключения кабеля работать будет.

P.S. вероятно лучше юзать не restart, а reload. Не проверял обновить ли он коннект, но если да, то процесс не будет перезапускаться, что должно быть быстрее.

Репозиторий ночных сборок для Double Commander

Собственно один хороший человек сделал репозиторий ночных сборок для Double Commander:

http://doublecmd.sourceforge.net/forum/viewtopic.php?f=8&t=1638

~$ cd work
~/work/$ git clone https://github.com/takiz/Doublecmd-nightly.git
~/work/$ cd Doublecmd-nightly
~/work/Doublecmd-nightly$ git pull
Already up-to-date.
~/work/Doublecmd-nightly$ sudo ./install-dc-x86_64-gtk.sh
DC installed Ok
И на выходе получаем Double Commander с поддержкой очереди (имхо, самая недостающая фича в версии 0.5.4).


Не форматированный код xml/html в blogger

Не форматированный код xml/html в blogger:

$ cat <<EOF | xmlstarlet esc
>    <left>Left</left>
>    <right>Right</right>
>    <up>Up</up>
> EOF
это даст экранированный код.

XBMC Remote Config


~/.xbmc/userdata$ cat keymaps/remote.xml | head -100
<keymap>
  <global>
    <remote>
      <play>Play</play>
      <pause>Pause</pause>
      <stop>Stop</stop>
      <forward>FastForward</forward>
      <reverse>Rewind</reverse>
      <left>Left</left>
      <right>Right</right>
      <up>Up</up>
      <down>Down</down>
      <select>Select</select>
      <enter>FullScreen</enter> 
      <!--<pageplus>PageUp</pageplus>
      <pageminus>PageDown</pageminus>-->
      <skipminus>PageUp</skipminus>
      <skipplus>PageDown</skipplus>
      <back>ParentDir</back>
      <menu>PreviousMenu</menu>
      <title>ContextMenu</title>
      <info>Info</info>
      <!--skipplus>SkipNext</skipplus>
      <skipminus>SkipPrevious</skipminus-->
      <display>FullScreen</display>
      <start>PreviousMenu</start>
      <record>Screenshot</record>
      <volumeplus>VolumeUp</volumeplus>
      <volumeminus>VolumeDown</volumeminus>
      <mute>Mute</mute>
      <close>Close</close>
      <power>XBMC.Powerdown()</power>
      <myvideo>XBMC.ActivateWindow(videofiles)</myvideo>
      <mymusic>ActivateWindow(VideoLibrary,Files,return)</mymusic>
      <mypictures>XBMC.ActivateWindow(MyPictures)</mypictures>
      <mytv>ActivateWindow(VideoLibrary,TvShowTitles,return)</mytv>
      <!--mytv>XBMC.ActivateWindow(VideoLibrary,TvShows)</mytv-->
      <red>XBMC.ActivateWindow(Home)</red>
      <green>ActivateWindow(VideoLibrary,Files,return)</green>
      <yellow>ActivateWindow(VideoLibrary,TvShowTitles,return)</yellow>
      <!--yellow>XBMC.ActivateWindow(VideoLibrary,TvShows)</yellow-->
      <blue>UpdateLibrary(video)</blue>
      <zero>Number0</zero>
      <one>Number1</one>
      <two>JumpSMS2</two>
      <three>JumpSMS3</three>
      <four>JumpSMS4</four>
      <five>JumpSMS5</five>
      <six>JumpSMS6</six>
      <seven>JumpSMS7</seven>
      <eight>JumpSMS8</eight>
      <nine>JumpSMS9</nine>
    </remote>
  </global>
  <Home>
    <remote>
      <info>XBMC.ActivateWindow(SystemInfo)</info>
      <clear>XBMC.ActivateWindow(Weather)</clear>
      <hash>XBMC.ActivateWindow(Settings)</hash>
    </remote>
  </Home>

XBMC Lircmap for Xbox360 Remote


~/.xbmc/userdata$ cat Lircmap.xml
<lircmap>
  <remote device="Microsoft_Xbox360">
    <select>OK</select>
    <left>Left</left>
    <right>Right</right>
    <up>Up</up>
    <down>Down</down>
    <play>Play</play>
    <pause>Pause</pause>
    <stop>Stop</stop>
    <forward>FastForward</forward>
    <reverse>Rewind</reverse>
    <enter>Enter</enter> 
    <pageplus>ChUp</pageplus>
    <pageminus>ChDown</pageminus>
    <back>Back</back>
    <menu>DVD_Menu</menu>
    <title>Title</title>
    <info>Info</info>
    <display>Display</display>
    <record>Record</record>
    <volumeplus>VolUp</volumeplus>
    <volumeminus>VolDown</volumeminus>
    <mute>Mute</mute>
    <power>OnOff</power>
    <close>OpenClose</close>
    <red>B</red>
    <green>A</green>
    <yellow>Y</yellow>
    <blue>X</blue>
    <zero>0</zero>
    <one>1</one>
    <two>2</two>
    <three>3</three>
    <four>4</four>
    <five>5</five>
    <six>6</six>
    <seven>7</seven>
    <eight>8</eight>
    <nine>9</nine>
    <skipplus>Next</skipplus>
    <skipminus>Prev</skipminus>
  </remote>
</lircmap>

понедельник, 26 ноября 2012 г.

Mate и magnet ссылки


К сожалению в Mate не работало открытие magnet ссылок в браузере (chromium).
Поправим это.

Chromium использует xdg-open. Вот его и надо пинать.

Надо открыть
$ vim ~/.local/share/applications/mimeapps.list
и добавить в [Added Associations] и [Default Applications]
application/x-bittorrent=deluge.desktop
x-scheme-handler/magnet=deluge.desktop
потом открыть
$ sudo vim /usr/bin/xdg-open
и добавить
в case "$DE" in
mate)
    open_mate "$url"
в detectDE()
    elif [ x"$DESKTOP_SESSION" = x"mate" ]; then DE=mate;
и просто новую функцию по аналогии с open_gnome()
open_mate()
{
    if gvfs-open --help 2>/dev/null 1>&2; then
        gvfs-open "$1"
    else
        mate-open "$1"
    fi
    if [ $? -eq 0 ]; then
        exit_success
    else
        exit_failure_operation_failed
    fi
}

и можно проверять
xdg-open 'magnet:?xt=urn:..........'
Должен открыться deluge c окном добавления торрента.

Избранное сообщение

Запуск "Петька и Василий Иванович спасают галактику" в Linux через wine

Совсем недавно, почему-то вспомнил про серию "Петька и Василий Иванович". К своему удивлению, обнаружил, что первую и вторую част...