Как написать скрипт bash для настройки моих дисплеев, когда HDMI подключен или отключен

8

У меня есть ноутбук под управлением Kubuntu Precise (12.04), который я иногда использую для просмотра видео. Когда я это делаю, я подключаю кабель HDMI, подключенный к A / V-ресиверу с подключенным монитором HDMI.

Когда я смотрю видео таким образом, мне все равно нужно использовать дисплей ноутбука, когда я взаимодействую с системой, для управления воспроизведением и т. Д. Текст на мониторе HDMI трудно прочитать с того места, где я сижу.

Когда я подключаю кабель HDMI, Kubuntu обнаруживает его, но мне нужно пройти через странную танцевальную последовательность (которая работает, но извилистая), чтобы каждый раз правильно настраивать его для видео и аудио. Чтобы это исправить, я пытаюсь написать bash-скрипт, xrandrчтобы сделать это правильно с первого раза.

Я получил основную идею от ответа Peoro на этот вопрос и ответ U & L под названием: Инструмент для автоматического применения конфигурации RandR, когда подключен внешний дисплей .

О моем сценарии

Мой скрипт (включен ниже) работает, но нуждается в улучшении.

Он правильно устанавливает режим видео для монитора HDMI, но монитор LVDS1 (на ноутбуке) меняет отображение только на верхнюю левую часть рабочего стола, что является проблемой, поскольку он обрезает полосы прокрутки окна справа и панель задач на дно.

Я попытался исправить это с помощью --scale, но моя первая попытка испортила все настолько, что мне пришлось перезагрузиться, чтобы вернуться к работающему дисплею.

Есть ли способ сделать так, чтобы на обоих дисплеях отображался один и тот же контент, но каждый из них использовал свое собственное предпочтительное разрешение?

Или, по крайней мере, способ настроить дисплей ноутбука таким образом, чтобы весь рабочий стол оставался доступным при использовании дисплея HDMI?

Поскольку я отлаживаю скрипт, он еще не очищен. Я могу захотеть сделать это позже.

Мой сценарий

#!/bin/bash
## hdmi_set
## Copyleft 11/13/2013 JPmicrosystems
## Adapted from
## /unix/4489/a-tool-for-automatically-applying-randr-configuration-when-external-display-is-p
## Answer by peoro

# setting up new mode for my VGA
##xrandr --newmode "1920x1080" 148.5 1920 2008 2052 2200 1080 1089 1095 1125 +hsync +vsync
##xrandr --addmode VGA1 1920x1080

##source $HOME/bin/bash_trace
# default monitor is LVDS1
MONITOR=LVDS1

# functions to switch from LVDS1 to HDMI and vice versa
function ActivateHDMI {
    echo "Switching to HDMI"
    ##xrandr --output HDMI1 --mode 1920x1080 --dpi 160 --output LVDS1 --off
    ##xrandr --output HDMI1 --same-as LVDS1
    xrandr --output HDMI1 --mode 1920x1080
    xrandr --output LVDS1 --mode 1366x768
    MONITOR=HDMI1
}
function DeactivateHDMI {
    echo "Switching to LVDS1"
    xrandr --output HDMI1 --off --output LVDS1 --auto
    MONITOR=LVDS1
}

# functions to check if VGA is connected and in use
function HDMIActive {
    [ $MONITOR = "HDMI1" ]
}
function HDMIConnected {
    ! xrandr | grep "^HDMI1" | grep disconnected
}

## MONITOR doesn't do anything because it's not preserved between script executions
# actual script
##while true
##do
    if HDMIConnected
    then
        ActivateHDMI
    fi

    if ! HDMIConnected
    then
        DeactivateHDMI
    fi

    ##sleep 1s
##done

Вывод из xrandr

Вот что видит xrandr:

bigbird@ramdass:~$ xrandr
Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192
LVDS1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 194mm
   1366x768       60.0*+
   1360x768       59.8     60.0  
   1024x768       60.0  
   800x600        60.3     56.2  
   640x480        59.9  
VGA1 disconnected (normal left inverted right x axis y axis)
HDMI1 connected (normal left inverted right x axis y axis)
   1920x1080      60.0 +
   1680x1050      60.0  
   1280x1024      60.0  
   1440x900       59.9  
   1280x720       60.0  
   1024x768       60.0  
   800x600        60.3  
   720x480        59.9  
   640x480        60.0  
   720x400        70.1  
DP1 disconnected (normal left inverted right x axis y axis)
Джо
источник

Ответы:

3

Вы, вероятно, должны просто использовать вместо kscreen , который должен решить все ваши проблемы. Он запомнит настройки ранее подключенного экрана и восстановит их после повторного подключения.

Если у вас все еще есть такие проблемы, когда вы все еще используете kscreen, это должно стоить сообщения об ошибке .

Поскольку Kubuntu 12.04 довольно старый, вам, вероятно, стоит взглянуть на это .

Элиас Пробст
источник
Святой молей! Это PPA дало мне 347 обновлений! Я не знаю, почему я не установил это раньше. И это до установки kscreen. Теперь, если он просто переключит звук (фонон) на HDMI и обратно ... Я вернусь сюда после завершения обновления и смогу протестировать kscreen.
Джо
Динамическое переключение звука работает довольно хорошо, если вы настраиваете приоритеты устройства в конфигурации Phonon.
Элиас Пробст
Kscreen полностью качается! Спасибо. Теперь мне просто нужно привыкнуть или исправить все остальное, что обновил ppa. Я вошел в «Системные настройки» -> «Мультимедиа» -> «Настройки аудио и видео» и переместил «Цифровое стереозвук встроенного звука» (HDMI) выше «Аналоговый стереозвук встроенного звука», но при подключении / отключении кабеля HDMI не происходит переключения звука. Что еще мне не хватает?
Джо
На какие приложения влияют / не переключают выход?
Элиас Пробст
Я только что обновился с Kubuntu 12.04 до 14.04.1. Я ждал комментариев, потому что надеялся, что это поможет, но ничего не изменилось. Я все еще должен переключать звук вручную. Я думаю, что я открою новый вопрос о SE Ask Ubuntu. Я не думаю, что аудио переключается. Я только что попробовал vlc, dragonplayer и amarok.
Джо