SDB:Установка нескольких мониторов

Перейти к: навигация, поиск

Проверено в openSUSE

Рекомендуемые статьи

Связанные статьи

Данное руководство предназначено только для использования технологии Optimus с помощью Bumblebee.
Внимание: В зависимости от конфигурации оборудование использование нескольких мониторов может быть невозможным. Обратитесь к технической документации аппаратной части вашего оборудования.

Ноутбуки с технологией Optimus состоят из двух видеокарт: интегрированной Intel и дискретной NVIDIA. В зависимости от специфики оборудования в BIOS могут быть выбраны следующие активные графические карты: интегрированная (только Intel), дискретная (только NVIDIA), или Optimus (обе карты включены). Если порт (DisplayPort / HDMI / VGA) соединен с чипом Intel, то вам ничего особенного делать не нужно, чтобы использовать внешний монитор.

Если же порт подключен к графической карте NVIDIA, то монитор может быть использован в качестве дополнительного (для запуска приложений без рабочего стола) или для запуска полного рабочего стола (изображение на дисплее ноутбука - >Intel LVDS отсутствует).

Optimus.jpg


Начало работы с чипом NVIDIA

Для того, чтобы использовать внешний монитор графической карты NVIDIA необходимо отключить управление питанием (dkms-bbswitch). Отредактируйте в файле конфигурации /etc/bumblebee/bumblebee.conf параметр PmMethod=auto на PmMethod=none (в 2-х местах).

Дополнительный экран

[Только проприетарный драйвер (blob)]. В /etc/bumblebee/bumblebee.conf измените параметр KeepUnusedXServer=false на KeepUnusedXServer=true, а также закомментируйте в файле /etc/bumblebee/xorg.conf.nvidia следующие строки: UseEDID и AutoAddDevices. Теперь запустите дополнительный X-сервер для внешнего монитора карты NVIDIA:

$ optirun true

Возможно перед запуском приложения на внешнем мониторе, необходимо указать путь до библиотек nvidia:

$ export DISPLAY=:8 LD_LIBRARY_PATH=/usr/lib64/nvidia:/usr/lib/nvidia:$LD_LIBRARY_PATH 

После вышеприведенных действий вы можете запустить приложение (без optirun), оно должно отображаться на внешнем мониторе.

В случае проблем обратись к журналу событий /var/log/Xorg.8.log

Рабочий стол на внешнем мониторе

Этот подраздел был проверен при подключенном внешнем мониторе к порту HDMI.

При получении рабочего стола на внешнем мониторе карты NVIDIA, изначально дисплей ноутбука не будет использоваться. Это связано с тем, что запуск основного X-сервера происходит через карточку NVIDIA, которая, в свою очередь, должна быть постоянно активной (см. выше для отключения PM). Кроме того, вы можете удалить bumblebee и установленного c ним драйвера nvidia (установите согласно этой инструкции) , в противном случае, необходимо указать путь до библиотек драйвера nvidia:

$ export LD_LIBRARY_PATH=/usr/lib64/nvidia:/usr/lib/nvidia:$LD_LIBRARY_PATH

Перед запуском X-сервера создайте файл /etc/X11/xorg.conf содержащий приблизительно следующие:

Section "ServerLayout"
    Identifier "layout"
    Screen 0 "nvidia"
    Inactive "intel"
EndSection

#Section "Files" 
#только для драйвера nvidia установленного не из официального репозитория
    ##Если 64-битная архитектура дистрибутива openSUSE
    #ModulePath "/usr/lib64/nvidia/xorg/" 
    #ModulePath "/usr/lib64/xorg/modules/updates" 
    #ModulePath "/usr/lib64/xorg/modules" 
    
    ##Если 32-битная архитектура дистрибутива openSUSE
    #ModulePath "/usr/lib/nvidia/xorg/" 
    #ModulePath "/usr/lib/xorg/modules/updates" 
    #ModulePath "/usr/lib/xorg/modules" 
#EndSection 

Section "Device"
    Identifier "nvidia"
    Driver  "nvidia"
    BusID "PCI:1:0:0"
    Option "UseDisplayDevice" "DFP-0"
EndSection

Section "Screen"
    Identifier "nvidia"
    Device "nvidia"
EndSection

Section "Device"
    Identifier "intel"
    Driver "intel"
EndSection

Section "Screen"
    Identifier "intel"
    Device "intel"
