Подключение второго монитора или телевизора в Unity (Ubuntu 11.04/11.10)

  •   15.07.2011
  •   78 комментариев
  •   Ubuntu

Возникла у меня необходимость подключить в Ubuntu 11.04 второй монитор (к видеокарте производства Nvidia). Как оказалось, при активированной оболочке Unity это действо связано с некоторыми сложностями. В этой статье я расскажу о том, как мне удалось использовать эти сложности себе на пользу и успешно настроить работу второго монитора (превратить его в своеобразный медиа-центр), не переходя при этом на классический Gnome 2 (то есть оставаясь на Unity).

Подключение второго монитора или телевизора в Unity (Ubuntu 11.04/11.10)

Те же советы должны подойти и при подключении телевизора в качестве второго монитора, а также при подключении внешнего монитора к ноутбуку. И та же инструкция подходит для Ubuntu 11.10.

Итак, ниже привожу пошаговую инструкцию по настройке. Я везде говорю «второй монитор», однако при необходимости это словосочетание можно смело менять на «телевизор», инструкции будут те же.

1

Подключение монитора или телевизора

Вполне логично, что первое действие, которое нужно сделать — это физически подключить монитор (или телевизор) к вашей видеокарте. Естественно, на видеокарте должны присутствовать необходимые для этого разъемы. В моем случае это видеокарта Nvidia GF 8600GT, на которой присутствует два разъема — аналоговый (VGA) и цифровой (DVI).
К каждому из этих разъемов я и подсоединил по монитору.

Подключение монитора или телевизора
2

Выбор режима работы второго монитора

Надеюсь, проприетарные драйвера от Nvidia у вас уже установлены?
Если нет — первым делом установите их. Если да — откройте «NVIDIA X Server Settings» и активируйте второй монитор. После этого нужно выбрать режим работы второго монитора.

В режиме «TwinView» второй монитор становится продолжением первого, то есть рабочий стол увеличивается на размер второго монитора. Этот режим вполне сносно работает из коробки, и дополнительно настраивать его (даже в Unity) не нужно. Однако меня этот режим не устраивает по многим причинам. Например, если один человек работает на первом мониторе, а второй в это время смотрит фильм на втором, то при переключении на другой рабочий стол картинка меняется и на том мониторе, на котором смотрят фильм, что неприемлемо.

Другое дело — режим «Separate X screen». В этом режиме производится эмуляция запуска второго X-сервера. Знатоки утверждают, что реально вторые X-сы не стартуют, но это уже технические подробности, знать которые нам сейчас не обязательно. Итак, выбираем режим «Separate X screen» и сохраняем конфигурацию нажатием на кнопку «Save to X Configuration File». После этого появится диалог, где нам предложат ввести пароль админа и перезаписать файл «/etc/X11/xorg.conf». Перезаписываем.

Настройки Nvidia, режим Separate X screen

Перезагружаемся и видим странную картину — на первом дисплее загружена оболочка Unity, а вот на втором — голые X-ы. В этом можно убедиться, подвигав мышкой и перекинув курсор на второй дисплей — он превратится в крестик. Такой вот баг наблюдается, но немного поразмыслив, я решил, что его можно использовать в свою пользу.

3

Запуск на втором мониторе оконного менеджера

Запустить на втором мониторе еще одну Unity — задача нетривиальная. Но если мы хотим превратить его в подобие мультимедиа-центра, то нам это и не нужно. А вот запустить там оконный менеджер все же не помешает, иначе могут возникнуть сложности на следующих шагах.

У нас есть выбор как минимум из двух оконных менеджеров — «Compiz» и «Metacity». Я выбрал Metacity, поскольку, во-первых, Compiz иногда ведет себя неадекватно, а во-вторых — Metacity гораздо легче, а эффекты Компиза нам все равно не понадобятся.

Запустить Metacity на втором мониторе очень просто, для этого достаточно выполнить в консоли команду:

DISPLAY=:0.1 metacity

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

Убедиться в том, что Metacity действительно запустился, можно по курсору, который теперь превратится из ужасного крестика в элегантную стрелочку 🙂
Мало того, теперь на втором мониторе мы даже можем переключаться между рабочими столами, используя для этого соответствующие комбинации клавиш.

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

#! /bin/bash
DISPLAY=:0.1 metacity

Сохраните этот файл под любым именем в любом месте на диске, после чего сделайте его исполняемым и пропишите в автозагрузку при помощи системного диалога «Автоматически запускаемые приложения».

4

Настройка переключения между мониторами посредством клавиатуры

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

Но прежде отключим переключение мышью. Для этого я открыл под рутом в текстовом редакторе файл /etc/X11/xorg.conf и добавил к координатам второго монитора сотню пикселей, чтобы разделить мониторы между собой.

Вот пример соответствующей секции из моего xorg.conf:

Section        "ServerLayout"
Identifier     "Layout0"
Screen         0  "Screen0" 0 0
Screen      1  "Screen1" Relative "Screen0" 1380 0
InputDevice    "Keyboard0" "CoreKeyboard"
InputDevice    "Mouse0" "CorePointer"
Option         "Xinerama" "0"
EndSection

Если теперь перезагрузиться, то мы увидим, что добраться курсором мыши до второго монитора уже нельзя. Как же на него переключаться? В этом нам поможет утилита Switchscreen. Скачайте и распакуйте ее. После этого перейдите в консоли в каталог «switchscreen-0.1.1» (командой cd) и выполните последовательно следующие три команды:

make
sudo cp togglescreen.sh /usr/local/bin/
sudo cp switchscreen /usr/local/bin/

Утилита установлена, и следующее, что нужно сделать — это назначить клавиатурную комбинацию для переключения между столами. Для этого откройте системный диалог «Комбинации клавиш клавиатуры», нажмите на кнопку «Добавить», в поле «Название» впишите «Переключение между экранами», а в поле «команда» — /usr/local/bin/togglescreen.sh. После этого назначьте удобную для вас комбинацию клавиш (у меня это Ctrl+Super+Enter).
Понажимайте эту комбинацию, и если вы все сделали правильно, то при этом вы будете переключаться между дисплеями.

Настройка переключения между мониторами посредством клавиатуры
5

Выбор медиа-центра для отображения на втором экране

Я могу порекомендовать как минимум два медиа-центра для Linux, которые обладают широчайшим функционалом — позволяют просматривать видео, изображения, слушать музыку, причем не только с диска, но и используя интернет-сервисы. Также они изобилуют дополнительными мелкими функциями, например отображают погоду в вашем городе. Речь идет о XBMC (update: теперь он называется Kodi) и Boxee.

Какой из этих двух медиа-центров выбрать — дело ваше, могу только сказать, что XMBC немного проще и лучше русифицирован, а Boxee больше ориентирован на различные социальные фишки, и требует для полноценной работы регистрации на сервисе и в некоторых сопутствующих сервисах.

В конце концов, если ничего кроме просмотра видео вам не нужно, вы можете выводить на втором мониторе не навороченный медиа-центр, а любой проигрыватель, например VLC или SMPlayer.

Update (июль 2017)

Судя по всему, Boxee продался Samsung-у, и теперь из двух предложенных вариантов остался только XBMC, вернее Kodi.

6

Настройка отображения медиа-центра в полноэкранном режиме

При запуске любого из указанных медиа-центров (XBMC или Boxee) на втором мониторе возникает еще одна проблема. При запуске в полноэкранном режиме каждый из этих медиа-центров блокирует на себя клавиатуру и мышь, соответственно переключиться на первый экран возможности нет до тех пор, пока не будет завершена работа медиа-центра. Если же запускать программу в оконном режиме, то она запускается в маленьком окошке, да еще и с ненужным в этом случае оформлением окна. Поэтому мы пойдем на хитрость — создадим скрипт, который будет запускать медиа-центр в оконном режиме, но при этом будет скрывать оформление окна и растягивать его на весь экран.

Для начала установите пакет «wmctrl» (если он у вас еще не установлен):

sudo apt-get install wmctrl

Вот пример скрипта для запуска XMBC:

#!/bin/bash
# Launch XBMC in windowed mode, then use wmctrl to remove the titlebar

# Select display 1
DISPLAY=:0.1

# Start XBMC without blocking this script
xbmc & 

# Wait for the XBMC window to appear
status=0
while [ $status -eq 0 ]
do
sleep 1
status=`wmctrl -x -l | grep "XBMC Media Center" | wc -l | awk '{print $1}'`
done

# Force XBMC window to fullscreen
wmctrl -x -r XBMC Media Center.XBMC Media Center -b toggle,fullscreen

Этот скрипт нужно при помощи текстового редактора сохранить в файл и сделать этот файл исполняемым. При его запуске XBMC будет запускаться на втором мониторе на полный экран, но при этом легко можно будет вернуть фокус на первый монитор.

Дальнейшие действия зависят от ваших потребностей — можно добавить ярлык запуска скрипта в главное меню, можно повесить кнопку запуска на панели Unity, а можно прописать его в автозагрузку, если вы хотите, чтобы медиа-центр запускался на втором мониторе автоматически при загрузке системы.

Точно такой же скрипт можно сделать для запуска Boxee:

#!/bin/bash
# Launch Boxee in windowed mode, then use wmctrl to remove the titlebar

# Select display 1
DISPLAY=:0.1

# Start Boxee without blocking this script
/opt/boxee/run-boxee-desktop &

# Wait for the Boxee window to appear
status=0
while [ $status -eq 0 ]
do
sleep 1
status=`wmctrl -x -l | grep "Boxee" | wc -l | awk '{print $1}'`
done

# Force Boxee window to fullscreen
wmctrl -x -r Boxee.Boxee -b toggle,fullscreen

Естественно, скрипт можно модифицировать на свое усмотрение.
Вот пример модифицированного скрипта для запуска Boxee:

#! /bin/bash
# runs xbmc in a normal window, in Screen 1 (TV)
# then it brings it up to full screen
# this is to avoid xbmc trapping the mouse
STATUS=0
WINCLASS=Boxee.Boxee
DISPLAY=:0.1
SLEEPDELAY=3
# disable screensaver
gnome-screensaver-command -i &
/opt/boxee/run-boxee-desktop &
while [ $STATUS -eq 0 ]
do
sleep $SLEEPDELAY
STATUS=`wmctrl -x -l | grep $WINCLASS | wc -l | awk '{print $1}'`
done
wmctrl -x -r $WINCLASS -b toggle,fullscreen &
sleep 3
/usr/local/bin/switchscreen 0 &

Вот и все, наслаждайтесь! 🙂
Если что-то непонятно, или хотите что-то добавить — пишите пожалуйста в комментарии.