Есть двухголовая видеокарта NVidia, к одной голове привинчен монитор, ко второй — телевизор. Смысл — при желании показывать кино на телевизоре, а не на мониторе. При этом телевизор видится в системе просто как второй монитор, то есть на него растягивается рабочий стол и кино запускается в обычном плеере. Всё, что нужно — это активировать телевизор в настройках и включить его с пульта. Пультом мы управляем руками, а настройками — с компьютера. Способы достижения цели — тысячи их. У меня установлен проприетарный драйвер, который я считаю приемлемым. Итак.
Способ первый, самый простой и неинтересный. Запускаем каким-то образом от рута nvidia-settings, настраиваем два монитора, как больше нравится, сохраняем в xorg.conf и имеем телевизор постоянно активированным. Плюсы: один раз прокликал мышкой в гуёвой программе — и забыл обо всём вообще. Минусы: рабочий стол выходит за пределы видимой зоны (телевизор хоть и активен в настройках, но всё-таки выключен), в эту невидимую зону постоянно вылетают мышка, запускаемые программы и корзина с закрытыми вкладками у оперы.
Способ второй, поинтереснее. Настраиваем в гуёвине, как в первом способе, но один монитор, сохраняем xorg.conf. Дальше, при необходимости, запускаем nvidia-settings и на лету активируем телевизор, после чего можно смотреть кино на нём. Плюсы: телевизор не мешает обычной работе, активен только тогда, когда надо. Минусы: после активации телевизора рабочий стол на него не расширяется (или я не нашёл, как), лишние движения при каждой необходимости, плюс объяснить Маринке, что (а главное — почему) нужно сделать — слишком сложно.
Способ третий. Самый интересный в реализации, самый простой в использовании. nvidia-settings имеет возможность загрузить и применить настройки из указанного в параметрах командной строки файла конфигурации, не запуская при этом гуй. Можно настроить конфигурацию с двумя мониторами, сохранить её в отдельный конфиг, а потом при необходимости просто загрузить. Но есть проблема: таким образом можно менять параметры мониторов, но нельзя активировать или деактивировать монитор. Для этого нужно использовать утилитку Disper, которая написана на python и может сделать то, что нам надо. xorg.conf при этом настроен на двухмониторную конфигурацию, чтобы не наблюдать на телевизоре чёрный экран (смотри минусы второго способа). Итак, логика третьего способа:
- иксы стартуют, активируются оба монитора по настройкам из xorg.conf
- в автозапуске KDE прописан скрипт, который деактивирует телевизор
- на панели есть кнопка, которая активирует телевизор, можно нажать при необходимости.
- xorg.conf настроен по первому способу. Желательно использовать tweenview, потому что с xinerama не дружит то ли nvidia, то ли kde-4, то ли оба.
- Устанавливаем disper. Для этого в папке с исходниками запускаем make PREFIX=/home/user/usr/ и make install. Проверяем, что в папке /home/user/usr/bin появился исполняемый файл disper.
- Запускаем nvidia-settings и настраиваем двухмониторный режим по вкусу. Рекомендую установить в "X-server XVideo Settings" галочку "Sync to VBlank", и там же выбрать свой телевизор в "Sync to this display device" — это чтобы не было теаринга (tearing, для этого ещё надо выбрать в mplayer'е вывод -vo xv). Выходим из программы настройки и копируем файл ~/.nvidia-settings-rc в надёжное место.
- Запускаем nvidia-settings -q EnabledDisplays и запоминаем, какое значение параметра соответствует активированному монитору.
- Запускаем /home/user/usr/bin/disper -e. Он напишет в ответ несколько строк, которые и будут являться двухмониторной конфигурацией. Он может принимать эти строки на стандартный ввод, поэтому сохраняем их в надёжное место.
- Теперь запускаем nvidia-settings ещё раз, деактивируем телевизор и настраиваем одномониторную конфигурацию. Сохраняем конфиг рядом с предыдущим.
- Запускаем nvidia-settings -q EnabledDisplays и запоминаем, какое значение параметра соответствует деактивированному монитору.
- Повторяем процедуру с disper -e, понимая, что на этот раз мы сохраняем одномониторную конфигурацию.
- Пишем скрипт. В моём случае, это три скрипта: один, чтобы включить двухмониторную конфигурацию (врубить телек), второй — чтобы включить одномониторную конфигурацию (вырубить телек), третий, добровольный —
чтобы управлять ими всемисам определяет врубить или вырубить телевизор. - Дальше добавляем в автозапуск программу — тот скрипт, который вырубает телек. Большую часть времени мы даже не вспоминаем о том, что у нас подключен телевизор. Автозапуск удобно настраивается в systemsettings.
- Добавляем в K-меню новую программу — скрипт, который активирует телевизор. Вытаскиваем её на панель. Теперь объяснить Маринке, что и почему нужно сделать, чтобы посмотреть кино на телеке, просто: нужно просто нажать на кнопку на панели.
- В .bashrc можно прописать alias, что-то вроде alias movie_on_tv='/home/combine/bin/useTV && mplayer -vo xv -xineramascreen 1 -fs' и запускать movie_on_tv /porn/hdtv.mkv. Да, если xinerama не используется, нужный параметр mplayer'а называется всё равно xineramascreen.
#!/bin/bash echo "backend: nvidia associated displays: DFP-0, DFP-1 metamode: DFP-0: 1680x1050 @1680x1050 +0+0, DFP-1: nvidia-auto-select @1280x768 +1680+0 scaling: stretched, stretched" | /home/combine/usr/bin/disper -i nvidia-settings -l --config /home/combine/.two_monitors.nvrc rm /home/combine/.nvidia-settings-rc ln -s /home/combine/.two_monitors.nvrc /home/combine/.nvidia-settings-rcЧто в нём происходит: echo | disper — активирует телевизор. Текст мы уже получили из disper -e. Потом nvidia-settings подгружает из бережно сохранённого файла настройки для этой конфигурации. И на всякий случай делаем стандартный файл конфигурации симлинком на тот, в котором лежит текущая конфигурация. На случай, если захочется запустить гуй, например.
Следующий скрипт вырубает телек — его надо добавить в автозагрузку и, по желанию, тоже на панель. Можно заметить, как мало отличий от первого скрипта.
#!/bin/bash echo "backend: nvidia associated displays: DFP-0 metamode: DFP-0: 1680x1050 @1680x1050 +0+0 scaling: stretched" | /home/combine/usr/bin/disper -i nvidia-settings -l --config /home/combine/.one_monitor.nvrc rm /home/combine/.nvidia-settings-rc ln -s /home/combine/.one_monitor.nvrc /home/combine/.nvidia-settings-rcИ вот универсальный вариант: можно и в автозагрузку, и на панель, а первые два выкинуть нафиг. Работает, между прочим, точно так же.
#!/bin/bash if nvidia-settings -q EnabledDisplays | grep '0x00030000' ### If TV is active then disable it then echo "backend: nvidia associated displays: DFP-0 metamode: DFP-0: 1680x1050 @1680x1050 +0+0 scaling: stretched" | /home/combine/usr/bin/disper -i nvidia-settings -l --config /home/combine/.one_monitor.nvrc rm /home/combine/.nvidia-settings-rc ln -s /home/combine/.one_monitor.nvrc /home/combine/.nvidia-settings-rc else ### TV is incative. Enable it. echo "backend: nvidia associated displays: DFP-0, DFP-1 metamode: DFP-0: 1680x1050 @1680x1050 +0+0, DFP-1: nvidia-auto-select @1280x768 +1680+0 scaling: stretched, stretched" | /home/combine/usr/bin/disper -i nvidia-settings -l --config /home/combine/.two_monitors.nvrc rm /home/combine/.nvidia-settings-rc ln -s /home/combine/.two_monitors.nvrc /home/combine/.nvidia-settings-rc fiХочу ещё раз обратить внимание на то, что нужно заменить соответствующие части скрипта на свои. Это важно. Если попёрли ошибки, например, если запустить disper с неправильными параметрами — перезапуск исков не поможет, можно смело ребутаться. Кернел паников и зависаний у меня при проделывании всего описанного не возникло, но если ты забудешь подставить свои параметры вместо моих — даже не надейся, что всё будет в порядке.
Комментариев нет:
Отправить комментарий