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

Каждый раз, когда я включаю свой ноутбук и подключаю внешний монитор через HDMI, мне нужно переходить к настройкам дисплея, чтобы изменить настройки по умолчанию. При запуске я получаю дублированный экран вместо расширенного экрана, который я хочу. Я также получаю свой внешний монитор справа, когда я всегда ставлю его слева. Как сделать так, чтобы по умолчанию он оставался расширенным и слева? Да, я всегда ставлю "применить" и "сохранить эту конфигурацию", но, кажется, сбрасывается при запуске.

xrandr выход с монитора настроен именно так, как я хочу:

Screen 0: minimum 8 x 8, current 3520 x 1080, maximum 32767 x 32767
LVDS1 connected primary 1600x900+1920+180 (normal left inverted right x axis y axis) 382mm x 215mm
   1600x900      60.01*+  40.03  
   1440x900      59.89  
   1368x768      60.00  
   1360x768      59.80    59.96  
   1152x864      60.00  
   1280x720      60.00  
   1024x768      60.00  
   1024x576      60.00  
   960x540       60.00  
   800x600       60.32    56.25  
   864x486       60.00  
   800x450       60.00  
   640x480       59.94  
   720x405       60.00  
   640x360       60.00  
DP1 disconnected (normal left inverted right x axis y axis)
DP2 disconnected (normal left inverted right x axis y axis)
DP3 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
HDMI3 disconnected (normal left inverted right x axis y axis)
VGA1 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
DP-1-4 disconnected
HDMI-1-4 disconnected
HDMI-1-5 connected 1920x1080+0+0 510mm x 287mm
   1920x1080     60.00*+  50.00    59.94  
   1920x1080i    60.00    50.00    59.94  
   1280x1024     75.02    60.02  
   1280x960      60.00  
   1280x800      59.91  
   1152x864      75.00  
   1280x720      60.00    50.00    59.94  
   1024x768      75.08    70.07    60.00  
   832x624       74.55  
   800x600       72.19    75.00    60.32    56.25  
   720x576       50.00  
   720x480       60.00    59.94  
   640x480       75.00    72.81    66.67    60.00    59.94  
   720x400       70.08  
  1024x768 (0x55) 65.000MHz -HSync -VSync
        h: width  1024 start 1048 end 1184 total 1344 skew    0 clock  48.36KHz
        v: height  768 start  771 end  777 total  806           clock  60.00Hz
  800x600 (0x59) 40.000MHz +HSync +VSync
        h: width   800 start  840 end  968 total 1056 skew    0 clock  37.88KHz
        v: height  600 start  601 end  605 total  628           clock  60.32Hz
  800x600 (0x5a) 36.000MHz +HSync +VSync
        h: width   800 start  824 end  896 total 1024 skew    0 clock  35.16KHz
        v: height  600 start  601 end  603 total  625           clock  56.25Hz
  640x480 (0x62) 25.175MHz -HSync -VSync
        h: width   640 start  656 end  752 total  800 skew    0 clock  31.47KHz
        v: height  480 start  490 end  492 total  525           clock  59.94Hz

1 ответ

Работа вокруг

Разметка экрана, которая не прилипает, часто происходит, когда графический драйвер и экран не взаимодействуют в достаточной степени. Однако это не означает, что нет решения.

Команда, чтобы сделать ваши настройки, как вы хотите, это (если я не ошибся или опечатка):

xrandr --output HDMI-1-5 --pos 0x0 --output LVDS1 --pos 1920x180

ПОЧЕМУ это команда, чтобы сделать это, объясняется здесь.

Как пользоваться

Вы можете использовать эту команду двумя способами:

1. Ручная версия (ярлык)

Добавьте его к клавише быстрого доступа, чтобы нажать ее после подключения второго экрана: выберите: "Системные настройки" > "Клавиатура" > "Ярлыки" > "Пользовательские ярлыки". Нажмите "+" и добавьте команду:

xrandr --output HDMI-1-5 --pos 0x0 --output LVDS1 --pos 1920x180

2. Автоматическая версия

Запустите эту команду автоматически, если подключен второй экран:

  • Скопируйте приведенный ниже скрипт в пустой файл и сохраните его как set_screen.py

    #!/usr/bin/env python3
    import subprocess
    import time
    
    def numscreens():
        scrdata = subprocess.check_output("xrandr").decode("utf-8").splitlines()
        return len([l for l in scrdata if " connected" in l])
    
    nscr1 = None
    
    while True:
        time.sleep(5)
        nscr2 = numscreens()
        if nscr2 != nscr1:
            if nscr2 == 2:
                subprocess.Popen(["xrandr", "--output", "HDMI-1-5", "--pos", "0x0",
                                  "--output", "LVDS1", "--pos", "1920x180"])
        nscr1 = nscr2
    
  • Тестовый запуск скрипта, запустив его из терминала:

    python3 /path/to/set_screen.py
    
  • Если все работает нормально, добавьте его в Startup Applications: Dash > Startup Applications > Add. Добавьте команду:

    /bin/bash -c "sleep 30 && python3 /path/to/set_screen.py"
    
Другие вопросы по тегам