Asociace přípon ve Wine

V minulém článku jsem popsal zprovoznění Bakalářů ve Wine, nyní se podívejme na další problém, který vznikl při přeměně ředitele v linuxáka.

Vedení školy má předplaceno několik odborných materiálů – za všechny uvedu např. „Školské zákony“ nebo „202 dokumentů“, přičemž čas od času přijdou nová CD s aktualizovaným textem. CD jsou sestavena většinou jen pro prostředí Windows, ovšem jedná se o velmi jednoduchou aplikaci, která pod Wine běží vcelku dobře.

Tady si dovolím malou odbočku – CD obsahuje většinou nějakou starší verzi Acrobat Readeru, pak samotné dokumenty (např. znění jednotlivých zákonů) ve formátu *.pdf nebo *.doc a nakonec pár knihoven, které obstarají grafický front-end na principu správce souborů. Celkem by mě zajímalo, co autorům brání, aby tohle bylo přístupné na jejich serveru v internetu (ušetřili by za CD a distribuci), případně co brání tomu, aby – když už mají v oblibě CD – byla na nich html struktura, kterou bez obtíží zvládají PC napříč platformami a jejich verzemi. Je-li ovšem důvodem záliba ve složitosti, pak bych upozornil na jistý deficit – CD by mohlo být zašifrováno stejně, jako mohou být zašifrované celé disky … 🙂

Kde je tedy problém, když všechno ve Wine funguje? Zapomněl jsem se zmínit, že některá CD obsahují, kromě např. zákonů ve formátu *.doc, taky různé formuláře – např. vzor „Záznamu o pracovním úrazu“. V aplikaci spuštěné z CD pak bývá malá ikonka nebo odkaz, který umožňuje příslušný dokument otevřít ve vhodném programu z kancelářského balíku nainstalovaném na daném PC. Toto otevření v externím programu umožňuje nejen pohodlný tisk, nebo archivaci, ale také možnost přímo formulář vyplnit, jedná-li se o lejstro hodné vyplnění. Ve Windows triviální záležitost, v Linuxu taktéž. V obou systémech se jedná o stejný princip asociování přípon, kdy dle druhu přípony se volá příslušný program. Co čert nechtěl, ředitel celkem tvrdošíjně trval na tom, že stejná funkčnost by měla být zachována i v případě, že se jedná o spouštění ve Wine. (Pozn.- pdf-ka a nevyplňovací *.doc bych asi ukecal, ale ty vzorové formuláře prioritně určené k vyplnění konkrétními údaji, tak ty už ukecat nešly ….)

Jak otevírat z Linuxu soubory v programu instalovaném ve Wine?

Otázka tedy zní: Jak otvírat ve Wine soubory se známými příponami (*.doc, *.xls, *.pdf) tak, aby se volal příslušný program z linuxového prostředí a to pouhým poklepem na daný soubor? Ale již minule jsem psal, že v linuxovém světě je možné vše, jen někdy to déle trvá – a tohle bylo v kategorii „nemožné přes noc“.

Princip řešení je následující – ve Wine přidáme do Windows registrů záznam pro příslušnou asociaci, který bude odkazovat do C:\\windows\system32 a to na tam umístěný symbolický odkaz směřující na script, který obslouží spuštění příslušného programu s předanými parametry. Tento script můžeme umístit do složky na serveru, ve které budou složky s obsahy příslušných CD. V našem případě scripty umístíme do složky „wine_bin“.

Vyjděme navíc z předpokladu, že by obsah některých CD mohl zajímat i někoho jiného z vedení (např. Školské zákony zástupce ředitele), proto je vhodné umístit obsah CD do společné složky na serveru. Jelikož obsah na CD není možno upravovat (na CD je vypálen) odpadá starost s právy ve společné složce, kdy opět musí stačit pouhé čtení. Uživatele tedy zařadíme např. do skupiny „vedení“ a dáme jí jednorázově práva jen ke čtení. Serverovou složku je ovšem opět nutno na linuxový desktop „přimountovat“ (pro přístup z Wine), tentokrát ovšem již nemusíme pomocí cifs (odpadá problém s právy zápisu pro skupinu), ale klidně stačí nfs.

