В amarok есть скрипт, получающий текст играющей в данный момент песни, лежит в /usr/share/apps/amarok/scripts/lyrics_lyrc/lyrics_lyrc.rb. Скрипт написан на Ruby и использует для работы с сетью методы стандартных библиотек этого языка, а не напрямую методы kdelibs, которые использует сам amarok. Чтобы работать корректно, скрипт запрашивает у amarok конфигурацию сетевого подключения, а именно настройки прокси, с помощью такого запроса dcop: proxy_host = nil proxy_port = nil if ( @proxy == nil ) @proxy = `dcop amarok script proxyForProtocol http` end proxy_uri = URI.parse( @proxy ) if ( proxy_uri.class != URI::Generic ) proxy_host = proxy_uri.host proxy_port = proxy_uri.port end amarok же в свою очередь обращается к KDE за этими настройками и делает это не совсем корректно. В настройках KDE может быть действительно указана прокси (была указана когда-то давно), но при этом флажок использовать ее не стоит - выбран вариант прямого подключения. Видимо, amarok не глядя берет настройки из ~/.kde/share/config/kioslaverc, у меня они такие: [Proxy Settings] AuthMode=0 NoProxyFor=.house28,.house28.ru,localhost Proxy Config Script= ProxyType=0 ReversedException=false ftpProxy=http://127.0.0.1:3128 httpProxy=http://127.0.0.1:3128 httpsProxy=http://127.0.0.1:3128 и, игнорируя ProxyType, просто выдает то, что есть в поле httpProxy. В результате при попытке посмотреть текст песни скрипт сваливается с ошибкой доступа, причем если разбираться - то он лезет через какую-то очень странную прокси, которая в системе нигде, кроме как в полувыключенных конфигах, не фигурирует. Общее предложение: исправить вызов proxyForProtocol в amarok с тем, чтобы он выдавал корректные настройки прокси.
Добавил zerg@ с целью проконсультироваться, как с точки зрения KDE правильнее всего должен себя вести amarok? Сейчас он, видимо, читает напрямую конфиг kioslave - может быть есть в kdelibs какие-то методы, которыми правильно получать это значение? Или вообще amarok не должен иметь такого вызова, правильнее делать dcop запрос к какому-то компоненту KDE?
Быстрые разбирательства показали, что внутри amarok использует очень простой вызов из kdelibs: QString proxyForProtocol(const QString& protocol) { return KProtocolManager::proxyFor( protocol ); } Вот здесь он документирован: http://developer.kde.org/documentation/library/3.4-api/kio/html/classKProtocolManager.html#e12 Из документации ясно, что по идее - он должен возвращать "the proxy server address if one is available, or QString::null if not available", т.е. в случае отключенного прокси - возвращать QString::null? Это стоит исправить в kdelibs или нужно пробрасывать через amarok еще и proxyType http://developer.kde.org/documentation/library/3.4-api/kio/html/classKProtocolManager.html#w7 и анализировать его в скрипте?
dcop amarok script proxyForUrl http://xxx значит оттуда содрать можно
А может и просто писать в скрипте @proxy = `dcop amarok script proxyForUrl http://www.ru` Я не знаю, вдруг поведение proxyForProtocol так задумано
Такого пакета больше нет в сизифе. Закрываю багу.
Переоткрываю багу и переношу на нужный компонент.
Там сейчас всё сильно по другому и написано на JS. Судя по тексту /usr/share/kde4/apps/amarok/scripts/lyrics_lyricwiki/main.js конкретно этой проблеме он не подвержен.