The OpenNET Project / Index page

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



Индекс форумов
Составление сообщения

Исходное сообщение
"Раздел полезных советов: Подключение нескольких мониторов к ..."
Отправлено 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.ru/tips/info/2274.shtml

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



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

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