Portál AbcLinuxu, 2. května 2025 05:56
KDE je grafické desktopové prostředí, ale přesto lze velmi snadno využívat funkcí programů i samotného prostředí v rámci vašeho oblíbeného skriptovacího jazyka.
Proč skriptovat cokoliv v rámci grafického uživatelského rozhraní? Dobrý důvod, který by přesvědčil každého, kdo při zmínce o něčem podobném kroutí hlavou, asi neexistuje. Jistě, dalo by se mluvit o tom, že možnost využívat KDE funkce a aplikace i neinteraktivně je přínosná, ale pravdou zůstává, že pro někoho tam to KDE bude prostě představovat nadbytečnou vatu kolem.
Takže nebudu obhajovat ani KDE, ani funkce, které budou v článku popisovány. Jsem smířen s tím, že tuto možnost ovládání KDE využijí a ocení jen ti, kdo už KDE používají, a jen by se jim hodilo některé postupy zefektivnit.
Stejné je to s využíváním dialogových boxů. Volat je ze skriptů nebo rovnou z příkazové řádky může být užitečné jen pro toho, kdo chce nějaké dialogové boxy vidět. Ostatní si úplně vystačí s tím, když se komunikace se skriptem odehrává na emulátoru terminálu.
Desktop COmmunication Protocol je poměrně mocný nástroj (či spíše systém), pomocí kterého mohou jednotlivé procesy mezi sebou komunikovat. Konkrétní aplikace musí být s podporou DCOP napsána, ale to je u kmenových KDE aplikací samozřejmostí a mnohé externí Qt/KDE aplikace jsou podporou DCOP vybaveny také.
DCOP mohou využívat buď samotné aplikace mezi sebou, nebo můžeme k DCOP
rozhraní jednotlivých programů přistupovat "zvenčí". Pro nejjednodušší
seznámení s podobou DCOP rozhraní je vhodné využít program
kdcop
. Jde o jednoduchý GUI program, který poskytuje přístup
k DCOP rozhraním spuštěných aplikací. Chcete-li si udělat rámcovou
představu o tom, jaká volání která aplikace (nebo komponenta desktopu)
nabízí, projděte si kdcop
.
Prostřednictvím kdcop
lze volání i aplikovat. Praktické
využití (kromě zjištění DCOP možností aplikací) to však nemá. K volání z
příkazové řádky - a tedy i ze skriptů - lze využít program
dcop
. Jeho možnosti jsou docela široké, i když neoplývá
závratným množstvím parametrů (viz dcop --help
).
Nebudu se snažit o vymýšlení nějakého úchvatně praktického využití. Každý jistě pozná, jestli by se mu možnosti DCOP mohly k něčemu hodit. Pracovní a ukázkový příklad, který bude následovat, tedy berte s vědomím toho, že jde o naprostou hloupost, kterou by při skutečné práci nikdo nepotřeboval. Nám však poslouží k představení základních postupů a možností DCOP.
Aplikace většinou (podle svého zaměření) poskytují DCOP rozhraní jednak informativního charakteru (název okna, právě hrající písnička apod.) a potom taková, pomocí kterých lze program i ovládat (zastav přehrávání, otevři okno apod.). Využijeme tedy od každého trochu.
dcop `dcop konqueror* | head -1` konqueror-mainwindow#1 \
newTab "`dcop amarok player nowPlaying`"
Co tento příkaz dělá? Zjistí, jakou skladbu právě hraje přehrávač
amaroK. Tato informace je předána Konqueroru (máte-li otevřeno více
instancí Konqueroru, je zvolena ta první - s nejnižším PID), který otevře
novou záložku s URL, které odpovídá právě názvu skladby. Což při mém
nastavení prohlížeče automaticky daný řetězec vyhledá pomocí Google. Pokud
používáte webové zkratky, měli byste do dvojitých uvozovek na začátek
ještě vložit nějaké to gg
.
Rozeberme to postupně:
dcop
podporuje wildcards, takže konkrétní instanci
si najdeme tak, že necháme vypsat všechny a vezmeme z nich tu první.dcop
poskytne právě přehrávanou píseň z amaroKu
(nowPlaying).Ačkoliv je to prosté, určitě vidíte, že možnosti jsou veliké. Znovu opakuji, že tento konkrétní příklad je ale z hlediska reálné použitelnosti naprosto zbytečný.
Aplikace KDialog je KDE obdobou klasického programu xmessage, který máte určitě nainstalovaný spolu se základním X serverem. Její funkcí je zobrazovat jednoduché dialogové boxy, se kterými můžete snadno pracovat (zobrazovat v nich informace, nabídky, ... a odchytávat vracené hodnoty podle vstupu uživatele) opět z prostředí příkazového řádku nebo skriptu. Nejviditelnější výhodou je u KDialog to, že jde o Qt aplikaci, a proto se podřizuje nastavení vzhledu, které na svém desktopu máte.
kdialog --help
vám poskytne stručný, ale přehledný seznam
parametrů, pomocí kterých můžete ovlivnit typ okna. Na výběr je několik
základních předdefinovaných druhů (informační, chybové, pro zadání hesla
apod.). Úplně nejjednodušším příkladem je jen obyčejné vypsání
informace:
kdialog --msgbox "Informační text. Bla bla" --title "První okno"
Myslím, že vysvětlivky nejsou potřeba.
Ještě přihodím jednu ukázku. Opět je to úplně nesmyslná věc. Účelem je představit pár dalších možností KDialog společně s několika voláními DCOP.
#!/bin/bash kdialog --yesno "Počkat 5 vteřin?" --title "Co bude?" while [ $? -eq 0 ]; do cislo=0 pid=`kdialog --progressbar Čekám 5 | sed \ 's/.\+-\([[:digit:]]\+\).\+/\1/'` until [ $cislo -eq 5 ]; do sleep 1 cislo=$((cislo + 1)) dcop kdialog-$pid ProgressDialog setProgress $cislo done dcop kdialog-$pid MainApplication-Interface quit kdialog --yesno "Počkej ještě 5 vteřin." --title "Znovu?" done kdialog --sorry "Konec." --title "Fňuk"
Stručně:
$?
obsahuje vrácené hodnoty podle stisknutého
tlačítka. Kladná odpověď je 0, záporná 1 (zrušení 2).Poznámky:
Tímto dílem asi miniseriál o nepříliš známých dovednostech KDE končí. Pokud vás napadá nějaká oblast, která by ještě stála za rozepsání, zmiňte ji, prosím, v diskuzi.
Ja to pouzivam spolocne s micq (conzolovy ICQ client). nuieje to este dokoncene...
Ked dojde sprava, cez tcl spustim kdialog s input-boxom. Ked dam cancal ingnorujem spravu, ked tam nieco napisem, odosle text s input-boxu. Prakticke a nemam ICQ klienta stale na ocich... (ziadneho nemam rad)
#! /bin/bash nowPlaying="$(dcop amarok player nowPlaying)" position="$(dcop amarok player currentTime)" total="$(dcop amarok player totalTime)" dcop klipper klipper setClipboardContents "amaroK 1.2.3 >> $nowPlaying [ $position / $total ]"
dcop konqueror*
pořád jsem přemýšlel, jak zjistit identifikátor již běžícího okna, ale protože to nebylo moc nutné, tak se mi to nechtělo hledat.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.