Z minula máme v domácím adresáři uživatele „karel“ nakonfigurováno Wine s prefixem „bakalari“ a obsah CD umístěný na serveru jsme tentokrát „přimountovali“ do složky např. „programy“ v lokálním stromu linuxového desktopu – tedy do „/mnt/programy“. Obsah CD se Školskými zákony 2012 pak bude např. ve složce „SZ_2012„. V našem vzorovém případě tedy budeme mít cestu „/mnt/programy/SZ_2012/“ – bez práv pro zápis. Ve složce „programy“ ještě vytvoříme podsložku „wine_bin“, do které umístíme spouštěcí scripty a zápisy pro úpravu Windows registrů ve Wine – to pro případ, že budeme akci provádět na vícero linuxových desktopech. Pohodlně se usadíme za prvním linuxovým desktopem, zkontrolujeme nastavení a odpružení křesla uživatele „karla“ a jdeme na to :

Úprava registrů Wine

# v terminálu zadáme příkaz pro otevření příslušných Wine registrů

> WINEPREFIX=/home/karel/.wine_bakalari wine regedit

Spustí se známá aplikace regedit pro úpravu Windows registrů a z horní lišty vybereme : „Registr > Importovat položku registru“. V dialogu odnavigujeme do „/mnt/programy/wine_bin“, kde jsme si nachystali soubory :

# pro klíč obsluhující spouštění .pdf souborů to bude soubor „pdf.reg“ s obsahem :

[HKEY_CLASSES_ROOT\.pdf]
@="PDFfile"
"Content Type"="application/pdf"
[HKEY_CLASSES_ROOT\PDFfile\Shell\Open\command]
@="C:\\windows\\system32\\acroread \"%1\""
 

# pro klíč obsluhující spouštění .doc souborů to bude soubor „doc.reg“ s obsahem :

[HKEY_CLASSES_ROOT\.doc]
@="DOCfile"
"Content Type"="application/msword"
[HKEY_CLASSES_ROOT\DOCfile\Shell\Open\command]
@="C:\\windows\\system32\\ooffice \"%1\""

Pozn. – pro klíče obsluhující *.xls nebo *.ppt postupujeme obdobně jako pro *.doc.

Soubory s položkami registru postupně naimportujeme a následně můžeme zkontrolovat, zda se klíče do registru skutečně zapsaly. Tím máme upraveny Wine registry.

Nyní musíme vytvořit položky (symbolické odkazy) na které v registrech odkazujeme. Jdeme do „/home/karel/.wine_bakalari/drive_c/windows/system32“ a umístíme zde symbolický odkaz s názvem „acroread“ (pro *.pdf) a „ooffice“ (pro *.doc, *.xls, *.ppt). Odkaz „acroread“ směřuje do „/mnt/programy/wine_bin“ na spustitelný script „run_pdf“ obdobně odkaz „ooffice“ ukazuje na spustitelný script „run_ooffice“ umístěný taktéž ve složce „/mnt/programy/wine_bin“ Ve složce „/mnt/programy/wine_bin/“ máme samozřejmě nachystány spustitelné scripty „run_acroread“ a „run_ooffice“ s následujícím obsahem :
– obsah scriptu „run_acroread“

#!/bin/bash
#
# pokud je nainstalovan acroread
# acroread "`wine winepath -u "$1"`"
# pokud se používá evince
evince "`wine winepath -u "$1"`"
exit 0

– obsah scriptu „run_ooffice“

#!/bin/sh
#
# ooffice "`wine winepath -u "$1"`"
libreoffice "`wine winepath -u "$1"`"
exit 0
 

Pozn.- pro předávání parametrů do otvíraného programu (acroread, evince nebo libreoffice) jsou klíčové uvozovky a obrácené apostrofy tak, jak jsou uvedeny.

 Vytvoření spouštěče pro konkrétní aplikaci – Školské zákony 2012

Na ploše uživatel „karel“ vytvoříme spouštěč s názvem „ŠZ_2012“, můžeme vyplnit položky „Název“, „Popis“ a „Poznámka“. Jako položku „Příkaz“ pak vložíme :

WINEPREFIX=$HOME/.wine_bakalari wine /mnt/programy/Školské\ zákony-2012/cont32.exe

Nakonec můžeme spouštěči na ploše vybrat pěknou ikonku (na těch CD nějaké ikonky bývají) poklepem spustíme, zkontrolujeme zda ze spuštěného programu můžeme skutečně otvírat příslušné dokumenty pomocí kancelářského balíku nainstalovaném na hostitelském PC, počkáme na uznalé pokývání hlavou a uvolníme křeslo/židli uživateli „karel“.

Příště to bude o LTSP serveru pro cca 100 tenkých klientů.

1 komentář u „Asociace přípon ve Wine“

Komentáře nejsou povoleny.