chrisjrob
GNU Linux, Perl and FLOSS
© 2020. All rights reserved.
Linux Microsoft Skype For Business Lync 2013 Client
I was surprised to learn that Ubuntu 14.04 can talk to Skype for Business AKA Lync 2013 using the Pidgin Instant Messaging client. The general steps were:
And then restart Pidgin and add a new Account. The Office Communicator is the relevant plugin, with the following parameters:
- Protocol: Office Communicator
- Username: Your Office 365 or Skype for Business username — probably your email address
- Password: Your password is obviously required — and will be stored unencrypted in the config file, so you may wish to leave this blank and enter at each login
- Server[:Port]: Leave empty if your set-up has autodiscovery
- Connection type: Auto
- User Agent: UCCAPI/15.0.4420.1017 OC/15.0.4420.1017
- Authentication scheme: TLS-DSK
I am unclear why the user agent is required, and whether that will need to change from time to time or not. So far it has worked fine here.
Unfortunately a few days ago the above set-up stopped working, with “Failed to authenticate with server”. It seems that you must now use version 1.20 of the Sipe plugin, which fixes “Office365 rejects RC4 in TLS-DSK”. As this version was only completed three days ago, it is not yet available in any of the Ubuntu repositories that I have been able to find, you will probably have to compile yourself.
Broadly speaking I followed these key stages:
Install build tools if you don’t already have them:
sudo apt-get install build-essential
Install checkinstall if you don’t already have it:
sudo apt-get install checkinstall
tar -xvvzf pidgin-sipe-1.20.1.tar.gz
Change into source directory:
Read carefully the README file in the source directory.
Install dependencies listed in the README:
# apt-get install libpurple-dev libtool intltool pkg-config libglib2.0-dev libxml2-dev libnss3-dev libssl-dev libkrb5-dev libnice-dev libgstreamer0.10-dev
These dependencies may change over time, and your particular requirements may be different from mine, so please read the README and that information should take precedence.
Lastly, as an ordinary user, you should now be able to compile. If it fails at any stage, simply read the error and install the missed dependency.
I found checkinstall was pre-populated with sensible settings, and I was able to continue without making any changes. Once complete a Debian package will have been created in the current directory, but it will have already been installed for you.
For some reason I found that at this stage Pidgin would no longer run, as it was now named /usr/bin/pidgin.orig instead of /usr/bin/pidgin , I tried removing and reinstalling pidgin but to no avail. In the end I created a symlink ( ln -s /usr/bin/pidgin.orig /usr/bin/pidgin ), but you should not do this unless you experience the same issue. If you know the reason for this I would be delighted to receive your feedback, as this isn’t a problem that I have come across before.
Restarting Pidgin and the Office Communicator sprung into life once more. Sadly I would imagine that this won’t be the last time this plugin will break, such are the vagaries of connecting to closed proprietary networks.
Источник
Автоматический вход в Lync конференции в Linux
Для меня эта фраза сродни hello world, так как я добрался наконец до своей первой публикации. Долго откладывал этот замечательный момент, так как и писать было не о чем, а обсасывать то, что уже по куче раз обсосано, тоже не хотелось. Вообще для своей первой публикации хотелось что-то оригинальное, полезное другим и содержащее какой-то челленж и решение проблем. И вот я уже могу поделиться этим. Теперь обо всем по порядку.
Вступление
Началось все с того, что некоторое время назад я на рабочем компе накатил себе Linux Mint. Многие наверняка знают, что Pidgin с плагином Sipe вполне годная замена Microsoft Lync (сейчас называется Skype for business) для Linux систем. В силу специфики работы мне часто приходится участвовать в sip-конференциях, и в бытность виндузятника вход в конференции был элементарным: получаем приглашение по почте, кликаем на ссылку входа, готово мы внутри.
При переходе на темную сторону Linux все несколько усложнилось: вход в конференции в Pidgin конечно же тоже есть, но там для этого нужно в свойствах вашего sip-аккаунта выбрать пункт присоединения к конференции в меню и в открывшемся окне вставить ссылку на конференцию либо ввести имя организатора и conf id. И через какое-то время я начал задумываться: «а нельзя ли как-то это упростить». Ага, скажете вы, на кой черт тебе это понадобилось, сидел бы себе на винде и в ус не дул.
Шаг 1. Исследование
«Втемяшится в башку какая блажь — колом ее оттудова не выбьешь» — так говорил Некрасов в своем произведении «Кому на Руси жить хорошо».
Итак, раз уж мысль попала в голову, то через какое-то время возникла и первая идея для реализации. Казалось все просто — нужно перехватывать обращение к ссылкам meet.company.com/user/confid — поставить у себя на тачке локальный процесс веб-приложения на 127.0.0.1 и в /etc/hosts занести статическую запись для домена компании, через который производится вход в конференции, указывающий на localhost. Дальше этот веб-сервер должен обработать пришедшую ему ссылку и как-то передать внутрь Pidgin (сразу скажу, что на этом этапе у меня не было еще понимания как мне это ему вообще отдать). Решение конечно попахивает костылями, но мы же программисты, костыли нас не пугают (щютка).
Потом случайно я как-то открыл ссылку на приглашение в Google Chrome (а обычно я всегда использую Mozilla Firefox). И на мое удивление веб-страничка выглядела совсем иначе — не было формы ввода пользовательских данных и сразу после входа на страницу выходил запрос на открытие чего-то через xdg-open. Ради интереса нажимаю «да» и выходит сообщение об ошибке — ссылка lync15:confjoin?url=https://meet.company.com/user/confid не может быть открыта. Хмм. Что это за xdg-open такой и что ему нужно для того, чтобы такие ссылки открывались? Вскрытие чтение документации показало, что это обработчик графической оболочки, который помогает запускать ассоциированные приложения либо с протоколами для uri scheme, либо с определенными типами файлов. Ассоциации настраиваются через сопоставление mime-type. Итак, мы видим, что у нас запускается поиск сопоставленного приложения для uri scheme с именем lync15 и ссылка передается в xdg-open, который дальше по идее должен передать ее какому-то приложению, которое отвечает за данный тип ссылок. Которого у нас, конечно, в системе нет. А раз нет, то как поступают в мире опенсорса? Правильно, мы напишем его сами.
Дальнейшее погружение в мир Linux и особенно в изучение того, как работает графическая оболочка (desktop environment, DE), к слову у меня это Xfce в Linux Mint, показало что приложения и ассоциированный с ним mime-type прописывается обычно прямо в файлах ярлыков с расширением .desktop. Ну а почему бы и нет, создаю простой ярлык приложения, который должен просто запустить баш-скрипт и вывести переданный ему аргумент на консоль, привожу только сам файл ярлыка:
запускаю xdg-open из консоли с передачей той же ссылки, какая идет из браузера и… облом. Снова говорит что не может обработать ссылку.
Как оказалось я не обновил каталог ассоциированных mime-type с моим приложением. Делается это простой командой:
которая просто редактирует файл
Попытка номер 2 с вызовом xdg-open — и снова неудача. Ничего, трудности нас не пугают, а только подогревают интерес. И вооружившись всей мощью баша (т.е. трассировкой) ныряем с головой в отладку. Тут важно отметить, что xdg-open является просто шелл-скриптом.
Анализируя вывод после трассировки становится немного понятно, что дальше управление передается в exo-open. А это уже бинарный файл и разбираться почему он возвращает неуспешный код возврата при передаче ему ссылки в аргументе уже сложнее.
Пробежав по внутренностям xdg-open я выяснил, что он анализирует разные параметры окружения и передает управление дальше либо каким-то инструментам для открывания файлов\ссылок специфичных для конкретного DE, либо у него имеется fallback в виде функции open_generic
Быстро впиливаю сюда небольшой хак с анализом переданного аргумента и если там находится наша специфическая подстрока lync15:, то передаем сразу управление в функцию open_generic.
Попытка номер 3 и вы думаете заработало? Ага, сейчас, как же. Но сообщение об ошибке уже поменялось, это уже прогресс — сейчас он мне говорил что файл не найден и в виде файла писал мне ту самую ссылку, переданную в виде аргумента.
На этот раз дело оказалось в функции is_file_url_or_path, которая анализирует передана на вход ссылка на файл file:// либо путь до файла или что-то иное. И проверка не работала верно из-за того что наш префикс (url scheme) имеет цифры, а регулярное выражение проверяется только набор символов, состоящий из :alpha: точки и тире. После консультация со стандартом rfc3986 для uniform resource identifier стало понятно что на этот раз Майкрософт ничего не нарушает (хотя у меня была такая версия). Просто класс символов :alpha: содержит только буквы латинского алфавита. Быстро меняю проверку по регулярке на alphanumeric. Готово, вы восхитительны, все наконец запускается, управление после всех проверок отдается в наш скрипт-приложение, на консоль выводится наша ссылка, все как полагается. После этого начинаю подозревать, что все проблемы у exo-open тоже из-за валидации формата ссылки из-за цифр в схеме. Для проверки гипотезы меняю регистрацию mime-type у приложения на просто схему lync и вуаля — все работает и без переопределения функции open_xfce. Но нам это никак не поможет, потому что веб-страница для входа в конференцию создает именно ссылку с lync15.
Итак, первая часть пути пройдена. Мы умеем перехватывать вызов ссылки и дальше ее нужно как-то обработать и передать внутрь Pidgin. Для того чтобы понять как оно работает внутри при вводе данных по ссылке в меню «присоединения к конференции» я склонировал гит репозиторий проекта Sipe и приготовился снова нырять в код. Но тут меня к счастью привлекли скрипты в каталоге contrib/dbus/:
- sipe-join-conference-with-uri.pl
- sipe-join-conference-with-organizer-and-id.pl
- sipe-call-phone-number.pl
- SipeHelper.pm
Оказывается плагин Sipe доступен для взаимодействия через dbus (desktop bus) и внутри скриптов прямо есть примеры присоединения в конференцию по ссылке, либо через имя организатора и conf-id, либо можно инициировать звонок через sip. Это же как раз то чего нам не хватало.
Шаг 2. Реализация обработчика для автоджойна
Раз уж есть готовые примеры на перл, то я решил просто использовать sipe-join-conference-with-uri.pl и немного доработать под себя. Писать на перл я умею, поэтому особых сложностей это не доставило.
После тестирования скрипта отдельно, я вписал его вызов в файл lync.desktop. И это была победа! При входе на страницу присоединения к конференции и разрешения запуска xdg-open всплывающее окно конференции из Pidgin открывалось автоматически. Как же я ликовал.
Воодушевленный успехом, я решил сделать то же самое и для своего основного браузера Mozilla Firefox. При входе через лису открывается страничка для авторизации и еще в самом низу есть кнопка join using office communicator. Она-то и привлекла мое внимание. При клике на нее в браузере происходит переход по адресу:
на что он мне любезно говорит, что не знает как ее открыть и, возможно, у меня нет ассоциированного приложения для такого протокола. Ну это мы уже проходили.
Быстренько регистрирую свое приложение-скрипт еще и для uri-схемы conf и… ничего не происходит. Браузер продолжает жаловаться, что нет приложения, которое обрабатывает мои ссылки. При этом вызов из консоли xdg-open с параметрами работает превосходно.
«Set custom protocol handler in firefox» — с этим вопросом я вышел в Интернет. Прошерстив несколько обсуждений на stackoverflow (а куда же без него), вроде ответ нашелся. Нужно создать специальный параметр в about:config (конечно заменив foo на conf):
Создаем, открываем ссылку и… не тут-то было. Браузер как ни в чем ни бывало говорит что не знает наше приложение.
Читаю официальную документацию по регистрации протокола у Mozilla, есть вариант прописать асоциации в самом gnome desktop (заменив конечно foo на conf):
Регистрирую, открываю браузер… и снова борода.
Тут на глаза попадается строчка из документации:
Next time you click a link of protocol-type foo you will be asked which application to open it with.
— Семен Семеныч
— Ааа
Мы же не кликаем по ссылке, а просто веб-страница делает смену window.location через javascript. Пишу простой html файл со ссылкой на conf протокол, открываю в браузере, кликаю по ссылке — Yos! Открывается окно с вопросом в каком приложении нужно открыть нашу ссылку и там в списке у нас уже есть наше приложение Lync — мы же его честно зарегистрировали всеми возможными способами. Там же в окошке есть галочка «запомнить выбор и всегда открывать ссылки в нашем приложении», отмечаем, нажимаем ок. И это вторая победа — окно конференции открывается. При этом уже открытие конференций работает и не только при клике на ссылку, а и при переходе из нужной нам страницы присоединения в конференцию.
Потом я проверил, удаление параметров network.protocol-handler.expose.conf никак не повляло на работу протокола в лисе. Ссылки продолжали работать.
Заключение
Я залил все свои наработки в репозиторий на гитхаб, ссылки на все ресурсы будут в конце статьи.
Мне будет интересно получить обратную связь от тех кто захочет воспользоваться моими наработками. Сразу отмечу, что я все делал разработку только под свою систему Linux Mint, поэтому какие-то другие дистрибутивы или десктопы могут не заработать в том варианте. Вернее я даже почти уверен в этом, потому что я пропатчил в xdg-open только 1 функцию, относящуюся только к моему DE. Если вы захотите добавить поддержку других систем или декстопов, пишите мне пул-реквесты в гитхабе.
Источник
Microsoft Lync on Linux
Update: This post still gets a lot of search traffic hits, but is now over a year old, and I no longer have a need to use Lync, so haven’t needed to keep this working.
I believe that the Ubuntu repos now contain new enough versions of SIPE that the deb mentioned here shouldn’t be needed any more, but that the rest of the instructions should still be valid.
Update 2: I need to use LYNC again. Pidgin from the default Ubuntu repos does indeed now appear to work just fine with a custom user agent. In addition, I’ve also had some success with “WYNC” which works pretty well but has a few minor issues of it’s own.
Recently at work we have started using Lync internally. Whilst this is great for the Windows and Mac users among us, not so much for those of us running on Linux.
However, it turns out that it is possible to get basic Lync support working quite easily. I can see people, talk to people, people can talk to me – I can send files to people, but people can’t send file to me. I’ve not tried any video/voice stuff but I suspect it doesn’t work.
It’s done using “sipe” – basically an open source implementation of the Extended SIP/SIMPLE protocol Lync uses for chat.
The basic steps on Ubuntu are:
- Install the latest pidgin from pidgin devs ppa apt-get install pidgin pidgin-sipe
- Download sipe
- Compile it
- Connect to lync.
The compiling step is required because we use Office365 for Lync which needs the latest version of SIPE for which a deb does not yet appear to exist. However, I have uploaded my compiled deb which can be found below.
Instructions for Ubuntu (using a pre-compiled deb I’ve uploaded):
Once this is done you can then open pidgin, and add an “Office Communicator” account, using the following settings:
**First tab (Basic)**
Login: _email address_
Username: _email address_
Password: password
**Second tab (Advanced)**
Server/port: _blank_
Connection Type: _Auto_
User Agent: _UCCAPI/4.0.7577.314 OC/4.0.7577.314_
Auth Scheme: TLS-DSK
Un-tick /Use single sign on/, leave everything below it blank
Ignore the other 2 tabs
Done. Connect, see buddies 🙂
Amusingly, at home, I’ve actually had more success on Linux than windows! On my windows machine, opening LyncSetup.exe seems to just do nothing at all, the process appears to be running, but no setup window appears.
- The version of pidgin-sipe currently in Ubuntu repos is too old to work with Office 365 (needs 1.13.0, hence compiling myself)
- Version of pidgin in ubuntu was old, I installed a new version to be sure
- A colleague of mine seems to have had no success with these steps — pidgin seems to crash immediately after trying to connect
The pidgin-sipe deb above also builds the required “telepathy” binaries – so I’m going to have a go at getting it working with KDE’s native messaging client rather than pidgin, but for now for IM at least, pidgin is quite usable. (As I no longer need to use Lync, I never did get round to trying this)
Источник