SDB:Установка нескольких мониторов
Рекомендуемые статьи
Связанные статьи
Ноутбуки с технологией Optimus состоят из двух видеокарт: интегрированной Intel и дискретной NVIDIA. В зависимости от специфики оборудования в BIOS могут быть выбраны следующие активные графические карты: интегрированная (только Intel), дискретная (только NVIDIA), или Optimus (обе карты включены). Если порт (DisplayPort / HDMI / VGA) соединен с чипом Intel, то вам ничего особенного делать не нужно, чтобы использовать внешний монитор.
Если же порт подключен к графической карте NVIDIA, то монитор может быть использован в качестве дополнительного (для запуска приложений без рабочего стола) или для запуска полного рабочего стола (изображение на дисплее ноутбука - >Intel LVDS отсутствует).
Начало работы с чипом 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
Рабочий стол на внешнем мониторе
При получении рабочего стола на внешнем мониторе карты 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
/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
Далее будет рассмотрена возможность запуска 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:
Установка до трех экранов
Создайте рабочий/проверенный файл конфигурации 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
Эта статья актуальна для версии '12.3', которая теперь является устаревшей! Пожалуйста, обратитесь к странице обсуждения этой статьи для получения подробной информации. |
Расширенный рабочий стол
Первым делом вы должны создать аккаунт 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)
Поиск и устранение неисправностей
...