The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Подключение нескольких мониторов к Linux через USB-адаптеры Displaylink
Ниже описан процесс организации второго рабочего места в Debian/Ubuntu Linux,
подключив к компьютеру USB-хаб к которому подключены дополнительные клавиатура,
мышь и монитор (через USB2VGA переходник Displaylink).

1. Устанавливаем framebuffer-драйвер для адаптера DisplayLink:

Драйвер udlfb включен в состав staging-ветки ядра 2.6.32, но мы будем
использовать последний срез исходных текстов из Git-репозитория:

   sudo apt-get install module-assistant
   sudo module-assistant prepare
   git clone http://git.plugable.com/webdav/udlfb/
   cd udlfb
   make
   sudo make install
   sudo depmod -a

Если драйвер установлен и загружен корректно, то при подключении монитора через
адаптер DisplayLinkNow, на мониторе будет отображен "зеленый экран".

2. Устанавливаем X-драйвер для DisplayLink:

   sudo apt-get install pkg-config xorg-dev
   cd ~git
   git clone http://git.plugable.com/webdav/xf-video-udlfb/
   cd xf-video-udlfb
   ./configure
   make
   sudo make install

Далее следует поправить несколько файлов конфигурации и скриптов, примеры можно
загрузить из Git-репозитория проекта udlfb:

   git clone http://git.plugable.com/webdav/misc-udlfb/

3. Правим скрипты udev

Создаем с правами root файл /lib/udev/rules.d/50-usbseat.rules 

   # set all DisplayLink devices to configuration 1
   # see http://libdlo.freedesktop.org/wiki/DeviceQuirks for more info
   ATTR{idVendor}=="17e9", ATTR{bConfigurationValue}=="2", RUN="/bin/echo 1 > /sys%p/bConfigurationValue"
 
   # aliases for display, kbd, mouse attached to specific hubs
   KERNEL=="fb*",SUBSYSTEMS=="usb",PROGRAM="/bin/cat /sys/%p/../../../devnum",
       SYMLINK+="usbseat/%c/display",RUN+="usbseat.sh %c"
   KERNEL=="mouse*", SUBSYSTEMS=="usb", ATTRS{bInterfaceClass}=="03",
       ATTRS{bInterfaceProtocol}=="02", PROGRAM="/bin/cat /sys/%p/../../../../../../devnum",
       SYMLINK+="usbseat/%c/mouse",RUN+="usbseat.sh %c"
   KERNEL=="event*", SUBSYSTEM=="input", ATTRS{bInterfaceClass}=="03", 
      ATTRS{bInterfaceProtocol}=="01",PROGRAM="/bin/cat /sys/%p/../../../../../../devnum",
      SYMLINK+="usbseat/%c/keyboard",RUN+="usbseat.sh %c"


Данный скрипт будет запущен автоматически в момент подключения USB-устройства;

4. Создаем скрипт /lib/udev/usbseat.sh:

   #!/bin/bash
   # takes the "seat number" as parameter $1
   # the seat number is the kernel device id of the hub the seat's  devices are sitting off of
   # called once for every usb device that MIGHT be part of a seat, when they arrive or remove 
 
   if [[ !(-n `/bin/pidof gdm`) ]]; then
       exit 0
   fi
 
   seat_running=`/usr/bin/gdmdynamic -l | /bin/sed -n -e "/:$1,/p"`
 
   # $ACTION environment variable is set by udev subsystem
   case "$ACTION" in
	'remove')
		if [[ -n "{$seat_running}" ]]; then
			/usr/bin/gdmdynamic -v -d $1
		fi
		;;
	*)
                # A device which might be part of a seat has been added
 
		# if we already have a running seat for this #, exit
		if [[ -n "${seat_running}" ]]; then
			exit 0
		fi
                if [[ -e /dev/usbseat/$1/keyboard && -e /dev/usbseat/$1/mouse && \
                      -e /dev/usbseat/$1/display ]]; then
 
			# We have a newly complete seat. Start it.
			TMPFILE=`/bin/mktemp` || exit 1
			/bin/sed "s/%ID_SEAT%/$1/g" < /lib/udev/usbseat-xf86.conf.sed > $TMPFILE
			/usr/bin/gdmdynamic -v -t 2 -s 1 -a \
   "$1=/usr/X11R6/bin/X -br :$1 -audit 0 -nolisten tcp -novtswitch -sharevts -config $TMPFILE"
			/usr/bin/gdmdynamic -v -r $1
		fi
		;;
   esac
 
   exit 0

5. Создаем файл конфигурации для X-сервера:

Создаем файл  /lib/udev/usbseat-xf86.conf.sed:
 
   Section "ServerFlags"
	Option	"AutoEnableDevices"	"false"
	Option	"AutoAddDevices"	"false"
	Option  "DefaultLayout"		"seat"
	Option	"DontZoom"		"true"
	Option	"DontZap"		"true"
	Option	"AllowMouseOpenFail"	"yes"
   EndSection
 
   Section "Module"
	Load "ddc"
   EndSection
 
   Section "Files"
                                        
    ModulePath      "/usr/lib/xorg/modules"
    ModulePath      "/usr/local/lib/xorg/modules"
   EndSection
 
   Section "Device"
	Identifier "dl"
	driver	   "displaylink"
	Option "fbdev"	"/dev/usbseat/%ID_SEAT%/display"
   EndSection
 
   Section "InputDevice"
	Identifier "keyboard"
	Driver	"evdev"
	Option	"CoreKeyboard"
	Option	"Device"	"/dev/usbseat/%ID_SEAT%/keyboard"
	Option	"XkbModel"	"evdev"
	Option	"XkbLayout"	"us"
   EndSection
 
   Section "InputDevice"
	Identifier "mouse"
	Driver	"mouse"
	Option	"CorePointer"
	Option	"Protocol" "auto"
	Option	"Device"	"/dev/usbseat/%ID_SEAT%/mouse"
        Option  "Buttons" "5"
	Option	"ZAxisMapping" "4 5"
   EndSection
 
   Section "Monitor"
	Identifier "monitor"
   EndSection
 
   Section "Screen"
	Identifier "screen"
	Device "dl"
	Monitor "monitor"
   EndSection
 
   Section "ServerLayout"
	Identifier "seat"
	Screen	0 "screen" 0 0 
	InputDevice "keyboard" "CoreKeyboard"
	InputDevice "mouse" "CorePointer"
   EndSection

