Openkinect+linux: поддержка звука

Есть такая демка во openkinect — micview. Для её использования нужна прошивка из состава kinect sdk или та, которая идет с Xbox360.

Подробнее можно глянуть официальный мануал.

А тут немного о том, где же эту прошивку взять (вики шлет в разные списки рассылки или гугл).

Если мы в linux, то нам нужен audios.bin из состава обновления xbox360. В windows нам нужен тот, который идет в составе kinect sdk (из-за ограничения стека usb в винде прошивка от xbox360 нормально работает только в linux).

  • скачиваем обновление
  • скачиваем скрипт extract360.py для распаковки ресурсов xbox
  • вытаскиваем из скачанного архива файл FFFE07DF00000001
  • натравливаем
    $ extract360.py FFFE07DF00000001
  • кладем audios.bin в ~/.libfreenect

Openkinect demo: micview

Fedora+Nvidia=CUDA

Итак. Мы хотим получить рабочую инсталляцию на Fedora (в моем случае — RFRemix и с этим связано несколько багов).

Для этого нам надо:

  1. видеокарту nvidia :)
  2. установленный репозитарий cuda (отсюда)
  3. заметку о том, как восстановить plymouth после установки драйвером nvidia

1 — Ставим

# yum install cuda

Этот метапакет поставит все, что должно идти в комплекте (включая свежие дрова)

2 — Удаляем kmod-nvidia

Если у вас уже были проинсталены дрова невидии, то нужно удалить имеющийся kmod. Так как он может содержать несовместимую с текущими библиотеками версию модуля

# yum remove kmod-nvidia

3 — Пересобираем akmod

# akmod -kernel $(uname -r)

Тут может потребоваться доставить kernel-headers

4 — Пересобираем initrd

Для этого воспользуемся dracut

# dracut --force

5 — Ребут :)

6 — Можно собрать семплы

Замечу, что делать это надо под рутом или проставив соотвествующие права на папки. Так как мейкфайлы сильно завязаны на относительные пути.

# cd /usr/local/cuda-6.5/samples/5_Simulations/fluidsGL
# make

7 — А вот тут нас поджидает облом (RFRemix)

>>> WARNING - libGL.so not found, refer to CUDA Samples release notes for how to find and install them. <<<
>>> WARNING - libGLU.so not found, refer to CUDA Samples release notes for how to find and install them. <<<
>>> WARNING - libX11.so not found, refer to CUDA Samples release notes for how to find and install them. <<<
>>> WARNING - libXi.so not found, refer to CUDA Samples release notes for how to find and install them. <<<
>>> WARNING - libXmu.so not found, refer to CUDA Samples release notes for how to find and install them. <<<

Ага!

Смотрим в findgllib.mk

