VLC не может открыть MRL
При просмотре IPTV пользователи систем unix, могут столкнуться с ошибкой - VLC не может открыть MRL. При запуске из консоли пользователь увидит следующий вывод ошибок:
Причина проблемы кроется в том, что некоторые каналы IPTV используют порты ниже 1024, которые, в свою очередь, являются привелегированными, и не могут использоваться обычными пользователями и приложениями запускаемыми под ними.
Лечится все довольно просто. Все действия под root, либо sudo.
Устанавливаем пакет libcap2-bin
Затем выставляем атрибуты у VLC:
Перезапускаем VLC плеер и все работает.
Для отмены этих настроек необходимо выполнить команду:
Собственно стоит упомянуть, что в стандарте POSIX был принят механизм "возможностей" - capabilities, который позволял приложения, запущенные от обычных пользователей, наделять некоторыми привилегиями доступными только root, при этом не давая им полных прав суперпользователя, что мы и делаем при помощи утилиы setcap, а параметр cap_net_bind_service - позволяет дать возможность слушать порты привилегированных пользователей.
Более подробную информацию о capabilities читайте здесь.
У setcap, есть ряд ограничений (отсюда):
socket bind error: Permission denied
cannot open socket
open of `udp://@xxx.xxx.x.x:xxx' failed
Причина проблемы кроется в том, что некоторые каналы IPTV используют порты ниже 1024, которые, в свою очередь, являются привелегированными, и не могут использоваться обычными пользователями и приложениями запускаемыми под ними.
Лечится все довольно просто. Все действия под root, либо sudo.
Устанавливаем пакет libcap2-bin
# apt-get install libcap2-bin
Затем выставляем атрибуты у VLC:
# setcap 'cap_net_bind_service=+ep' `which vlc`
Перезапускаем VLC плеер и все работает.
Для отмены этих настроек необходимо выполнить команду:
# setcap -r /usr/bin/vlc
Собственно стоит упомянуть, что в стандарте POSIX был принят механизм "возможностей" - capabilities, который позволял приложения, запущенные от обычных пользователей, наделять некоторыми привилегиями доступными только root, при этом не давая им полных прав суперпользователя, что мы и делаем при помощи утилиы setcap, а параметр cap_net_bind_service - позволяет дать возможность слушать порты привилегированных пользователей.
Более подробную информацию о capabilities читайте здесь.
У setcap, есть ряд ограничений (отсюда):
- ядро должно быть не ниже 2.6.24
- не будет работать если файл является скриптом (bash, perl, php и т.д.) или ссылкой (ln -s)
- так же setcap отключает LD_LIBRARY_PATH. Если программа использует библиотеки ( .../lib ) то они не подключатся