Linuxová kouzla I - seriál návodů ke stejnojmenné přednášce na LinuxExpo
Po perném pracovním dni se před počítačem objeví mág s kufříkem plným kouzel, která překvapí nejen ty, kteří s Linuxem teprve začínají, ale i zkušenější uživatele. A co si některá kouzla zkusit i doma? A vypadat také jako kouzelník? O tom pojednává první díl seriálu návodů ke stejnojmenné přednášce na LinuxExpo Linuxová kouzla. K dispozici je i [?uvnitr:image/tid/57 fotodokumentace].
V rámci výstavy a konference LinuxExpo 2007 se konala přednáška Linuxová kouzla, která ukazovala, jaké triky pro práci i pobavení se dají v Linuxu provádět. A že jich je!
Během prezentace Jiří Benc a Milan Vančura představili fiktivní pár Jožin a Bažina. Na Jožinově pracovním dni postupně ukázali několik z možných triků nebo nestandardního použití HW.
V dalších částech najdete složitější návody z přednášky:
A to nejen předem připravených statických hlášení, ale systém může např.
přečíst předmět nově příchozího e-mailu.
z různých počítačů a přecházet tak např. ze zaměstnání domů bez zastavení
běžících aplikací a bez ukončení relace. Díky napojení na určitou konkrétní
("osobní") klíčenku pak odpadá nutnost se přihlašovat na klientovi:
při vložení klíčenky se uživatel automaticky připojí ke své ploše a po vyjmutí
klíčenky se od své plochy odpojí.
mplayer -vo aa
vás přesvědčí o opaku!neverball
.Více osob může pracovat současně u jednoho počítače!
Jelikož spouštění programů z KDE menu pod jiným uživatelem je podporováno přímo v KDE a tudíž snadno dosažitelné přes pravé tlačítko myši na položku v menu, začneme rovnou nastavením multiseat.
Hardwarové požadavky
- Jedna graf. karta pro každého uživatele
- bohužel nelze použít jedné karty s více výstupy (omezení X), ale jednotliví uživatelé mohou používat Xineramu
- u některých grafických karet kolidují drivery (např.
nvidia
vs.nvidia-legacy
) a nelze je proto použít dohromady - obecně není třeba, aby měly všechny graf. karty chipset od téhož výrobce, ale některé kombinace mohou mít problémy (např. binární driver
nvidia
přeprogramovává PCI sběrnici, což mohou jiné drivery špatně nést)
- Jeden pár klávesnice-myš pro každého uživatele
- lze použít libovolné kombinace PS/2 a USB zařízení (v našem příkladu jsme použili PS/2 klávesnici a myš pro první seat a USB klávesnici i myš pro druhý seat)
- Případně pro každého uživatele jedna zvuková karta
- konfigurace přesahuje rámec tohoto dokumentu
Obecný princip
- spustíme dva (nebo více) X serverů, jeden pro každý seat
- každý s výstupem na jinou grafickou kartu
- každý s pevně určeným vstupním zařízením (klávesnice+myš)
Nastavení v openSUSE 10.2
Není třeba nic patchovat!
Konfigurace udev
V implicitním nastavení pojmenovává udev klávesnice a myši náhodně a pokaždé jinak; proto je třeba vytvořit pravidlo přiřazující pevné jméno druhému (případně každému dalšímu) páru klávesnice/myš.
- připojte klávesnice a myši
- příkazem
cat /proc/bus/input/devices
vypište nalezená zařízení - najděte položky týkající se klávesnic a myší (podle názvu) a zaznamenejte si přesný název (položka "Name", může být například "Chicony USB keyboard") a umístění v sysfs (položka "Sysfs", obvykle něco jako "/class/input/input1")
- v adresáři
/etc/udev.d/
vytvořte nový soubor41-multiseat.rules
, a do něj napište řádky:KERNEL=="event*", SYSFS{name}=="název klávesnice", SYMLINK+="input/event9"
KERNEL=="event*", SYSFS{name}=="název myši", SYMLINK+="input/seat_b_mouse"Poznámka: pro klávesnici by bylo správnější použít něco jakoinput/seat_b_keyboard
,
ale bohužel Xorg server ve své současné verzi očekává vstup výhradně ve formátu/input/event[0-9]
; jedná se o nepochopení autorů, jak funguje systém
událostí v linuxu (vizman evdev
).Pro více klávesnic a myší, nebo pro případ, že obě používají USB, by bylo třeba více řádků a soubor by byl poněkud složitější.
Grafické karty
V našem případě jsme použili dvě starší nVidia karty, jednu AGP a jednu PCI. Opensourcový driver nv
si s inicializací dvou karet pro různé X servery neporadí, takže je třeba použít binární driver nvidia
.
nvidia
bohužel obsahuje chyby, které se v této poněkud netypické konfiguraci projeví (je možné, že jiné drivery na tom budou podobně). Nejotravnější bug spočívá v tom, že karty je nutné inicializovat ve správném pořadí: nejprve sekundární (tu, kterou nenakonfiguroval BIOS), pak primární (tu, která při startu vypisuje průběh bootování jádra). Je tedy třeba spustit nejprve X server pro sekundární kartu a teprve poté X server pro kartu primární. V našem případě BIOS detekoval jako první PCI kartu, na jiném počítači to však může být jinak; u některých BIOSů lze pořadí detekce i nastavit. Konfigurace X serveru
- Je-li to třeba, nainstalujte příslušné drivery (u nás
nvidia
). - Spusťte automatickou konfiguraci X serveru (nástroj
SaX
), například z YaSTu. - Nyní je třeba ručně upravit konfigurační soubor
/etc/X11/xorg.conf
. Ignorujte text "PLEASE DO NOT EDIT THIS FILE" :-) a proveďte následující změny.Pozor: Po zásazích do souboru/etc/X11/xorg.conf
už nesmíte znovu spustit automatickou konfiguraci, neboťSaX
by si se změněným souborem nedokázal poradit.- Najděte sekci
InputDevice
pro klávesnici (má v názvu něco jako "Keyboard[0]", v ní odstraňte řádky "Identifier" a "Driver" a místo nich přidejte řádkyOption "Identifier" "Keyboard_A"
Option "Driver" "evdev"
Option "Device" "/dev/input/eventX"kde X je číslo zařízení, které jste si poznamenali z řádku "Sysfs" ve výpisu zařízení (
/proc/bus/input/devices
). - Zkopírujte tuto sekci s tím, že v řádku "Identifier" bude teď "Keyboard_B" a v řádku "Device" bude "/dev/input/event9".
- Podobný postup nyní aplikujeme na sekci
InputDevice
týkající se myši. Sekce má v názvu něco jako "Mouse[0]".
Odstraňte řádky "Identifier" a "Device" a nahraďte je řádkyOption "Identifier" "Mouse_A"
Option "Device" "/dev/input/mouse0" - Zkopírujte tuto sekci s tím, že v řádku "Identifier" bude teď "Mouse_B" a v řádku "Device" bude "/dev/input/seat_b_mouse".
- V sekci "Monitor" zapište na řádku "Identifier" hodnotu "Monitor_A", zkopírujte tuto sekci a do druhé sekce použijte jako "Identifier" hodnotu "Monitor_B".Poznámka: Zde předpokládáme, že oba monitory mají stejné nebo velmi podobné parametry, jinak by bylo potřeba upravit druhou sekci tak, aby odpovídala vlastnostem druhého monitoru.
- Nyní zadejte z konzole příkaz
X :1 -scanpci
, který vypíše zařízení, jak je vidí X server. Najděte ve výpisu své dvě grafické karty a poznamenejte si trojici čísel, vypsaných v závorce na začátku řádku; tato čísla určují, kde na sběrnici je karta připojena.Příklad: Zde vidíme část výpisu z příkazuX :1 -scanpci
na jednom z našich strojů:
(0:24:1) Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Address Map
(0:24:2) Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] DRAM Controller
(0:24:3) Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control
(1:10:0) unknown card (0x1458/0x1000) using a Texas Instruments TSB82AA2 IEEE-1394b Link Layer Controller
(2:0:0) unknown card (0x1458/0xe000) using a Marvell Technology Group Ltd. 88E8053 PCI-E Gigabit Ethernet Controller
(5:0:0) unknown card (0x1043/0x81ae) using a nVidia Corporation NV44 [GeForce 6200 TurboCache(TM)]Řádka označující grafickou kartu je ta poslední.
V tomto případě je grafická karta nVidia GeForce 6200 a její připojení
na sběrnici je vyjádřeno čísly5:0:0
. - Najděte (opět v souboru
/etc/X11/xorg.conf
) sekci "Device", změňte v ní položku "Identifier" na "Device_A" a přidejte nebo upravte řádek "BusID" tak, aby obsahovalOption "BusID" "X:Y:Z"kde X, Y a Z je trojice čísel z předchozího bodu.
- Zkopírujte sekci "Device" s tím, že položka "Identifier" bude nyní "Device_B" a položka "BusID" bude obsahovat trojici čísel odpovídající druhé grafické kartě.Poznámka: Možná bude třeba ve zkopírované sekci "Device" odmazat některá automaticky detekovaná nastavení týkající se první karty.
- Najděte sekci "Screen", změňte v ní položku "Identifier" na "Screen_A" "Device" na "Device_A", a "Monitor" na "Monitor_A".
- Zkopírujte sekci "Screen" s tím, že položka "Identifier" bude nyní "Screen_B", "Device" bude "Device_B" a "Monitor" "Monitor_B".
- Smažte všechny sekce "ServerLayout" a místo nich přidejte dvě nové:Section "ServerLayout"
Identifier "Seat_A"
InputDevice "Keyboard_A" "CoreKeyboard"
InputDevice "Mouse_A" "CorePointer"
Screen "Screen_A"
EndSection
Section "ServerLayout"
Identifier "Seat_B"
InputDevice "Keyboard_B" "CoreKeyboard"
InputDevice "Mouse_B" "CorePointer"
Screen "Screen_B"
EndSection - Najděte sekci "ServerFlags" a přidejte do ní řádekOption "NoVTSwitch" "yes"
- Vypněte běžící X server zadáním příkazu
init 3
z textové konzole (pokud možno ne z xtermu :-)) - Zkušebně spusťte nejprve první a pak druhý X server:X -layout Seat_A
X -layout Seat_BX servery ukončíte stiskem kláves Ctrl+Alt+Backspace.
- Pokud vše šlo dobře, můžeme nyní spustit oba X servery najednou:X -sharevts -layout Seat_A :0 & X -sharevts -layout Seat_B :1
- Pokud se obě zkoušky podařily, můžeme nyní znovu spustit grafické prostředí příkazem
init 5
.
- Najděte sekci
Obnovení plné funkčnosti klávesnice
Protože jsme použili jiný ovladač klávesnice, pravděpodobně nebude na první pokus
fungovat zcela správně, zejména ne šipky a další speciální klávesy. Pro nápravu
je zapotřebí těchto kroků:
- V konzoli se přesuňte do adresáře
/usr/share/X11/xkb/keycodes/
a nahraďte souborxfree86
kopií souboruevdev
. - KDE obsahují drobnou chybu, která způsobuje, že klávesa "šipka nahoru" vyvolá okno pro tisk obrazovky. Tu lze obejít vypnutím akce pro rychlé otevření tohoto okna: otevřete Ovládací centrum KDE, položku Místní zvyklosti a zpřístupnění - Vstupní činnosti, z nabídky vyberte Preset actions - Print Screen a zaškrtněte políčko "Zakázat".
Konfigurace KDM
Otevřete soubor /opt/kde3/share/config/kdm/kdmrc
a proveďte v něm následující úpravy:
- Řádek
StaticServers=:0
změňte naStaticServers=:0,:1
- Řádek
ReserveServers=:1,:2,:3
změňte naReserveServers=
- Najděte sekci začínající
[X-:0-Core]
a přidejte do ní (nebo změňte) řádekServerCmd=/usr/bin/X -br -sharevts -layout Seat_A - Vytvořte na konci souboru novou sekci[X-:1-Core]
ServerCmd=/usr/bin/X -br -sharevts -layout Seat_B
ClientLogFile=.xsession-errors
TerminateServer=true
Authorize=true - Pokud potřebujete spustit X servery v určitém pořadí, musíte si trochu pohrát s ostatními konfiguračními volbami (v našem případě pomohlo přidání
OpenDelay=30
do[X-:0-Core]
aOpenDelay=15
do[X-:1-Core]
).
Komentáře
Funguje to jen u některých modelů notebooků ThinkPad. A myslím, že návod je tak krátký, že se nic nestane, když to prozradím dopředu: v openSUSE 10.2 jsou již potřebné ovladače zahrnuty, takže stačí nahrát do jádra moduly "joydev" a "hdaps". Tedy pod rootem v konzoli spustíte:
modprobe joydev
modprobe hdaps
Pak už můžete pustit Neverball nebo jakoukoliv jinou hru, která je ochotná nechat se ovládat joystickem.
Kdypak prijde na radu dalsi dil linuxovych kouzel? Treba ten o NX. Jinak diky za fajn prezentaci na LinuxExpu a naslednou zajimavou debatu.
Zdravim,
nerad prudim, ale kdyz ten clanek kdysi vysel, tak jsem se tesil, ze se tu popise ta vychytavka jak ovladat mobilem MPlayer.... a porad nic :-( A nebo jsem slepej:)
*delfajz