URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 64093
[ Назад ]

Исходное сообщение
"Раздел полезных советов: Подключение нескольких мониторов к ..."

Отправлено auto_tips , 20-Фев-10 11:35 
Ниже описан процесс организации второго рабочего места в 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 на нем должно появиться приглашение для входа в систему


URL: http://plugable.com/2009/11/16/setting-up-usb-multiseat-with.../
Обсуждается: http://www.opennet.me/tips/info/2274.shtml


Содержание

Сообщения в этом обсуждении
"Подключение нескольких мониторов к Linux через USB-адаптеры Displaylink"
Отправлено Veter , 20-Фев-10 11:35 
Самого интересного нет - какое качество картинки? Стоит ли оно вообще того...

"Подключение нескольких мониторов к Linux через USB-адаптеры ..."
Отправлено Serg11 , 22-Фев-10 10:14 
в описании к устройству параметры однако неплохие
http://www.nix.ru/autocatalog/adapters_switches/TRENDnet_TU2...

"Подключение нескольких мониторов к Linux через USB-адаптеры ..."
Отправлено Solo , 22-Фев-10 10:39 
Вот с этой штукой:
http://www.dealextreme.com/details.dx/sku.19392
на убунте картинка не отличается от монитора, который к Gf6600 подключен (1280x1024)

"Подключение нескольких мониторов к Linux через USB-адаптеры Displaylink"
Отправлено pavlinux , 25-Фев-10 03:27 
Люди, у кого есть сей девайс, попробуйте пустить всё это через USB/IP http://www.opennet.me/tips/info/2189.shtml


"Подключение нескольких мониторов к Linux через USB-адаптеры Displaylink"
Отправлено Veter , 26-Фев-10 03:17 
Уточняю вопрос - как насчет подключения более-менее приличного моника, вроде 1920 x 1080. Возможно ли и какое качество?

"Подключение нескольких мониторов к Linux через USB-адаптеры ..."
Отправлено Solo , 26-Фев-10 18:14 
По паспорту у сего девайса разрешение 1600*1200. фулл-ХД тебе не видать ;)
На 1600*1200 сегодня протестировал - есть небольшие артефакты при резкой смене изображения.

"Подключение нескольких мониторов к Linux через USB-адаптеры Displaylink"
Отправлено Veter , 27-Фев-10 12:51 
Спасибо за инфу. Значит, остается как вариант для подключения дополнительно старого моника, чтоб без дела не валялся.

"Подключение нескольких мониторов к Linux через USB-адаптеры ..."
Отправлено гость , 27-Фев-10 16:37 
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 мониторов прицепить. Я просто работаю с видеостенами...