Добра всем )))
Только месяц, как перешёл на линукс и Mint Cianamon в частности ))) Всё нравиться )) Вот только, мы с женой периодически смотрим фильмы на ТВ, подключённом через HDMI. Так вот, хотелось бы сделать скриптик для python, который потом можно легко добавить в контекстное меню на рабочем столе по инструкции из этой темы:
viewtopic.php?t=741.
Пытался что-то наваять сам, но так как не имею опыта в программировании, да и с линуксом пока знаком шапошно, то, конечно же, ничего не вышло ))) Понял только, что экраном можно управлять через
xrandr
, по звуку ещё толком не разобрался ))
Имеем: основной монитор и ТВ, подключённое по HDMI. ТВ находиться слева от монитора - это важно, так как по дефолту, при включении, он почему-то всегда становиться справа от основного, хотя в прошлый раз я его перетягивал на левую сторону от основного. Ещё, звук тоже нужно переключать с колонок от компа, на динамики ТВ. А в Cianamon для этого нужно много движений лишних - не удобно.
Так вот,
требования к скрипту:
-
включение/выключение ТВ и, если ТВ включается, то звук перекидывается на канал HDMI, а если отключается, то, соответственно, звук возвращается обратно на динамики компа.
Я так понимаю, скрипт должен проводить проверку состояния HDMI и если он отключён, то должен его включить и вместе с ним так же переключить звук на HDMI; если ТВ включён, то при выполнении, скрипт должен выключить его и переключить звук обратно на динамики компьютера.
Если кто-нибудь возьмётся помочь, то прошу ещё написать комментарии в коде, хочу попробовать разобраться потом что к чему и иметь возможность поправить в нём что-то сам ))))
Заранее спасибо откликнувшимся ))))
P.S. Мне то в принципе не тяжело всё это делать, но вот жена не довольна, я и так её три месяца уламывал с винды соскочить ))) А так, добавлю скрипт этот в менюшку, раз нажал и оп-ля, всё включено, нажал опять, всё выключено, красота )))
Решение
SATORY_RA » 02 май 2017, 22:06
Всем спасибо, нашёл решение ))))
Код: Выделить всё
#!/bin/bash
MONIK="DVI-I-1"
TV="HDMI-0"
if (xrandr | grep "$TV" | cut -d ' ' -f 2- | grep "[0-9]")
then
xrandr --output $TV --off --output $MONIK --auto --primary
SINK=$(pacmd list-sinks|grep '[^*] index'|sed 's/.*: //')
pacmd set-default-sink "${SINK}"
pacmd list-sink-inputs |grep 'index: '|sed 's/\s*index: //'|while read -r x
do
pacmd move-sink-input "$x" "${SINK}";
done
else
xrandr --output $MONIK --auto --primary --output $TV --auto --left-of $MONIK
SINK1=$(pacmd list-sinks|grep '[^*] index'|sed 's/.*: //')
pacmd set-default-sink "${SINK1}"
pacmd list-sink-inputs |grep 'index: '|sed 's/\s*index: //'|while read -r y
do
pacmd move-sink-input "$y" "${SINK1}";
done
fi
Разъяснение по скрипту под спойлером - не стесняйтесь открывать))
По видео:
Для начала выполняем
xrandr
, затем, в зависимости от своего вывода правим параметры MONIK="DVI-I-1" и TV="HDMI-0", на то, что у вас есть.
Не по теме
К примеру, у меня, MONIK=DVI-I-1 - это мой монитор, а TV=HDMI-0 - это телевизор и он стоит слева от монитора.
Смотрим: скрипт xrandr | grep "$TV" | cut -d ' ' -f 2- | grep [0-9]
определяет, подключён ли телевизор и если да, то xrandr --output $TV --off
- отключает его, а монитор остаётся включённым --output $MONIK
в режиме автоподбора частоты и разрешения--auto
(обычно максимально возможные значения) --primary
- основным. Если же ТВ сейчас отключён, то xrandr --output $MONIK --auto --primary
- монитор остаётся в том же режиме, а ТВ подключается в режиме --output $TV --auto
-авто и --left-of $MONIK
- слева от моего монитора.
Пояснение по параметрам
xrandr
для того, что бы этот скрипт проще было адаптировать под себя:
статья об утилите для обзора и изменения режимов дисплея Xrandr
По звуку:
Главное, что бы перед запуском скрипта был включён нужный источник звука, потому что скрипт просто циклически меняет доступные sink.
Нашёл скрипт
здесь. Спасибо этому человеку )))
Сам скрипт по переключению звука по источникам:
Код: Выделить всё
#!/bin/bash
SINK=$(pacmd list-sinks|grep '[^*] index'|sed 's/.*: //')
pacmd set-default-sink ${SINK}
pacmd list-sink-inputs |grep 'index: '|sed 's/\s*index: //'|while read x
do
pacmd move-sink-input "$x" "${SINK}";
done
UPD. 10.05.17. Убрал лишние if..then..fi
UPD. 11.05.17. Исправил переключение звука - переключался только в одну сторону.
Добавление этого скрипта в
контекстное меню ФМ nemo (Пост SATORY_RA #15476) для переключения режимов на рабочем столе.
UPD. 22.05.19. Небольшая оптимизация кода для исключения возможных ошибок.
Перейти к ответу ➙