stogerc 23.01.2010 23:08

Tips & tricksgoogle chrome + magnet-ссылки

Магнет ссылки предназначены для указания на ресурсы, доступные к загрузке через p2p сети. Такие ссылки в основном идентифицируют файлы не по их расположению или имени, а по содержанию, точнее, по хеш-коду.

При клике по такой ссылке google chrome передаёт эту ссылку утилите xdg-open, которая в свою очередь передаёт ссылку конечной программе. Но вряд ли xdg-open точно знает какая программа должна обрабатывать magnet-ссылку и у меня, например, xdg-open передавала ссылку x-www-browser, коим в моей системе является google-chrome. Сейчас я расскажу вам как научить xdg-open открывать magnet-ссылки тем, чем нужно.

Для этого смотрим, где находится файл xdg-open:
1
whereis xdg-open


и открываем его для редактирования
1
nano /usr/bin/xdg-open


Далее идем в самый конец файла и видим строки:
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
case "$DE" in
kde)
open_kde "$url"
;;
gnome)
open_gnome "$url"
;;
xfce)
open_xfce "$url"
;;
generic)
open_generic "$url"
;;
*)
exit_failure_operation_impossible "no method available for opening '$url'"
;;
esac


Понятно, что для open_xfce соответствует то, что команда будет выполняться в xfce, для open_kde то, что в kde и т.д. При необходимости ненужные DE можно стереть. Теперь нужно добавить условие, которое будет выполняться, если переданная ссылка magnet. Ниже приведен пример для всех DE и torrent клиента deluge.

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
case "$DE" in
kde)
if (echo $url | grep '^magnet') then
deluge "$url"
else
open_kde "$url"
fi
;;
gnome)
if (echo $url | grep '^magnet') then
deluge "$url"
else
open_gnome "$url"
fi
;;
xfce)
if (echo $url | grep '^magnet') then
deluge "$url"
else
open_xfce "$url"
fi
;;
generic)
if (echo $url | grep '^magnet') then
deluge "$url"
else
open_generic "$url"
fi
;;
*)
exit_failure_operation_impossible "no method available for opening '$url'"
;;
esac



Естественно, что вместо deluge вы можете подставить любую программу.
Как я уже сказал ненужные DE можно удалить и для openbox вышепреведённый код можно заменить на:
1
2
3
4
5
if (echo $url | grep '^magnet') then
deluge "$url"
else
open_generic "$url"
fi


Вот и всё, теперь можете попробовать покликать magnet-ссылки на piratebay или на torrindex


Тэги: Chrome Google magnet torrent xdg
+ 5 -
Похожие Поделиться

digiwhite 23.01.2010 23:21 #
А этот скрипт (имеется в виду xdg-open) использует только chrome? Если знаете что еще его использует то можете написать?
stogerc 24.01.2010 00:11 #
Если хотите узнать что в вашей системе использует xdg-open, выполните
aptitude remove xdg-utils
и посмотрите какие программы удаляются по зависимости. Потом, естественно, отмените удаление :)
digiwhite 24.01.2010 00:15 #


Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
Следующие пакеты устанавливались автоматически и больше не требуются:
libclucene0ldbl libxine1-x kdebase-runtime-data-common libxine1-misc-plugins libxcb-xv0 kde-icons-oxygen libxine1-bin libexiv2-5 liblzma0 libsoprano4 kdelibs5-data kdiff3-doc
libxcb-shape0 libstreamanalyzer0 phonon-backend-xine libkonq5-templates libstreams0 exiv2 libxcb-shm0 soprano-daemon kdebase-runtime-data libxine1-console libxine1
Для их удаления используйте 'apt-get autoremove'.
Пакеты, которые будут УДАЛЕНЫ:
kdebase-runtime kdebase-runtime-bin-kde4 kdelibs-bin kdelibs5 kdiff3 khelpcenter4 libknotificationitem1 libkonq5 libplasma3 python-ubuntuone-client ubuntuone-client
ubuntuone-client-gnome umbrello xdg-utils
обновлено 0, установлено 0 новых пакетов, для удаления отмечено 14 пакетов, и 0 пакетов не обновлено.
После данной операции, объём занятого дискового пространства уменьшится на 59,1MB.