EndSection
  • где ModulePath — путь до загружаемых модулей X-сервером, при необходимости удалите комментарии " # " секции Section "Files" . Для более детального изучения обратитесь к странице руководства проприетарного драйвера nvidia. Данное руководство дает общее представление о библиотеках nvidia, не стоит принимать во внимание буквально все, например, наличие библиотек и символических ссылок могут располагаться по другим адресам, что и предусматривает наличие секции "Section "Files", по крайней мере, при указании путей "ModulePath" и "LD_LIBRARY_PATH" (см.выше) вам необходимо учесть следующие основные библиотеки: nvidia_drv.so, libwfb.so, libglx.so, libGL.so;
  • BusID — идентификатор шины BusID карты NVIDIA. Значение можно взять: из вывода команды lspci|grep -i vga или в журнале событий /var/log/Xorg.0.log;
  • UseDisplayDevice — список подключаемых дисплеев, назначаемых экрану Х-интерфейса. Измените DFP-0 на что-то другое, если это необходимо, например, CRT. Для дополнительной информации обратитесь к странице руководства NVIDIA, а также на страницу обсуждения Bumblebee-Project (англ.);

После создания файла xorg.conf, перезагрузитесь или перезапустите X-сессию:

# systemctl restart xdm.service
Внимание: Вы можете получить черный экран, из-за неправильной/недостаточной конфигурации файла xorg.conf. В этом случае переключитесь в другую виртуальную консоль с помощью комбинации клавиш Ctrl+Alt+F<цифра>, авторизуйтесь и остановите X-cервер: sudo systemctl stop xdm.service. Обратитесь за деталями журнала событий /var/log/Xorg.0.log.

Если же вы не можете войти ни в одну из виртуальных консолей, тогда загрузитесь в режиме восстановления, чтобы посмотреть предыдущий запуск X-cервера /var/log/Xorg.0.log.old.

Вы все-таки решили не продолжать дальнейшие эксперименты, тогда удалите файл конфигурации sudo rm -f /etc/X11/xorg.conf и перезагрузитесь.

После того, как на внешнем мониторе рабочий стол загружен , но вы все еще испытываете трудности, тогда проверьте приложение glxgears на использование библиотек драйвера nvidia:

$ ldd /usr/bin/glxgears

Чтобы запустить внутренний экран LVDS необходимо выполнить:

$ xrandr --setprovideroutputsource Intel NVIDIA-0

Запуск KDE на карте NVIDIA

Этот раздел подразумевает запуск рабочего стола на карте NVIDIA с возможностью отображения на портах(DisplayPort / HDMI / VGA) соединенных с чипом NVIDIA.

Далее будет рассмотрена возможность запуска KDE через менеджер входа в ситмему (KDM). Аналогичным образом можно запускать другое окружения рабочего стола (DE).

1. Добавьте в менеджер сессий файл со следующим содержанием:

sudo sh -c 'cat > /usr/share/xsessions/kde-primusrun.desktop <<  EOF
[Desktop Entry] 
Encoding=UTF-8 
Type=XSession 
Exec=/usr/local/bin/primus-kde 
TryExec=/usr/local/bin/primus-kde 
Name=KDE HDMI Enabled 
Comment=KDE Desktop Environment
EOF'
  • и сделайте его исполняемым:
sudo chmod a+x /usr/share/xsessions/kde-primusrun.desktop

2. Создайте файл правила запуска сеанса:

sudo sh -c 'cat > /usr/local/bin/primus-kde <<  EOF
#!/bin/bash
vblank_mode=0 /usr/bin/primusrun /usr/bin/startkde
EOF'
  • и сделайте его исполняемым:
sudo chmod a+x /usr/local/bin/primus-kde

3. Завершите текущий сеанс и в менеджере входа (KDM) выберите пункт "KDE HDMI Enabled" -> Войти.

Теперь можете проверить используемый драйвер:

glxinfo|grep -i opengl

В ответ вы должны увидеть что-то наподобие этого:

OpenGL vendor string: NVIDIA CorporationOpenGL renderer string: GeForce 610M/PCIe/SSE2
...
OpenGL version string: 4.3.0 NVIDIA 325.15
OpenGL shading language version string: 4.30 NVIDIA via Cg compiler
OpenGL extensions:

Установка до трех экранов