ifeq ("$(OSLOWER)","linux")
   # first search lsb_release
   DISTRO  = $(shell lsb_release -i -s 2>/dev/null | tr "[:upper:]" "[:lower:]")
   DISTVER = $(shell lsb_release -r -s 2>/dev/null)
   ifeq ("$(DISTRO)","")
     # second search and parse /etc/issue
     DISTRO = $(shell more /etc/issue | awk '{print $$1}' | sed '1!d' | sed -e "/^$$/d" 2>/dev/null | tr "[:upper:]" "[:lower:]")
     DISTVER= $(shell more /etc/issue | awk '{print $$2}' | sed '1!d' 2>/dev/null
   endif
   ifeq ("$(DISTRO)","")
     # third, we can search in /etc/os-release or /etc/{distro}-release
     DISTRO = $(shell awk '/ID/' /etc/*-release | sed 's/ID=//' | grep -v "VERSION" | grep -v "ID" | grep -v "DISTRIB")
     DISTVER= $(shell awk '/DISTRIB_RELEASE/' /etc/*-release | sed 's/DISTRIB_RELEASE=//' | grep -v "DISTRIB_RELEASE")
   endif
endif

ifeq ("$(OSUPPER)","LINUX")
    # $(info) >> findgllib.mk -> LINUX path <<<)
    # Each set of Linux Distros have different paths for where to find their OpenGL libraries reside
    UBUNTU_PKG_NAME = "nvidia-340"
        UBUNTU = $(shell echo $(DISTRO) | grep -i ubuntu >/dev/null 2>&1; echo $$?)
        FEDORA = $(shell echo $(DISTRO) | grep -i rfremix >/dev/null 2>&1; echo $$?)
        RHEL   = $(shell echo $(DISTRO) | grep -i red    >/dev/null 2>&1; echo $$?)
        CENTOS = $(shell echo $(DISTRO) | grep -i centos >/dev/null 2>&1; echo $$?)
        SUSE   = $(shell echo $(DISTRO) | grep -i suse   >/dev/null 2>&1; echo $$?)

Еще раз ага!

Смотрим как определяется тип дистрибутива.

Это команда

awk '/ID/' /etc/*-release | sed 's/ID=//' | grep -v "VERSION" | grep -v "ID" | grep -v "DISTRIB"

А у меня она выдает rfremix. А значит такого таргета ни разу нет в списке. :)
Ну что делать-то? меняем fedora на rfremix в findgllib.mk и радуемся.
Собралось! Но…

8 — А что у нас с библиотеками?

$ ./fluidsGL 
./fluidsGL: error while loading shared libraries: libcufft.so.6.5: cannot open shared object file: No such file or directory

Еще раз. У нас для ldconfig не заданы пути, где лежит libcufft.so.6.5

$ find /usr/ -name libcufft.so.6.5
/usr/local/cuda-6.5/targets/x86_64-linux/lib/libcufft.so.6.5
$ grep -R /usr/local/cuda-6.5/targets/x86_64-linux/lib /etc/ld.so.conf.d/

Пусто.

# echo "/usr/local/cuda-6.5/targets/x86_64-linux/lib" > /etc/ld.so.conf.d/cuda-lib64.conf
# ldconfig

9 — Наслаждаемся

fluidsGL

Firefox+Linux+MiddleButton

Есть такая особенность у сборки Firefox в Linux (как под виндой — не знаю) — если нажать среднюю кнопку (не на ссылке, а просто в пределах страницы), то в адресную строку будет вставлено содержимое буфера обмена.

Очень и очень раздражающая фича.

Но отключается она очень просто.

  1. Идем в about:config.
  2. Находим настройку middlemouse.contentLoadURL и выставляем ее в false (или создаем — это параметр «логическое»)

Вопреки советам в сети за подобное поведение параметр middlemouse.paste не отвечает.

Интересное в сети

Алгоритмы

JavaScript

Ruby

Python

Инструменты

Linux

Всякое

Ростелеком: постоянные обрывы соединения

Все было бы нормально если бы не одно но.

Адсл-модем уверенно устанавливал соединение и. И что самое интересное просто так обрывал pppoe-коннект с фразой «pppoe connection terminated unexpectedly».

Расследование показало, что перед тем, как соединение будет сброшено в лог (что немаловажно в отладочный дл которого надо повысить уровень отладочных сообщений до dbg) падало сообщение о том, что «no response on 3 echo requests».

Выяснилось следующее:

  • падение происходило каждые полторы минуты
  • в конфиге для текущего соединения найдена строка lcp echo 30 3

О как! Оказывается, что модем проверяет жизнеспособность соединения при помощи lcp-запросов, а выяснилось, что ростелекомовский adsl их рубит сразу.

Вывод: отключить lcp echo и проверять наличие соединения пингами.

Для zyxel keenetic нужно будет зайти по telnet и выполнить набор команд

(config)> interface PPPoE0
(config-if)> no lcp echo
(config-if)> exit
(config)> system config-save
(config)> exit

Тем самым мы отключим проверку, которая обрушивает соединение.