Принцип работы

Как уже упоминалось - скайп закрытое приложение, и его протокол достаточно неплохо защищен от сторонних разработчиков. Так что единственным доступным клиентом протокола в настоящий момент является сам skype. Но для интеграции своего ПО со сторонними разработчиками (как железа, так и ПО) skype клиент позволяет работать с ним используя документированное API. В linux версии для транспорта используется DBUS и X11. API достаточно обширно, но тем не менее о полноценном embed клиенте говорить не приходится, так что нам все равно потребуется X11 и запущенный клиент. Skypiax позволяет Asterisk общаться с запущенными skype клиентами и совершать или принимать skype звонки.

Установка ПО

Для начала установим ОС. Для нашей задачи будет вполне достаточно диска на 2Gb (думаю, что хватило бы и сильно меньшего но это потребовало бы пересборки пакетов без ненужных зависимостей). Ставить дистрибутив x86_64 лишено смысла, так как клиент все равно i386, да и памяти меньше израсходуем.

      qemu-img create ~/images/skype 2G
      kvm -hda ~/images/skype -cdrom ~/dists/debian-500-i386-CD-1.iso

Выбираем вариант установки без десктоп окружения и прочего непотребства, все что нужно мы позже установим из пакетов. После того как установка завершена - перезагружаем гостя и устанавливаем нужные пакеты:

Asterisk, заголовки и куча преимущественно ненужных нам зависимостей
     skype:~# apt-get install asterisk-dev
Skype client
      skype:~# wget http://skype.com/go/getskype-linux-deb
      skype:~# dpkg -i skype-debian_2.0.0.71-1_i386.deb
      skype:~# apt-get -f install
      skype:~# dpkg -i skype-debian_2.0.0.71-1_i386.deb

Subversion (потребуется для скачивания исходников skypiax)

      skype:~# apt-get install subversion

OpenSSH server (для управления в будущем и первоначальной настройки

Skype)
      skype:~# apt-get install openssh-server
Заголовки Xlib потребуются нам позже
      skype:~# apt-get install libx11-dev
Теперь загрузим и скомпилируем skypiax:
      skype:~# svn co http://www.celliax.org:8081/svn/celliax/trunk celliax
                      svn co http://svn.freeswitch.org:81/svn/freeswitch/branches/gmaruzz/mod_gsmopen/asterisk chan_celliax 
      skype:~# cd celliax/skypiax_stuff/build/
      skype:~/celliax/skypiax_stuff/build# vi Makefile
Заменяем путь
 AST_INCLUDE_DIR=/home/user/devel/asterisk-1.4.23.1/include          на
 AST_INCLUDE_DIR=/usr/include,   компилируем  и  копируем  результат  в
 нужную нам папку.
      skype:~/celliax/skypiax_stuff/build# make
      skype:~/celliax/skypiax_stuff/build# cp chan_skypiax.so /usr/lib/asterisk/modules/ && cp skypiax.conf /etc/asterisk/
 На  этом  установка завершена, можно переходить к более увлекательному
 этапу настройки.

Настраиваем skype клиента

 Для  запуска  skype  я  использован возможность X11 forwarding openssh
 сервера  и клиента, присоединившись с десктоп машины на skype сервер с
 параметром -X:
      ssh -X root@skypeserver.local
 Для  своей  работы  скайп захочет звуковую карту, для подобных целей в
 alsa предусмотрен драйвер snd-dummy, загрузим его:
      modprobe snd-dummy
 После этого запускаем в терминале скайп, и если все работает правильно
 -  он  должен  показать  лицензионное  соглашение  и свой интерфейс на
 рабочем столе. Скайп позволяет использовать одно и тоже подключение из
 нескольких  мест  (чем,  кстати, выгодно отличается от SIP), но тем не
 менее  я рекомендую завести отдельную запись, как минимум для удобства
 тестирования.  Запустив  скайп соглашаемся с лицензией и вводим данные
 учетной   записи.   Если   все  настроено  правильно  -  skype  должен
 зарегистрироваться  в  сети. Перейдя в настройки отключаем уведомления
 (Notifications  -> Enable Event). Теперь самое важное - в пункте Sound
 Devices указываем устройство Dummy (hw:Dummy,0). В меню Advanced стоит
 отключить  проверку  обновлений,  а  в  меню Video Devices - поддержку
 видео.  После  этого  skype  клиент  должен  без проблем совершать или
 принимать  звонки,  правда  слышно  ничего  не  будет,  так  как карта
 виртуальная.   Не  закрываем  клиент  (он  нам  скоро  потребуется)  и
 переходим к настройке Asterisk.

