вторник, 11 января 2011 г.

Multiseat для двух пользователей на двухголовой видеокарте с помощью Xephyr

Multiseat linux - один компьютер на двоих. Одна видеокарта. С помощью Xephyr
0. Моя конфигурация:

lspci | grep VGA
01:00.0 VGA compatible controller: nVidia Corporation G92 [GeForce 9800 GT] (rev a2)
#Двухголовая видеокарта.

xserver-xephyr
2:1.7.7-10
#Версия Xephyr

gdm --version
GDM 2.20.11
#Display manager

cat /etc/debian_version
squeeze/sid

Из оборудования я использую два монитора, две клавиатуры:(USB и PS/2), две мышки:(USB и PS/2)
0. Подключил все это оборудование к сист. блоку и загрузил linux.

1. Установил проприетарные дрова для видеокарты с nvidia.com
(ЕМНИП, говорят, со свободными multiseat не работает как надо)
(При установке соглашаемся на вопрос об автоматической генерации xorg'a)
После установки дров перезагружаем linux.

2. Настраиваем /etc/X11/xorg.conf
Открываем на редактирование:
например nano /etc/X11/xorg.conf

Потребуется сформировать секции таким образом:
-------------------------------
Секции Monitor:

Section "Monitor"
Identifier "My Monitor0"
HorizSync 28.0 - 33.0
VertRefresh 43.0 - 72.0
EndSection

Section "Monitor"
Identifier "My Monitor1"
EndSection
-------------------------------
Секции Device: (BusID в обоих секциях меняем своим, который берем из вывода lspci | grep VGA
(У меня этот вывод выглядит таким образом:)
01:00.0 VGA compatible controller: nVidia Corporation G92 [GeForce 9800 GT] (rev a2)
------------------------------
Section "Device"
Identifier "nvidia0"
Driver "nvidia"
BusID "PCI:01:00:0"
Screen 0
Option "UseDisplayDevice" "CRT-0"
Option "RenderAccel" "true"
EndSection

Section "Device"
Identifier "nvidia1"
Driver "nvidia"
BusID "PCI:01:00:0"
Screen 1
Option "UseDisplayDevice" "CRT-1"
Option "RenderAccel" "true"
EndSection
--------------------------------
Секции Screen:

Section "Screen"
Identifier "Screen0"
Device "nvidia0"
Monitor "My Monitor0"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1600x900"
ViewPort 0 0
EndSubSection
EndSection

Section "Screen"
Identifier "Screen1"
Device "nvidia1"
Monitor "My Monitor1"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1024x768"
ViewPort 0 0
EndSubSection
EndSection
----------------------------
Секции InputDevice: ( у меня эти секции сгенерировались автоматом при установке дров. Я их не трогал. А так как у меня usb мышь с доп. кнопками, то в первом InputDevice'e вам возможно придется удалить все Option'ы, оставив только
Identifier "Mouse0"
Driver "mouse")

Section "InputDevice"
# generated from default
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/psaux"
Option "Emulate3Buttons" "no"
Option "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
# generated from default
Identifier "Keyboard0"
Driver "kbd"
EndSection
--------------------------------------
И самая главная секция - ServerLayout:

Section "ServerLayout"
Identifier "Layout1"
Screen 0 "Screen0"
Screen 1 "Screen1" rightof "Screen0"
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
EndSection
-----------------------------------
Затем лучше дописать секции:

Section "Module"
Load "glx"
EndSection

Section "ServerFlags"
Option "BlankTime" "0"
Option "StandbyTime" "0"
Option "SuspendTime" "0"
Option "OffTime" "0"
EndSection

После этого если перезагрузить иксы, то на втором мониторе должна появиться копия первого рабочего стола или просто черный экран по которому может бегать указатель курсора (зависит от windows manager'a)
Прилагаю полный xorg.conf

2. Устанавливаем доп. софт.

sudo aptitude install xserver-xephyr xserver-xorg-input-evdev gdm

3. Создаем скрипт запуска xephyr'a - Xephyr.sh

#!/bin/bash

trap "" usr1

XEPHYR=/usr/bin/Xephyr

args=()

while [ ! -z "$1" ]; do
if [[ "$1" == "-xauthority" ]]; then
shift
if [ ! -z "$1" ]; then
export XAUTHORITY="$1"
fi
elif [[ "$1" == "-display" ]]; then
shift
if [ ! -z "$1" ]; then
export DISPLAY="$1"
fi
elif [[ "$1" == "-keyboard" ]]; then
shift
if [ ! -z "$1" ]; then
args=("${args[@]}" "-keybd")
args=("${args[@]}" "evdev,,device=/dev/input/by-path/$1,xkbrules=xorg,xkbmodel=evdev,xkblayout=us")
fi
elif [[ "$1" == "-mouse" ]]; then
shift
if [ ! -z "$1" ]; then
args=("${args[@]}" "-mouse")
args=("${args[@]}" "evdev,,device=/dev/input/by-path/$1")
fi
else
if ! expr match $1 'vt[0-9][0-9]*' >/dev/null; then
args=("${args[@]}" "$1")
fi
fi
shift
done

echo $XEPHYR "${args[@]}" >> /tmp/logXephyr
exec $XEPHYR "${args[@]}"


1) Сохраняем его под именем Xephyr.sh
2) Копируем его в /usr/sbin/
cp ./Xephyr.sh /usr/sbin/
3) Назначаем права
chmod 755 /usr/sbin/Xephyr.sh

