Mohlo by se zdát, že na tomto místě už není o čem psát. Jenže eject neumí jednu zásadní věc - zjistit stav mechaniky a podle toho ji vysunout nebo zasunout. Uživatel je tak nucen zadat konkrétní příkaz (eject nebo eject -t), místo aby vždy použil stejnou zkratku nebo ikonu. Jistě uznáte, že tohle zrovna dvakrát pohodlné není. A to by nebyl člověk, aby pro trochu pohodlí nevynaložil nezměrné úsilí.
Budeme tedy potřebovat něco jednoduchého, co nám řekne, jak na tom CD/DVD mechanika je. Na adrese www.hadess.net/files/patches jsem našel utilitu s názvem cdrom-test napsanou v jazyce C. Ta je schopna zjistit mnohem více informací (např. že je vloženo médium a je prázdné). Pro naše účely nám postačí podstatně zkrácená varianta cdtray-test, kterou zkompilujeme standardním postupem gcc -o cdtray-test cdtray-test.c
.
Jediný parametr, který cdtray-test očekává, je označení CD/DVD mechaniky ve tvaru /dev/XXX, kde XXX je např. hdb pro IDE mechaniku zapojenou jako primary slave. Použijeme-li tedy příkaz cdtray-test /dev/hdb, do příkazového řádku se nám vypíše stav mechaniky:
- Tray open - šuplík mechaniky je vysunut
- Tray NOT open - šuplík mechaniky je zasunut nebo se jedná o neočekávaný stav
Konečně již tedy víme, v jakém stavu se nachází šuplík. Abychom dosáhli našeho cíle, zabalíme programy eject a cdtray-test do jednoduchého skriptu, viz druhý výpis, který nazveme třeba cdm (CD Manipulace). Na základě znalostí ze seriálu o BASHi již určitě sami rozluštíte, co a jak skript dělá.
Jestliže vaše mechanika podporuje příkaz eject -t, pak opětovným zadáváním cdm se bude šuplík mechaniky střídavě vysouvat a zasouvat. Pokud máte v počítači současně DVD-ROM i vypalovačku, budete potřebovat skripty dva, např. dvdm a rwm. V každém z nich budou volány cdtray-test a eject s jiným označením mechaniky (např. /dev/hdc a /dev/hdd). Završením naší snahy může být navázání těchto skriptů na tlačítka/ikony v panelu.
Aby systém bez problémů nalezl jak cdtray-test, tak ovládací skripty, uložte je do adresáře bin ve svém domovském adresáři. Ještě je potřeba ověřit, že je tam váš systém skutečně bude hledat, a to pomocí echo $PATH. Pokud ve vypsaném seznamu adresářů nenajdete /home/uživatel/bin, je potřeba to napravit příkazem PATH=$PATH:~/bin. Na závěr bych ještě poznamenal, že eject před vysunutím korektně provede umount (odpojení výměnného média ze systému), po zasunutí šuplíku však médium nepřipojí, o to se musíte postarat sami, nebo nějaký nástroj typu supermount apod. Zasunutí šuplíku musí mechanika podporovat (typicky ne u notebooků), stejně tak nastavení rychlosti čtení.
Bash skript pro ovládání šuplíku mechaniky #!/bin/bash DVDROM_DRIVE_STATUS=`cdrom-test /dev/hdb` if [ "$DVDROM_DRIVE_STATUS" = "Tray open" ] ; then eject -t /dev/hdb else eject /dev/hdb fi