Я не уверен, как ОС Raspbian обрабатывает несколько выходных данных, но я предполагаю, что она использует текущую распространенную практику, которая заключается в использовании Xinerama, т.е. несколько экранов используются одним и тем же «дисплеем». "(в терминах X11). В таком случае вы в принципе не можете «выбрать выходной порт» — все выходы находятся на одном дисплее (вы можете думать об этом как о виртуальном экране, который охватывает все ваши экраны и, возможно, больше).
Чтобы настроить таргетинг на определенный «экран» (термин X11, что означает часть дисплея), вам нужно запросить у X-сервера, какая часть дисплея отображается на нужный вам экран, а затем заставить VLC отобразить в ту область.Стандартный способ сделать это — использовать флаг --geometry
, который приложение должно распознавать и принимать в особом формате, который выглядит следующим образом: <ширина>X<высота>+
- который (кстати, не) является точным форматом, в котором инструмент запросов X-сервера отображает эту информацию - запустите xrandr
и посмотрите.
К сожалению, VLC не принимает такой параметр — он должен быть другим. Вместо этого он использует 4 разных параметра: --width
, --height
, --video-x
и --video-y
. ].
Итак, вот короткий скрипт, который использует xrandr
для получения геометрии первого подключенного порта HDMI (у меня их несколько, так что это полезно), а затем разбивает спецификацию геометрии из xrandr
для запуска VLC с правильными параметрами:
geom=( $(xrandr | grep ' connected' | grep HDMI | head -n1 | cut -d' ' -f3 | tr 'x+' ' ') ); \
[ -n "${geom[*]}" ] && vlc \
--width=${geom[0]} --height=${geom[1]} \
--video-x=${geom[2]} --video-y=${geom[3]} \
my-video.mp4
(отформатировано в несколько строк с обратной косой чертой для удобочитаемости, это должно быть в одной строке, но и так будет работать нормально — с обратной косой чертой).
[Обновление]: Теперь, когда я перечитал ваш вопрос, мне кажется, что вы можете иметь в виду, что хотите запустить свой скрипт вне сеанса X-сервера, и в этом случае вам также необходимо правильно настройте переменную окружения DISPLAY
. Поэтому попробуйте установить DISPLAY
перед запуском VLC, запустив export DISPLAY=:0
.
Просто несколько вещей об этом сценарии, не обращая внимания на то, что это сценарий оболочки, работающий с XML.
Давайте это исправим.
Во-первых, каждая команда не должна заканчиваться символами ;
. ;
используется, если вы помещаете несколько команд в одну строку, например ls; echo "hello"
.
Расширения переменных всегда должны заключаться в двойные кавычки. См. "Последствия для безопасности, если забыть заключить переменную в кавычки в оболочках bash/POSIX". Например: Ext="$1"
, XMLHeader >"$OutPutFileName"
, и т.д.
for Vfile in $(ls | grep .$Ext)
лучше написать for Vfile in ./*."$Ext"
.
Вместо того чтобы делать несколько перенаправлений в цикле, все из которых добавляются в один и тот же файл, завершите цикл словами done >>"$OutPutFileName"
. Это более эффективно.
VarRow=`cat $Vfile`
поместит содержимое файла размером 85 Мб в одну переменную, а затем for Row in $(echo $VarRow )
будет перебирать строки, или вы на это надеетесь. Вместо этого сделайте while IFS= read -r Row; do ... done <"$Vfile"
. При этом будет считываться по строке за раз. Вместо того чтобы хранить весь файл, вы можете хранить только строку за раз. Возможно, именно здесь вы столкнетесь с проблемами памяти.
Вместо VarCell=`echo $VarRow`
с последующим for Cell in $(echo $VarCell | sed "s/,/ / /g")
, просто сделайте VarCell="${VarRow//,/ }"
с последующим for Cell in $VarCell
(это кажется немного сомнительным, переменная без кавычек, содержащая входные данные, предложения по улучшению приветствуются)
Любой Когда вы хотите вывести длинную строку (несколько строк), используйте here-документ. Так вам дополнительно не придется беспокоиться об экранировании кавычек. echo
, который выводит данные переменной, я бы заменил на printf
со строкой формата с одинарными кавычками, за которой следуют расширения переменной с двойными кавычками. Например: echo "
" меняется на
printf '
\n' "$VFile". См. раздел "Почему printf лучше, чем echo?".
Теги
Похожие вопросы