SkypeTab — вкладки для линуксового скайпа. Теперь под любые оконный менеджер и панель

    Устарело, см. свежую версию тут.

    • Если Вы не пользуетесь Linux или Skype, то этот пост не для Вас.
    • Если Вы настроили себе мост в Pidgin и теперь все 3.5 скайпоконтакта у Вас в этом списке, то этот пост не для Вас.
    • Если Вас устраивает то, как скайпоокна группирует KWin, и не смущает тот факт, что они как в таскбаре место все дружно занимали, так и занимают, то этот пост тоже не для Вас.
    А вот если Вы активно пользуетесь скайпом, активно переключаетесь между несколькими конфами и хотите удобного нативного интерфейса, то рекомендую всё же ознакомиться.



    Когда я разрабатывал предыдущую версию, я упёрся лбом в стену. Все попытки поправить косяки упирались в «умные» оконные менеджеры, лучше меня знающие, где должны находиться окна, и в кривые утилиты таскбара (да-да, gnome-panel в их числе), игнорирующие SKIP_TASKBAR_HINT, если он не был установлен до появления окна на экране. Знаете, я тогда сдался.

    Но на прошлой неделе на переходе в метро меня кто-то толкнул и я полетел вниз с лестницы. В нижней точке полёта, в момент удара лбом в стену, в тот чудесный миг, я осознал, что никакой стены на самом деле нет. Нет, мне потом в больнице рассказали, что стена на самом деле была, причём даже бетонная. Но я сейчас про ту метафорическую стену из предыдущего абзаца.

    Суть в том, что если кругом все такие злые и убогие, что оконный менеджер, что таскбар, надо просто взять и построить свой X11-дисплей с преферансом и куртизанками. Когда я таки смог взять в руки ноут, я начал подбор средств для создания своего лунного модуля. Взгляд пал на такую замечательную штуку как Xephyr. Помимо того, что он является полноценным X-сервером, он ещё и умеет поддерживать те расширения, которых может не быть на основном. Это на случай запуска на калькуляторе, видимо. В целом штука оказалась весьма шустрой, даже нормально переваривает видеозвонки. Пара дней на написание чего-то вроде своего оконного менеджера с таскбаром, и теперь софтина готова для тестирования и эксплуатации. На видео выше можно посмотреть на неё в действии.

    Исходники: code.google.com/p/skypetab/source/checkout
    Архив с исходниками и Makefile, умеющим кое-как устанавливать и удалять это чудо из системы — code.google.com/p/skypetab/downloads/detail?name=skypetab.tar.gz
    PPA для убунтоводов: ppa:keks9n/main

    Вообще всё это дело сильно нуждается в тестировании, причём в основном в плане учёта всех зависимостей, ибо помимо кефира, mono, биндингов к GTK и NDesk-овского d-bus-клиента там используются всякие xmodmap, xrandr и cvt. Так же буду рад, если кто-нибудь сделает пакеты для других дистров.

    Выявлена НЕСОВМЕСТИМОСТЬ с 64-хбитными системами: скайп-то, зараза, 32-хбитный. Заплатки будут завтра.
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 88

      +1
      Полезно, спасибо! Добавлю в закладки чтобы не забыть.
        0
        Закладки в закладки. А вы, я смотрю, любитель рекурсии.
        0
        Спасибо, надо будет попробовать
          0
          Я не запускаю свою «интереса ради» убунту даже раз в месяц, да и в той пиджин настроен на работу со скайпом, но почитать было интересно. Особенно про стены =) спасибо.
            0
            Кстати, я изредка использую ник kekekeks как альтернативный уже года 2-3.
            Совпадение? =)
              +1
              Тут был акк с моим основным ником, но его забанили -_-
            +1
            Wallpaper из Lain?
              0
              Ваш стиль изложения мне определенно нравится.
              А вот решение… менять X-сервер из-за одного кривого приложения — как-то не комильфо.
                +3
                Он внутри основного висит. То биж, вот тот чёрный квадрат на старте — это и есть фреймбуфер X-сервера. Причём там переменная DISPLAY не меняется (через LD_PRELOAD перехватывается XOpenDisplay, и замена идёт только для скайпа), так что можно спокойно клацать по ссылкам в чате, и они откроются как положено.
                0
                Отлично, надо попробовать…
                маленький оффтоп — не в курсе почему после рестарта (ubuntu 10.04.2 LTS) скайп не запускается и проблема решается только его переустановкой?
                0
                Спасибо за наводку, что пидгин можно со скайпом подружить. Теперь стало гораздо удобнее :)
                Недавно просто пришлось пересесть на линукс…
                  0
                  У этого плагина есть набор ограничений с групповыми переговорами, делающих его для этих целей малоюзабельным. А я в основном для таких чатов скайп и держу.
                  0
                  Все таки ты это сделал )
                  Реально примелькались топики с вкладками на скайп.
                  Спасибо еще раз — юзабельно.
                    0
                    Я тоже думал на эту тему… И додумался до определённой схемы, которую, увы, не смог заимплементить — времени не нашлось, лень стало и всё такое.
                    А именно, в Qt есть классный класс QX11EmbedContainer (http://doc.qt.nokia.com/latest/qx11embedcontainer.html), который, судя по заверениям разработчиков (http://labs.qt.nokia.com/2005/08/10/playing-around-with-xembed/) даже корректно передаёт клавиши и их сочетания, даже если аппликуха не поддерживает XEmbed!
                    Так вот, если добавить к этому немного чёрной магии (вроде перехвата от X сервера всех сообщений о создании окна и фильтровать там скайпоокна) и табы — то может быть что нибудь получится…
                      0
                      Я забрасывал зимой скайпоокна в кутэшный контейнер, когда эксперементировал с XReparentWindow. Результат тот же, что и с GtkSocket: клавиатуру оживить так и не получилось. Можно попробовать, конечно, руками рассылать через XSendEvent, но могут возникнуть проблемы с фокусом и прочим.
                        0
                        Так говорю же, QX11EmbedContainer и XReparentWindow немного по разному действуют. Когда я просто забабахал одно чатоокно скайпа в такой контейнер — оно прекрасно работало, все события клавиатуры прекрасно отсылались.
                          0
                          Почитайте что пишут labs.qt.nokia.com/2005/08/10/playing-around-with-xembed/ — думаю можно вместо клика фокус переводить с помощью какой нибудь иксовой функции, которая будет вызываться по клику на таб (ну как было в первой вашей версии примерно сделано) — и всё будет работать
                            0
                            Надо будет поковырять. Единственное, придётся писать на плюсах (а я в последнее время сильно от них отвые), ибо стабильных биндингов для CLI нет.
                              0
                              Если хотите, могу возможно чем то подсобить. Сам бы не взялся, а помочь МБ помогу.
                                0
                                Вообще я давно хотел основательнее разобраться с Qt, а в больнице будет на это время. Думаю, неплохая возможность
                                  +1
                                  И кстати на моей Kubuntu не завелось. Появилось чёрное окно, потом запустился скайп, потребовал доступа для СкайпТаба (который я дал) и… Всё. Открываю чаты пачками — открываются как и раньше. Чёрное окно как висит сиротливо — так и висит…

                                  Надо попробывать всё ж эту методу.
                              0
                              void QX11EmbedContainer::embedClient ( WId id )

                              Instructs the container to embed the X11 window with window ID id. The client widget will then move on top of the container window and be resized to fit into the container.

                              The id should be the ID of a window controlled by an XEmbed enabled application, but this is not mandatory. If id does not belong to an XEmbed client widget, then focus handling, activation, accelerators and other features will not work properly.
                              Пока что у меня этот вызов вообще ничего не делает почему-то.
                        0
                        А я решил проблему плагином скайпа для Пиджина) Сам скайп запускается при этом, но видно его только в процессах)
                        • НЛО прилетело и опубликовало эту надпись здесь
                            0
                            А почему это так плохо? Та же баньша на шарпе написана и идёт в дефолтной поставке убунты в качестве штатного плеера.
                              0
                              Ага! mono нужно ставить?.. Черное окошко только получилось.

                              Без моно никаких скайпов?.. Не-не-не-не, Дэвид Блейн!

                              • НЛО прилетело и опубликовало эту надпись здесь
                                  0
                                  То есть, моно виновато тем, что распространено меньше того же питона. Ок.
                                  • НЛО прилетело и опубликовало эту надпись здесь
                              0
                              W: Не удалось получить httр://ppa.launchpad.net/keks9n/main/ubuntu/dists/maverick/main/source/Sources.gz 404 Not Found
                              httр://ppa.launchpad.net/keks9n/main/ubuntu/dists/maverick/main/binary-amd64/Packages.gz 404 Not Found
                              :(
                                0
                                Оно под natty. Можно просто поменять в sources.list, там никаких сверхъестественных изменений в библиотеках быть не должно.
                                0
                                Извините, сейчас нет времени в этом разбираться, поэтому быстрее спросить у Вас. А возможно ли использовать этот Xephyr в качестве полной обертки над стандартными иксами? Или ещё лучше, можно ли безболезненно их подменить стандартные иксы вот этими?
                                Я просто уже очень давно пытаюсь справиться с тем, что под нвидиевскими картами, судя по всему, невозможно штатными средствами сделать так, чтобы один монитор был в ландшафтной ориентации, второй в портретной и при этом одновременно работал бы компиз.
                                  0
                                  Эм. Xinerama оно точно умеет, насколько я знаю. Но тогда придётся два кефира запускать на полный экран и уже поверх них запускать компиз.
                                    0
                                    А вообще это страшный костыль, но можно, да.
                                      0
                                      Окей, понял, спасибо. Ближе к выходным тогда покопаюсь

                                      Костыль-то страшный, но альтернатив как-то нет. Либо штатная xinerama + полное отсутствие какого бы то ни было ускорения на одном из мониторов вообще, либо twinview + оба монитора горизонтальные, либо открытые дрова + неработающая cuda, а это уже критично. И так уже 4 года продолжается, техподдержка нвидии ссылается на косяки в X11, разработчики иксов ссылаются на то, что нвидия слишком ленивая.
                                      В общем, без костылей это просто никак не сделать, к сожалению
                                    0
                                    Скорейшего выздоровления! Берегите себя ;)
                                    • НЛО прилетело и опубликовало эту надпись здесь
                                        +1
                                        Тормозит что именно? Вывод htop покажите, пожалуйста.

                                        С раскладкой вообще странно — настройки клавиатуры должны клонироваться через xmodmap. Стрелочки при этом работают?
                                          0
                                          Проблема с раскладкой повторяется. В итоге оно вобще захватило мышь и клавиатуру и решило что основному X серверу они не нужны)

                                          Ставил из ppa.

                                          Что можно сделать чтоб подробнее диагностировать? может что инть из исходников собрать?
                                            0
                                            после перезапуска совсем сломалось — Unable to launch Xephyr, see console log for details:
                                        • НЛО прилетело и опубликовало эту надпись здесь
                                        0
                                        >Так же буду рад, если кто-нибудь сделает пакеты для других дистров.
                                        Для того чтобы собрать пакеты (по крайне мере rpm-ки), надо решить эту проблему:
                                        + /usr/bin/make install DESTDIR=/home/abuild/rpmbuild/BUILDROOT/skypetab-0.1.1-7.1.i386 INSTALL_ROOT=/home/abuild/rpmbuild/BUILDROOT/skypetab-0.1.1-7.1.i386
                                        mkdir -p /opt/skypetab/
                                        mkdir: cannot create directory `/opt/skypetab/': Permission denied

                                        Сделайте пожалуйста так, чтобы можно было поставить программу не в корень дистра, а в папку сборки…
                                          0
                                          Перезалил архив, теперь должно цеплять DESTDIR. Там Makefile собран на коленке просто -_-
                                          0
                                            0
                                            Skype не есть «XEmbed-aware»
                                              0
                                              Тут выявили проблемы с подгрузкой dispfix.so на 64-хбитных системах. Скайп-то 32-хбитный. Фиксы будут завтра.
                                                0
                                                Жду с нетерпением
                                                0
                                                Теги подобраны в тему)
                                                  0
                                                  А как понимать сентенцию насчёт количества контактов во втором пункте списка противопоказаний? («Если Вы [sic] настроили себе мост в Pidgin [sic] и теперь все 3.5 [sic] скайпоконтакта у Вас [sic] в этом списке, то этот пост не для Вас [sic]»).
                                                    0
                                                    В том плане, что их так мало, что даже не дтягивает до четырёх )
                                                      0
                                                      А какая разница? Если 50+ контактов и настроен «мост в Pidgin», что-то изменится?
                                                        0
                                                        Видимо топикстартер считает, что мост в Пидгин удобен только для небольшого количества контактов.
                                                          +1
                                                          Если не пользуетесь скайпоконфами, то ничего не изменится.
                                                      0
                                                      а как быть с таким выводом?

                                                      Unhandled Exception: System.Exception: Unable to open the session message bus. ---> System.ArgumentNullException: Argument cannot be null.
                                                      Parameter name: address
                                                      at NDesk.DBus.Bus.Open (System.String address) [0x00000] in :0
                                                      at NDesk.DBus.Bus.get_Session () [0x00000] in :0
                                                      — End of inner exception stack trace — at NDesk.DBus.Bus.get_Session () [0x00000] in :0
                                                      at SkypeTab.SkypeApi.CheckRunning () [0x00000] in :0
                                                      at SkypeTab.MainClass.Main (System.String[] args) [0x00000] in :0
                                                        0
                                                        Кидаться тухлыми овощами в NDesk.
                                                        0
                                                        Появилась идея всё же таки поиздеваться над XWindowReparent и форвардить ему события, полученные от X-сервера.
                                                          0
                                                          Вы таки будете смеяться, но XReparentWindow в комбинации с XSetInputFocus спасает отца русской демократии. Пойду всё это теперь переписывать.
                                                            0
                                                            Убейте меня кто-нибудь, я идиот. Полгода бился над проблемой и проглядел самое простое и очевидное решение. Сейчас переписываю по уму.

                                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                            Самое читаемое