Настройка перехвата magnet-ссылок

Создано: 2010-09-19

Обновлено: 2011-09-28

Описание:

Достаточно подробную информацию о magnet-ссылках можно прочитать на соответствующей странице (en) в Википедии. Здесь же будут представлены только практические рекомендации по настройке популярных браузеров для работы с ними в юникс-подобных системах.

Список бинарных файлов программ, в которых точно есть возможность передачи magnet-ссылок работающему процессу: Ниже приведены интрукции на примере eiskaltdcpp-qt.

Настройка браузера Opera: Tools/Preferences/Advanced/Programs/Add (Инструменты/Настройки/Дополнительно/Программы/Добавить)
    Protocol: magnet
    Open with other application: /usr/bin/eiskaltdcpp-qt
Аналогично добавляем хаб-ссылки, вместо magnet пишем dchub. Эти настройки применятся сразу.

Настройка браузера Iceweasel (Firefox):
(версия < 3.6) в about:config добавить:
    ключ (строковое) = network.protocol-handler.app.magnet
    значение = /usr/bin/eiskaltdcpp-qt
(версия >= 3.6) в about:config добавить:
    ключ (логическое) = network.protocol-handler.expose.magnet
    значение = false
    нажать на магнет ссылку и в появившемся диалоге выбрать чем открывать
Аналогично добавляем хаб-ссылки... Эти настройки применятся сразу.

Подхват магнет-ссылок из Iceweasel (Firefox) и Chromium (Google Chrome) в Gnome:
gconftool-2 -t string -s /desktop/gnome/url-handlers/magnet/command "eiskaltdcpp-qt %s"
gconftool-2 -t bool -s /desktop/gnome/url-handlers/magnet/needs_terminal false
gconftool-2 -t bool -s /desktop/gnome/url-handlers/magnet/enabled true
Эти настройки применятся сразу.

Подхват магнет-ссылок из Iceweasel (Firefox) и Chromium (Google Chrome) в Gnome (вариант №2):
mkdir -p ~/.gconf/desktop/gnome/url-handlers/magnet
echo '<?xml version="1.0"?>
<gconf>
    <entry name="needs_terminal" mtime="1241801989" type="bool" value="false"/>
    <entry name="enabled" mtime="1241801989" type="bool" value="true"/>
    <entry name="command" mtime="1254633960" type="string">
        <stringvalue>eiskaltdcpp-qt &quot;%s&quot;</stringvalue>
    </entry>
</gconf>' > ~/.gconf/desktop/gnome/url-handlers/magnet/%gconf.xml
Эти настройки применятся после перезапуска иксов или полной перезагрузки.

Подхват магнет-ссылок из Konqueror и Chromium (Google Chrome) в KDE:
echo '[Protocol]
exec=/usr/bin/eiskaltdcpp-qt %u
protocol=magnet
input=none
output=none
helper=true
reading=false
deleting=false
writing=false
makedir=false
deleting=false
Icon=eiskaltdcpp
Class=:internet
Description=Direct Connect protocol
URIMode=url' | sudo tee /usr/share/kde4/services/magnet.protocol
Эти настройки применятся сразу.

Если используется FreeDC++ или EiskaltDC++ Gtk, то не забудьте также включить соответствующую опцию в его настройках:
freedcpp_settings_magnet.png     freedcpp_settings_magnet.png

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

Вот пример простого скрипта:
#!/bin/sh

export DC_CLIENT='eiskaltdcpp-qt'
export TORRENT_CLIENT='transmission-remote --add'

if (echo "${1}" | grep '^magnet:?.*xt=urn:tree:tiger:') then
    echo -e "Using DC-client"
    "${DC_CLIENT}" "${1}" &
elif (echo "${1}" | grep '^magnet:?.*xt=urn:btih:') then
    echo -e "Using torrent-client"
    "${TORRENT_CLIENT}" "${1}" &
else
    echo -e "Unknown type of magnet-link:\n${1}"
    exit 1
fi

exit 0
Сохраните этот скрипт как /usr/local/bin/open-magnet или /usr/bin/open-magnet и сделайте его исполняемым. Для настройки браузеров используйте инструкции выше, заменив eiskaltdcpp-qt на open-magnet.

Вот пример более сложного скрипта:
#!/bin/sh

URL="$@"

LIST_TORRENTS="transmission
deluge
azureus
vuze
ktorrent
leechcraft -type url_encoded
qbittorrent
"

LIST_DCPP="eiskaltdc
eiskaltdcpp
freedcpp
linuxdcpp
leechcraft -type url_encoded"

url_handler() {
	LIST="$1"
	URL="$2"
	echo "${LIST}" | \
	while read PRG PARAMS ; do
		PRG_PTH="/usr/bin/${PRG}"
		if [ -e "${PRG_PTH}" ] ; then
			[ "${PARAMS}" ] && PARAMS=" ${PARAMS}"
			echo "exec ${PRG_PTH}${PARAMS} ${URL}"
			exec ${PRG_PTH}${PARAMS} "${URL}"
			break;
		fi
	done
}

#main

URL_TYPE=$(echo "${URL}" | sed 's/.*xt=urn:\([^:]*\):.*/\1/')

case "${URL_TYPE}" in
	btih)
		url_handler "${LIST_TORRENTS}" "${URL}"
	;;

	tree)
		url_handler "${LIST_DCPP}" "${URL}"
	;;

	*)
		echo "Error: url handler $URL_TYPE not found"
	;;
esac
Пользователь Nexor даже сделал свой deb-пакет (копия) для автоматизации устаноки соответствующего скрипта и настройки системы. Поскольку не все используют основанные на Debian дистрибутивы, здесь выложен так же архив, содержимое которого в комментариях не нуждается. Ссылки с этого сайта:
DC клиенты для Linux
EiskaltDC++ — Screenshots
EiskaltDC++ — Часто задаваемые вопросы
EiskaltDC++ — пакеты для Debian GNU/Linux и Ubuntu
FreeDC++ — пакеты для Debian GNU/Linux и Ubuntu
uHub — пакеты для Debian GNU/Linux и Ubuntu

Внешние ссылки:
Google chrome (Chromium) и Magnet-ссылки в Ubuntu Linux
MAGNET-URI Project
Register protocol

Лицензия: Public Domain (ru, en)
Заметка: Все представленные здесь материалы можно использовать частично или полностью без указания ссылок на автора (меня) и оригинальную страницу.

Tehnick © 2009-2016