Настраиваем Asterisk

 1. Подключаемся к серверу с включенным X11 forwarding
      Desktop:~$ ssh -X root@skypeserver.local
 2. Для того, чтобы астериск смог взаимодействовать с запущенным skype
 клиентом нам потребуется значение переменной DISPLAY
      skype:~# echo $DISPLAY
 В моем случае это localhost:11.0
 3. Параметры    skype   транков   (их   может   много)   задаются   в
 /etc/asterisk/skypiax.conf.  По умолчанию там уже заданы 2 транка,
 закомментируем их. Параметры для моего транка выглядят так:
      [skypeclient]
      language=en ; default
      context=default ; incoming context
      extension=600 ; forward calls to default asterisk echo test
      skype=yes ; legacy setting
      X11_display=localhost:11.0 ; value from $DISPLAY
      tcp_cli_port=11234 ; 2 random pots
      tcp_srv_port=11235 ;
      skype_user=skypet123 ; skype nickname
      playback_boost=0 ; volume boost for playback
      capture_boost=0 ; ... and recording
 В  данной конфигурации я указал X11_display из пункта 2, для того,
 чтобы   asterisk   смог   соединиться   с   запущенным   клиентом.
 Extension=600    обозночает    что   входящие   звонки   в   будут
 перенаправлены   в   extension  600,  который  по  умолчанию  (см.
 extensions.conf)   перенаправляется  на  эхо  тест  задержки.  Это
 позволит  нам  убедиться  что  все  работает  правильно  и  заодно
 определить на слух задержу сигнала.
 4. Запускаем астериск в режиме консоли
      skype:~# /etc/init.d/asterisk stop; asterisk -c -vvv -ddd
 Если  все настроено верно - скайп должен показать уведомление о
 том,   что   другая   программа   пытается  к  нему  подключиться.
 Обязательно  отмечаем  галку "Remember this selection" и разрешаем
 подключение.
 После  этого пробуем позвонить на эту скайп запись. Если все настроено
 верно  -  вы  должны слышать эхо-тест астериска. Кстати, распознавание
 DTMF  прекрасно  работает, что позволяет создавать IVR на базе данного
 решения.

Запуск скайп в виртуальном X сервере

 Для  того,  чтобы  skype работал в виртуальном X11 окружении установим
 xvfb - Virtual Framebuffer 'fake' X server.
      skype:~# apt-get install xvfb
 Данный  сервер  позволяет работать X11 приложением локально, не требуя
 видео  карты  и  потребляя  сравнительно немного ресурсов. Для запуска
 скайпа создадим скрипт skypestart.sh:
      #!/bin/sh
      # loading sound driver
      /sbin/modprobe snd_dummy
      # setting DISPLAY
      export DISPLAY=:1
      # starting virtual framebuffer X-Server
      nohup /usr/bin/Xvfb ${DISPLAY} -screen scrn 300x600x8 >/dev/null &
      echo <skypenick> <password>|/usr/bin/skype --pipelogin &
      # restarting asterisk
      sleep 5
      /etc/init.d/asterisk restart
 заменив  <skypenick>  <password>  на  данные skype записи. Этот скрипт
 загружает   snd_dummy,   запускает   X-server   и   загружает   скайп.
 Перезагрузка  астериска требуется для того, чтобы он установил связь с
 клиентом.
 Скрипт можно добавить в крон, например так:
      @reboot /root/skypestart.sh
 Или  сделать на его основе полноценный init.d сценарий. Также возможна
 запуска  более  чем  одной  копии  Skype.  Для  этого надо скопировать
 $HOME/.Skype/  в соответствующие поддиректории, и переопределив HOME и
 DISPLAY  запустить  для  каждой  из  копий свой xvfb сервер и клиента,
 добавив соответствующие записи в конфигурацию asterisk.