6. Запрещаем загрузку модуля ядра fbcon чтобы избежать конфликта при работе
Devicelink через framebuffer.

Создаем /etc/modprobe.d/fbcon.conf 

   blacklist font
   blacklist tileblit
   blacklist bitblit
   blacklist fbcon

7. Обходной путь для решения проблемы с некорректным позиционированием экрана
Добавляем в /etc/gdm/Init/Default после упоминания gdmwhich() вызов xrand для
установки нормальной ориентации экрана

   XRANDR=`gdmwhich xrandr`
   if [ "x$XRANDR" != "x" ]; then
     $XRANDR -o 0
   fi

8. В /etc/rc.local добавляем код для проверки подключения usb-терминала:


   oldIFS=$IFS
   IFS=/
   for seat in /dev/usbseat/*; do
	set $seat
	/lib/udev/usbseat.sh $4
   done
   IFS=$oldIFS

9. Правка /etc/init.d/gdm для использования разных конфигурация для работы с
несколькими X-серверами:

Добавляем в /etc/init.d/gdm после секции "Allow cdd to override the config"
(примерно в районе 35 строки):

   # При наличии конфигурации для usb монитора подключаем отдельную конфигурацию
   if [ -f /etc/gdm/gdm-usbseat.conf ]; then
      for usbseat in /dev/usbseat/*; do
	seatid=${usbseat##*/}
	if [ -e "/dev/usbseat/$seatid/keyboard" -a \
             -e "/dev/usbseat/$seatid/mouse" -a -e "/dev/usbseat/$seatid/display" ]; then
	   CONFIG_FILE="--config=/etc/gdm/gdm-usbseat.conf"
	fi
	done 
   fi

10. Создаем файл конфигурации /etc/gdm/gdm-usbseat.conf, который будет
использован вместо gdm.conf для монитора, подключенного через USB-переходник:

   [daemon]
   DynamicXServers=true
   FlexibleXServers=0
   Greeter=/usr/lib/gdm/gdmgreeter
 
   [security]
 
   [xdmcp]
  
   [gui]
 
   [greeter]
 
   [chooser]
 
   [debug]
 
   [servers]
   0=inactive

После внесения вышеуказанных изменений при подключении монитора через USB на
нем должно появиться приглашение для входа в систему
 
17.02.2010 , Источник: http://plugable.com/2009/11/16/sett...
Ключи: multiseat, usb, keyboard, displaylink, monitor, xorg / Лицензия: CC-BY
Раздел:    Корень / Пользователю / X Window

Обсуждение [ RSS ]
  • 1.1, Veter (??), 11:35, 20/02/2010 [ответить]  
  • +/
    Самого интересного нет - какое качество картинки? Стоит ли оно вообще того...
     
     
  • 2.2, Serg11 (??), 10:14, 22/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    в описании к устройству параметры однако неплохие
    http://www.nix.ru/autocatalog/adapters_switches/TRENDnet_TU2DVIV_USB_to_DVI_V
     
  • 2.3, Solo (??), 10:39, 22/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Вот с этой штукой:
    http://www.dealextreme.com/details.dx/sku.19392
    на убунте картинка не отличается от монитора, который к Gf6600 подключен (1280x1024)
     

  • 1.4, pavlinux (ok), 03:27, 25/02/2010 [ответить]  
  • +/
    Люди, у кого есть сей девайс, попробуйте пустить всё это через USB/IP http://www.opennet.dev/tips/info/2189.shtml

     
  • 1.5, Veter (??), 03:17, 26/02/2010 [ответить]  
  • +/
    Уточняю вопрос - как насчет подключения более-менее приличного моника, вроде 1920 x 1080. Возможно ли и какое качество?
     
     
  • 2.6, Solo (??), 18:14, 26/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    По паспорту у сего девайса разрешение 1600*1200. фулл-ХД тебе не видать ;)
    На 1600*1200 сегодня протестировал - есть небольшие артефакты при резкой смене изображения.
     

  • 1.7, Veter (??), 12:51, 27/02/2010 [ответить]  
  • +/
    Спасибо за инфу. Значит, остается как вариант для подключения дополнительно старого моника, чтоб без дела не валялся.
     
     
  • 2.8, гость (?), 16:37, 27/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Unboxing of new hi-res adapter by DisplayLink that allows you to now go from USB to DVI in resolution up to 2048x1152. но это 195 и хз как он заработает (в столе такой адаптер валяется да только руки не дойдут потестить). На самом деле IMHO если нужно несколько мониторов к ноуту - можно на matrox triplehead2go глянуть. Последние прошивки под linux приемлимо пашут - можно найти отзывы.  IMHO на dell xps 13 можно сразу 6 мониторов прицепить. Я просто работаю с видеостенами...
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру