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 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ř.
nvidiavs.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
nvidiapř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 jako
input/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.confuž nesmíte znovu spustit automatickou konfiguraci, neboťSaXby si se změněným souborem nedokázal poradit.- Najděte sekci
InputDevicepro 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 řádky
Option "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
InputDevicetý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říkazu
X :1 -scanpcina 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 obsahoval
Option "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í řádek
Option "NoVTSwitch" "yes" - Vypněte běžící X server zadáním příkazu
init 3z 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 souborxfree86kopií 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=:0změňte naStaticServers=:0,:1 - Řádek
ReserveServers=:1,:2,:3změňte naReserveServers= - Najděte sekci začínající
[X-:0-Core]a přidejte do ní (nebo změňte) řádek
ServerCmd=/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=30do[X-:0-Core]aOpenDelay=15do[X-:1-Core]).



Poslední komentáře
před 24 min 23 sek
před 45 min 30 sek
před 2 hod 12 min
před 2 hod 30 min
před 2 hod 36 min
před 8 hod 21 min
před 9 hod 3 min
před 9 hod 55 min
před 10 hod 44 min
před 10 hod 45 min