Внимание: Несмотря на то, что все два/три экрана находятся в использовании, вы не сможете перемещать окна между ними.
Этот раздел предполагает наличие внешней клавиатуры и мыши. В противном случае, управление устройствами ввода будет контролироваться обеими X-сессиями, также вы не сможете перемещать курсор мыши между экранами различных X-сессий.

Создайте рабочий/проверенный файл конфигурации xorg.conf для внешнего монитора карты NVIDIA, согласно вышеприведенному подразделу. Сохраните этот файл в любом месте, например, переименуйте:

# mv /etc/X11/xorg.conf /etc/X11/xorg.conf.test

Отредактируйте в файле /etc/bumblebee/bumblebee.conf следующие параметры на значения, как показано ниже:

VirtualDisplay=:8
Driver=nvidia
XorgConfFile=/etc/X11/xorg.conf.test
  • где XorgConfFile — раннее созданный файл конфигурации xorg, указывается в секции [driver-nvidia].

Далее вы должны выяснить, какие устройства ввода (клавиатура и мышь) внешние и внутренние. Это необходимо для того, чтобы отделить устройства ввода для различных X-сессий, в противном случае, устройства ввода будут управлять одновременно обеими X-сессиями.

Для просмотра списка устройств ввода выполните xinput --list, например, вы должны увидеть что-то вроде этого:

⎡ Virtual core pointer                          id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4	[slave  pointer  (2)]
⎜   ↳ USB Optical Mouse                         id=12	[slave  pointer  (2)]
⎜   ↳ AlpsPS/2 ALPS DualPoint TouchPad          id=15	[slave  pointer  (2)]
⎜   ↳ DualPoint Stick                           id=14	[slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3	[master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5	[slave  keyboard (3)]
    ↳ Power Button                              id=6	[slave  keyboard (3)]
    ↳ Video Bus                                 id=7	[slave  keyboard (3)]
    ↳ Video Bus                                 id=8	[slave  keyboard (3)]
    ↳ Power Button                              id=9	[slave  keyboard (3)]
    ↳ Sleep Button                              id=10	[slave  keyboard (3)]
    ↳ Dell Dell USB Keyboard                    id=11	[slave  keyboard (3)]
    ↳ Dell WMI hotkeys                          id=16	[slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=13	[slave  keyboard (3)]

В данном примере:

  • Внешняя: клавиатура "Dell Dell USB Keyboard" и мышь "USB Optical Mouse"
  • Внутренняя: клавиатура "AT Translated Set 2 keyboard" и устройства тачпада "AlpsPS/2 ALPS DualPoint TouchPad" и "DualPoint Stick"

Теперь, когда вы знаете имена устройств ввода, скопируйте нижеприведенный скрипт в текстовый редактор и отредактируйте, согласно полученной информации:

#! /bin/bash
#Запуск отдельной X-сессии, используя Optimus
#и для каждой X-сессии используются отдельные устройства ввода
 if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 1>&2
   exit 1
 fi
 
#Отключить внешние устройства ввода внутреннего экрана X-сервера
#Замените именами ваших внешних устройств ввода
 xinput disable "USB Optical Mouse"
 xinput disable "Dell Dell USB Keyboard"
 
#Сохранить текущую переменную DISPLAY
 ORIGDISPLAY=$DISPLAY
 
#Установить ID дисплея внешнего экрана X-сервера
 DISPLAY=':8'  
 
#Отключить внутренние устройства ввода
#Замените именами ваших внутренних устройств ввода
 xinput disable "AT Translated Set 2 keyboard"
 xinput disable "DualPoint Stick"
 
#Запустить другую X-сессию. Это пример для XFCE
#Возможные значения: startkde, gnome-session, startlxde
#Замените USERNAME вашим именем пользователя
 su -c xfce4-session USERNAME > /dev/null 2>&1
#(здесь этот сценарий приостанавливается, до окончания новой сессии)
 
#Вернуть переменную DISPLAY внутреннего экрана X-сервера
 DISPLAY=$ORIGDISPLAY
 
#Повторно включить внешние устройства ввода внутреннего экрана X-сервера
 xinput enable "USB Optical Mouse"
 xinput enable "Dell Dell USB Keyboard"

Сохраните скрипт, например "OptimusStart.sh" и сделайте его исполняемым (chmod +x OptimusStart.sh).

Теперь вы можете запустить скрипт с правами суперпользователя:

# optirun ./OptimusStart.sh
Icon-obsolete.png Эта статья актуальна для версии '12.3', которая теперь является устаревшей!
Пожалуйста, обратитесь к странице обсуждения этой статьи для получения подробной информации.

Расширенный рабочий стол

Этот подраздел подразумевает совместную работу мониторов карты Intel и NVIDIA (например, VGA + DisplayPort). Этот способ также подходит и для работы в режиме клона.
Внимание: Нижеприведенные действия требуют общего понятия о службе сборке пакетов. Вы также должны осознавать потенциальный риск того, что система не загрузится на карте Intel. В этом случае загрузитесь в режиме восстановления и переустановите драйвер intel из репозитория.

Первым делом вы должны создать аккаунт openSUSE, который понадобится в дальнейшем. Если же у вас уже есть аккаунт, тогда установите службу сборки osc, выполнив:

# zypper in osc

Создайте рабочий каталог проекта и загрузите исходники драйвера intel (openSUSE 12.3/12.2):

$ mkdir ~/build && cd ~/build
$ osc co openSUSE:$(lsb_release -d|cut -f2 -d" ") xf86-video-intel

Вам будет предложено ввести свой логин и пароль, и только после этого, начнется загрузка.

Теперь примените патч поддержки виртуального дисплея драйвера intel, для дальнейшего клонирования изображения на другой X-сервер, работающий на графической карте NVIDIA:

$ cd openSUSE:*/xf86-video-intel/ && tar xjf xf86-video-intel-*tar.bz2  
$ cd xf86-video-intel-*/
$ wget https://raw.github.com/liskin/patches/master/hacks/xserver-xorg-video-intel-2.20.14_virtual_crtc.patch
$ patch -p1 < xserver-xorg-video-intel-2.20.14_virtual_crtc.patch && cd ..
$ tar cjf xf86-video-intel*.tar.bz2 xf86-video-intel-[0-9].*
$ osc addremove && osc build

Установите собранный пакет и добавьте блокировку от дальнейших изменений в случае обновления.

# zypper in -f /var/tmp/build-root/home/abuild/rpmbuild/RPMS/*/xf86-video-intel-[0-9]*.rpm
# zypper al  xf86-video-intel

Далее вам нужно установить screenclone, который копирует виртуальный дисплей на внешний монитор карты NVIDIA.

$ git clone git://github.com/liskin/hybrid-screenclone.git
# zypper in gcc-c++ libXcursor-devel libXext-devel libXdamage-devel libXinerama-devel libXtst-devel
$ cd hybrid-screenclone
$ make
# cp screenclone /usr/bin/
# chmod +x /usr/bin/screenclone

Удалите, если такой имеется, файл конфигурации xorg:

# rm -f /etc/X11/xorg.conf 

Теперь настройте bumblebee, отредактировав файл конфигурации /etc/bumblebee/bumblebee.conf на значение параметров, как показано ниже:

KeepUnusedXServer=true
Driver=nvidia
PMMethod=none

Перезагрузитесь и подключите мониторы.

Теперь, если вы выполните xrandr, то должны увидеть в списке, как минимум два дисплея, один из которых будет виртуальным. Это указывает на то, что до этого момента все установлено верно.

Запустите дополнительный X-сервер, выполнив:

$ optirun true

Настройте виртуальный дисплей, выбрав разрешение и расположение внешнего экрана, например:

  • для двух экранов:
$ xrandr --output LVDS1 --auto --output VIRTUAL --mode 1440x900 --right-of LVDS1
  • для трех экранов:
$ xrandr --output LVDS1 --mode 1600x900 --output VGA1 --mode 1600x1200 --right-of LVDS1 \
--output VIRTUAL --mode 1600x1200 --right-of VGA1

Например, в первом случае, активизирует виртуальный экран на чипе intel с разрешением 1440x900, помещенным справа от внутреннего дисплея ноутбука (LVDS1).

Собственно клонирование содержимого виртуального дисплея на другой X-сервер, созданного с помощью bumblebee, например для второго случая (три монитора):

$ screenclone -d :8 -x 2
  • где -d — идентификатор X-сервера; -x — номер экрана xinerama, в данном случае, считая с нуля третий (LVDS1 -> VGA1 -> VIRTUAL / NVIDIA)

Поиск и устранение неисправностей

...