Redirect звонков skype на SIP phone

 Для  тестирования  работы  skype  c  SIP  телефоном  я использовал ATA
 adapter  Linksys  (подойдет  и  любой  sofpthone,  например  - Ekiga),
 подключив   его   к  Asterisk.  Для  этого  создадим  запись  в  файле
 /etc/asterisk/sip.conf
      ; linksys ata adapter, skype testing
      [sipphone]
      context=default
      type=friend ; ATA login
      secret=f.ck ; ATA password
      host=dynamic ; allow to register
 Перезапустим  Asterisk  и  настроем  АТА  адаптер используя Asterisk в
 качестве сервера. Для проверки наберем на SIP телефоне 600#, вы должны
 услышать эхо тест.
 Если   все   работаем   -   настроим   перенаправление.  Для  этого  в
 /etc/asterisk/skypiax.conf  заменим строчку extension=600 на, например
 extensions=555.    В   файле   /etc/asterisk/extensions.conf   (секция
 [default]) добавим
      exten => 555,1,Dial(SIP/sipphone);
 Перезапустим  Asterisk  и  попробуем  вызвать  наш тествовый SkypeID -
 звонок  должен быть перенаправлен на sipphone. Единственный неприятный
 момент  -  скайп  берет трубку сразу после поступления вызова, так что
 корректную сигнализацию, вероятно, обеспечить не удастся.

Вызов skype абонентов

 Для  того,  чтобы  с  sipphone  вызывать skype пользователей - добавим
 соответствующие   записи   в   /etc/asterisk/extensions.conf   (секция
 default), например
      [default]
      exten => 555,1,Dial(SIP/sipphone);
      exten => 556,1,Dial(Skypiax/skypeclient/echo123);
      exten => 557,1,Dial(Skypiax/skypeclient/drugdiler);
      exten => 558,1,Dial(Skypiax/skypeclient/advokat);
 и  в  консоли  Asterisk  наберем  dialplan  reload.  Теперь  набрав на
 sipphone 556 asterisk соединет нас с Skype call testing service. Что и
 требовалось )

I know nobody asked for this but I thought I'd post it in case people are having trouble running the latest Google Earth (5.x) on CentOS. The latest version I tried (downloaded from the GoogleEarth WEB site) gave me some messages similar to this when I tried running it:

/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by…

Here is a simple solution to make it work. (This is a «safe» variant of a similar solution I found on the WEB)

1) Download a libstdc++-4.3.2-7.i386.rpm for Fedora 10 (you can get a copy from http://rpmfind.net//linux/RPM/fedora/10/i386/libstdc++-4.3.2-7.i386.html)

2) In some temporary directory, NOT as root, extract the files from the rpm «rpm2cpio libstdc++-4.3.2-7.i386.rpm | cpio -idv». You will notice that you now have a ./usr/lib/ directory with a file libstdc++.so.6.0.10 and a softlink, libstdc++.so.6 in it.

3) Copy the libstdc++.so.6.0.10 into your GoogleEarth installation directory (for me it is /opt/google-earth/) (depending on your installation you might have to be root for this.)

4) In the GoogleEarth directory, make the appropriate softlink «ln -s libstdc++.so.6.0.10 libstdc++.so.6»

That should be it (at least it was for me). You should be able to run the latest GoogleEarth. This is perfectly safe as it does *not* replace any CentOS supplied files, and only GoogleEarth will use the newer library.

  • orphans/skypiax.txt
  • Последние изменения: 2014/08/10