4. Настраиваем Display Manager - GDM на вход пользователей
Общий план таков:
Сначала запускается основной X - сервер, а поверх него стартуют два сеанса вложенного икс-сервера Xephyr.
Также на этом этапе мы должны указать в настройках gdm на каких местах (seat) будут использоваться конкретные клавиатуры и мыши используя их адреса.

Конфигурационный файл gdm - это /etc/gdm/gdm.conf

А так он выглядит у меня:

[servers]

0=Standard device=/dev/console
1=Seat1
2=Seat2

[server-Standard]
name=Standard server
command=/usr/bin/X -br -audit 0
handled=false
flexible=false

[server-Seat1]
name=Seat1
command=/usr/sbin/Xephyr.sh -display :0.0 -xauthority /var/lib/gdm/:0.Xauth -fullscreen -keyboard platform-i8042-serio-0-event-kbd -mouse pci-0000:00:12.1-usb-0:1:1.0-event-mouse
handled=true
flexible=false

[server-Seat2]
name=Seat2
command=/usr/sbin/Xephyr.sh -display :0.1 -xauthority /var/lib/gdm/:0.Xauth -fullscreen -keyboard pci-0000:00:13.1-usb-0:3:1.0-event-kbd -mouse platform-i8042-serio-1-event-mouse
handled=true
flexible=false

Здесь вам придется отредактировать строки command у [server-Seat1] и у [server-Seat2] , а именно адреса клавиатур и мышей на шинах для обоих рабочих мест.
-----------------------------------------
Адреса берутся из каталога /dev/input/by-path/
Список моих устройств:
ls /dev/input/by-path
pci-0000:00:12.1-usb-0:1:1.0-event-mouse pci-0000:00:13.1-usb-0:3:1.1-event platform-i8042-serio-1-mouse
pci-0000:00:12.1-usb-0:1:1.0-mouse platform-i8042-serio-0-event-kbd platform-pcspkr-event-spkr
pci-0000:00:13.1-usb-0:3:1.0-event-kbd platform-i8042-serio-1-event-mouse

Нам нужны только те устройства, которые содержат своем имени фразы event-kbd и event-mouse, поэтому

ls /dev/input/by-path/ | grep -P "event-mouse|event-kbd"

pci-0000:00:12.1-usb-0:1:1.0-event-mouse
pci-0000:00:13.1-usb-0:3:1.0-event-kbd
platform-i8042-serio-0-event-kbd
platform-i8042-serio-1-event-mouse

устройства начинающиеся с pci - это USB устройства
с platform - это PS/2

которые оканчиваются на mouse - мыши
на kbd - клавиатуры

убедиться, что мы не ошиблись с адресами устройств, можно пустив на вывод какое нибудь устройство. Например, проверим нашу USB мышь:
sudo cat /dev/input/by-path/pci-0000:00:12.1-usb-0:1:1.0-event-mouse
и подвигаем мышь: если в терминал выводятся непонятные символы, значит мы убедились, что pci-0000:00:12.1-usb-0:1:1.0-event-mouse - действительный адрес нашей USB мыши. Советую проверить таким образом и клавиатуры (в этом случае непонятные символы будут выводиться в терминал при нажатии на клавиши правильной клавиатуры)

Также, можно проверить адреса устройств так:
cat /proc/bus/input/devices
Используя поля Sysfs (заменяя слэши тире)
--------------------------------------
После того, как мы узнаем адреса двух клавиатур и мышей и определимся на какое место будем их цеплять- отредактируем gdm.conf:

sudo nano /etc/gdm/gdm.conf

изменяя в вышележащем конфиге в строках command для двух seat'ов адреса. Т.е. потребуется заменить
platform-i8042-serio-0-event-kbd
pci-0000:00:12.1-usb-0:1:1.0-event-mouse
pci-0000:00:13.1-usb-0:3:1.0-event-kbd
platform-i8042-serio-1-event-mouse
на свои.
-----------------------------------
После чего перезагружаем gdm

sudo /etc/init.d/gdm restart
sudo /etc/init.d/gdm restart


5. Если все произведено правильно то, на двух экранах появится приглашение входа

Войти под одним пользователем одновременно нельзя, поэтому используем вторую учетку.

Теперь настраиваем:
Автоповтор нажатий клавиш клавиатуры
Добавляем в автозапуск (к примеру wm'a) команду
xset r rate 200 25

Переключение расскладок клавиатуры:
Добавляем в автозапуск команду
setxkbmap -layout "us,ru" -option "grp:caps_toggle,grp_led:scroll"


Руководства:
Здесь
И здесь

xorg.conf multiseat

Xorg.conf multiseat


# nvidia-xconfig: X configuration file generated by nvidia-xconfig
# nvidia-xconfig: version 260.19.29 (buildmeister@swio-display-x86-rhel47-08.nvidia.com) Wed Dec 8 12:28:55 PST 2010

Section "ServerLayout"
Identifier "Layout1"
Screen 0 "Screen0"
Screen 1 "Screen1" above "Screen0"
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
EndSection

Section "Monitor"
Identifier "My Monitor0"
HorizSync 28.0 - 33.0
VertRefresh 43.0 - 72.0
# Option "DPMS" "false"
EndSection

Section "Monitor"
Identifier "My Monitor1"
# Option "DPMS" "false"
EndSection

Section "Device"
Identifier "nvidia0"
Driver "nvidia"
BusID "PCI:01:00:0"
Screen 0
Option "UseDisplayDevice" "CRT-0"
Option "RenderAccel" "true"
EndSection

Section "Device"
Identifier "nvidia1"
Driver "nvidia"
BusID "PCI:01:00:0"
Screen 1
Option "UseDisplayDevice" "CRT-1"
Option "RenderAccel" "true"
EndSection

Section "Screen"
Identifier "Screen0"
Device "nvidia0"
Monitor "My Monitor0"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1600x900"
ViewPort 0 0
EndSubSection
EndSection

Section "Screen"
Identifier "Screen1"
Device "nvidia1"
Monitor "My Monitor1"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1024x768"
ViewPort 0 0
EndSubSection
EndSection

Section "InputDevice"
# generated from default
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/psaux"
Option "Emulate3Buttons" "no"
Option "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
# generated from default
Identifier "Keyboard0"
Driver "kbd"
EndSection

Section "Module"
Load "glx"
EndSection

Section "ServerFlags"
Option "BlankTime" "0"
Option "StandbyTime" "0"
Option "SuspendTime" "0"
Option "OffTime" "0"
EndSection

среда, 1 сентября 2010 г.

Lilo.conf

Добавить Debian в LILO
#mount -t ext3 /dev/sda9 /mnt/a
дописал в /etc/lilo.conf следующее
lba32
image = /mnt/a/boot/vmlinuz-2.6.32-3-686
initrd = /mnt/a/boot/initrd.img-2.6.32-3-686
root = /dev/sda9
label = Debian
read-only

выполнил /sbin/lilo
/dev/sda9- корневой раздел с ядром debian

пятница, 11 июня 2010 г.

Debian Squeeze netinstall

Debian Squeeze-netinstall
Установка и первоначальная настройка debian описана здесь
Я лишь законспектирую.
Образ берется здесь
Болванится, грузится,устанавливается
Затем настраивается интернет
Здесь у меня возникла одна небольшая проблема
Debian устанавливался на компе которому для работы инета нужно было изменить mac адрес сетевой карты , а интернет идет через dchp
Т.о. при установке системы она сама не настроила сеть. Это логично, нужно сначала изменить maс

nano /etc/network/interfaces
Приводим его к такому виду


# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# Added #
auto eth0
iface eth0 inet dhcp
hwaddress ether 00:00:00:00:00:00

 

Этот файл и решает эти проблемы, которые были описаны выше.
00:00:00:00:00:00  это требуемый mac адресс


ifconfig eth0
ifconfig eth0 hw ether 00:00:00:00:00:00
/etc/init.d/networking restart
dmesg | grep -i eth

При установке по сети нужно отредактировать список репозитариев
nano /etc/apt/sources.list

добавим

deb http://ftp.ru.debian.org/debian/ squeeze main
deb http://ftp.ru.debian.org/debian/ squeeze contrib non-free


Затем aptitude update , чтобы обновить список пакетов

Монтирование ntfs
fdisk -l
mount -t ntfs-3g /dev/sda1/ /mnt/e

/etc/fstab

/dev/sda1 /mnt/e ntfs-3g iocharset=utf8,umask=0,users,user 0 0

среда, 31 марта 2010 г.

Полезные ресурсы

Буду записывать ресурсы, в основном касающиеся UNIX'ов
posix.ru
unixa.ru
lafox.net
LOR
ru.wikibooks.org
unixforum.org
linuxforum.ru
ru.wikipedia.org
habrahabr.ru
knoppix.ru
citkit.ru
nixp.ru
opennet.ru
rus-linux.net
linux.ru
allunix.ru/
oszone.net




О slackware
Slackware FAQ
Slackwiki.org
slackware.ru
slackguide.com
Lafox faq
sle.how-to.ru
slackware.uz
linuxcenter.ru

О Debian
debian-russian.org


Блоги
mczim-debian.blogspot.com

SSH

Как передавать | обмениваться файлы | файлами в linux

SSH- протокол обмена информацией.
Может понадобиться для передачи файлов напр. через сеть или удаленного управления компьютером.

Как поднять SSH
Настройка хорошо описана в
Арч-вики для arch linux
Для Debian

Т.о. после всех настроек
Запускаем ssh сервер /etc/rc.d/sshd restart
И через клиент подключаемся ssh -l user 192.168.0.1

Заметки о сети в Linux

Список наиболее важных сетевых портов Linux

21 порт FTP
22 порт SSH
23 порт Telnet
25 порт Порт SMTP отвечающий за передачу почты
43 порт Порт клиента WHOIS
53 порт Система преобразования имени хоста
80 порт Стандартный порт HTTP Веб сервера
110 порт Порт POP отвечает за приём почты
995 порт Защищённое SSL/TLS соединение POP
143 порт IMAP Протокол приёма почты
993 порт Защищённое соединение IMAP
443 порт Защищённое HTTP соединение (SSL для https:// )
3306 порт MysQL Сервер
631 порт Протоколы сетевой печати
5900 порт Система удаленного доступа к компьютеру VNC (Virtual Network Computing)

Хотите узнать какие порты открыты у Вас?
Откройте консоль и выполните:
nmap localhost

Если сетевой сканер nmap не установлен, установите его коммандой
sudo apt-get install nmap

Работа с сетью

ifconfig Показать конфигурацию всех сетевых интерфейсов
ifconfig eth0 Показать конфигурацию сетевого интерфейса eth0
ifup eth0 Активировать сетевой интерфейс eth0
ifdown eth0 Отключить сетевой интерфейс eth0
ifconfig eth0 192.168.1.1 netmask 255.255.255.0 Задать конфигурацию IP адреса
ifconfig eth0 promisc Позволяет получать все пакеты, независимо от того были ли они предназначены для хоста или нет. (Это позволяет анализировать сетевой трафик.)
dhclient eth0 Включить на интерфейсе eth0 режим dhcp
route -n Показать таблицу роутинга
route add -net 0/0 gw IP_адрес_шлюза Задать шлюз
route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1 настроить статический маршрут для сети 192 .168.0.0/16
route del 0/0 gw IP_адрес_шлюз удалить статический маршрут
echo "1" > /proc/sys/net/ipv4/ip_forward активировать ip маршрутизацию
hostname Показать имя хоста
host www.it-talk.ru Получить IP адрес от хоста и наоборот
whois www.it-talk.ru Опросить WHOIS
nslookup www.it-talk.ru Получить IP адрес от хоста и наоборот через проверку DNS-сервера
ip link show Показать информацию о всех сетевых интерфейсах
ip link show eth0 Показать информацию интерфейса eth0
mii-tool eth0 Показать параметры интерфейса eth0
ethtool eth0 Показать статистику интерфейса eth0
netstat -p --inet Показать активные соединения
netstat -lp --inet Показать прослушиваемые порты в системе (и кто их слушает)


Материалы
citkit.ru