stogerc 24.01.2010 01:11 #
У меня там был всего лишь deluge, ktorrent, google-chrome и всякая мелочь, так что не удивляйтесь.
divius 24.01.2010 00:57 #
Общий ответ таков: все, кто следует стандартам в этой области. Но приложения, привязанные к конкретному DE имеют тенденцию игнорировать XDG и обращаться напрямую к ***-open.
stogerc 23.01.2010 23:27 #
Описывал способ для google chrome потому что в Firefox и Opera все это просто настраивается в опциях.
В firefox нужно зайти в Edit>>Preferences, выбрать вкладку Applications, найти строку magnet и настроить в поле action.
В opera: Tools>>Preferences, вкладка Advanced, подвкладка Programs, далее нажать Add и добавить нужное правило для нужного протокола, в данном случае magnet.
digiwhite 23.01.2010 23:29 #
Да нет, я к тому, что этому скрипту может можно найти какое-то дополнительное экзотическое применение :).
stogerc 23.01.2010 23:34 #
Я вас понял, просто вы успели написать комментарий в то время, когда я писал свой =), а где ещё используется xdg-open даже и не знаю.
squ1b3r 23.01.2010 23:41 #
А может до кучи еще подскажите как научить хром ословые ссылки понимать?
stogerc 23.01.2010 23:51 #
Ну ведь принцип одинаковый, просто код будет чуть другой, тоесть
if (echo $url | grep '^ed2k') then
amule "$url"
else
open_generic "$url"
fi
Условий можно писать сколько угодно, можно использовать case, и главное не забудьте, оставить обработчик простых ссылок, тоесть open_generic "$url"
digiwhite 23.01.2010 23:44 #
Так ведь так же :).


if (echo $url | grep '^magnet') then
deluge "$url"
else
if (echo $url | grep 'ed2k') then
<имя_клиента> "$url"
fi


Где-то так.
digiwhite 23.01.2010 23:45 #
а да, в конце если не совпало передать в open_generic. Ну смысл я думаю вы поняли.
squ1b3r 23.01.2010 23:47 #
благодарствую )
digiwhite 23.01.2010 23:59 #
grep '^ed2k' Лучше так :).
squ1b3r 24.01.2010 00:02 #
тут на самом деле не суть как, сама ссылка все равно кривая и ed2k ее просто не перехватывает (
squ1b3r 23.01.2010 23:55 #
Правда вот вся суть в том что хром как то извращает ed2k ссылки и их даже нельзя просто скопировать и вставить, поэтому и всякий перехват не работает. Давно уже ищу решение этой проблемы да так и не нашел (
digiwhite 24.01.2010 00:02 #
Как вариант - перехватывать все ссылки и записывать его в журнал. Потом посмотреть что он там передает.

Перед case "$DE" in вставьте например:

echo $url >> /tmp/intercepted_urls.log


Ссылки можно будет посмотреть в /tmp/intercepted_urls.log.
squ1b3r 24.01.2010 00:05 #
да нет вы меня не поняли, сам хром как то извращает ссылку, то есть если ее просто скопировать в буфер и вставить в осел, он говорит извиняйте инвалид линк, то есть передавать линк куда-то уже бессмысленно, с ним надо что-то сначала сделать и потом уже передавать. Вот такая котовасия
digiwhite 24.01.2010 00:12 #

Это что, такая защита от перацтва?
squ1b3r 24.01.2010 00:16 #
Это очень давно уже обсасывается на гугле.
Вот для примера, верхняя ссылка от фф нижняя от хрома:

ed2k://|file|%D0%A3%D1%81%D0%BF%D0%B5%D1%82%D1%8C%20%D0%B4%D0%BE%20%D0%BF%D0%BE%D0%BB%D1%83%D0%BD%D0%BE%D1%87%D0%B8.Midnight%20Run.1988.mkv|9121117929
ed2k://xn--%7Cfile%7C%20%20-3fno8d1c1brdcmj7b4azp0k9f.midnight%20run.1988.mkv%7C9121117929%7Ca35a33e91d14dcb48fa4808157eee050%7C/%7Csources,10.51.115.118:4662%7C/
digiwhite 24.01.2010 00:18 #
Мда... чего-то жостко хром преобразует ссылку то :(
squ1b3r 24.01.2010 00:21 #
Вот и я о том же, и грустно что довольно давно висит этот вопрос и решения до сих пор нет (
divius 24.01.2010 01:20 #
Кодирует в соответствие со стандартами, т.е. всё, кроме англицких букв и некоторых символов кодируется символом процента + код символа.
т.е. надо как-то каждый %XX заменить на chr(fromhex(XX))

Как сделать на баше - не знаю, можно написать примочку на питоне что-н типа:
#!/usr/bin/python

import sys

if len(sys.argv) < 2:
sys.exit(1)

import urllib
print urllib.unquote(sys.argv<1>)

но не уверен, что будет работать с русскими буквами.
digiwhite 24.01.2010 01:26 #
Так вероятно что UTF. Должно и с русскими работать.
digiwhite 24.01.2010 00:16 #
Таки покажите что выдает, ради интереса.
pioner14 24.01.2010 00:12 #
вот что выдает в kde:

Невозможно запустить процесс Невозможно создать вспомогательный процесс ввода/вывода.
Сообщение klauncher: Неизвестный протокол «magnet».
pioner14 24.01.2010 00:15 #
клиент - ktorrent
booley 24.01.2010 02:44 #
Стандарт был создан в 2002 году, отчасти как обобщение, независимое от конкретных производителей программного обеспечения и проектов, URI-схем ed2k: и freenet:, использующихся сетями eDonkey2000 и Freenet соответственно. Создание стандарта сопровождалось попыткой следовать стандартам URI от IETF настолько, насколько это было возможным. Среди приложений, поддерживающих magnet-ссылки, Shareaza, aMule, DC++, Azureus, BearShare, gtk-gnutella, Kazaa, LimeWire, Morpheus, Transmission, TrustyFiles и ?Torrent.

(c) Wikipedia
Капитан Очевидность считает нужным добавить: ktorrent'a в этом списке нет.
ktorrent начнет поддерживать magnet-ссылку только с четвертой версии.

Пруфлинк: http://ktorrent.org/wiki/index.php/FAQ#Does_KTorrent_support_magnet_links.3F
booley 24.01.2010 02:45 #
Мои извинения, не увидел этого комментария:
http://welinux.ru/post/2235/#cmnt39196
pioner14 24.01.2010 00:14 #
Может у меня klauncher из за того что мой KDE 4.3.95 еще сыроват ругается
stogerc 24.01.2010 00:16 #
Странно очень, попробуйте именно вот так:
if (echo $url | grep '^magnet') then
ktorrent "$url"
else
open_kde "$url"
fi
Удалив все остальные строки
stogerc 24.01.2010 00:19 #
Ага у меня тоже самое, у меня ktorrent на все магнет-ссылки ругается, даже если я добавляю их из интерфейса.
pioner14 24.01.2010 00:24 #
Вот при таком виде:

case "$DE" in
kde)
if (echo $url | grep '^magnet') then
ktorrent "$url"
else
open_kde "$url"
fi
;;
esac

Та же ошибка
stogerc 24.01.2010 00:30 #
Я же говорю, тут ошибка в самом ktorrent, вы попробуйте добавить magnet-ссылку через интерфейс программы, если не получится, то надо копать уже в направлении ktorrent.
pioner14 24.01.2010 00:32 #
Понятно. Спасибо.
эх...
pioner14 24.01.2010 00:35 #
Вроде как в ktorrent магнет ссылки будут потдерживаться лишь в версии 4.0 которая выйдет в феврале
dyuss 12.02.2010 20:24 #
спасибо. Ваша статья мне помогла.