Tisk pod uživatelem www-data

David123

Tisk pod uživatelem www-data
« kdy: 29. 04. 2013, 13:43:53 »
Ahoj, využívám distribuci Debian a nainstaloval jsem si tiskárnu - HP CP2025, provozuju ji přes CUPS (resp. hplip). Tiskárna je nastavena jako výchozí a žádná jiná v systému není. Pokud tisku pod uživatelem root tak je vše ok, stránka se vytiskne.

Kód: [Vybrat]
root@server:/home/david# echo "test" | lpr
Potřebuju vytisknout xlsx soubor na základě kliknutí na webové stránce, problém je, že pod www-data se mi to zaboha nedaří. Netuším kde dělám chybu. Když zadám pod rootem/či jiným uživatelem třeba uživatelem david
Kód: [Vybrat]
libreoffice --headless -p soubor.xlsx > /dev/null 2>&1 &
Tak se stránka vpořádku vytiskne a je vidět ve frontě CUPSu. Pokud daný příkaz pustím z php (pod uživatelem www-data) do tiskové fronty se nic nedostane:

Kód: [Vybrat]
<?php
    
echo exec('whoami');
    
chdir('/var/www/number/files');
    
exec("libreoffice --headless -p soubor.xlsx > /dev/null 2>&1 &");
    die();
?>


Pokud ale použiju přímo lpr tak se například slovo vytiskne:

Kód: [Vybrat]
<?php
    
echo exec('whoami');
    
exec('echo "ahoj" | lpr');
?>

Prosím, kde dělám chybu? Předpokládám, že problém je uživatel www-data s kombinací libreoffice. Ještě dodám, že nepoužívám Xka, pouze konzoli. Btw zkoušel jsem se přepnout v terminálu pod www-data a výsledek je stejný.. do tiskové fronty se nic nedostane.

Díky za nakopnutí :)
 


monitor

Re:Tisk pod uživatelem www-data
« Odpověď #1 kdy: 29. 04. 2013, 14:08:52 »
http://www.linuxforums.org/forum/red-hat-fedora-linux/193804-apache-user-cant-run-libreoffice-headless.html

"So I figured this out after much tinkering. The Libreoffce --headless command needs to have a writeable temp directory and uses the users HOME directory for this. I need to put export HOME=/apache/writeable/directory (e.g. export HOME=/var/www/printstore) and the script runs like a champ"

Cize, libreoffice potrebuje mat nejaky writeable temp adresar, ale asi pouziva $HOME/tmp ci nieco take, takze riesenie je napr. mu podstrcit nejaky falosny write-able HOME...

David123

Re:Tisk pod uživatelem www-data
« Odpověď #2 kdy: 29. 04. 2013, 14:15:18 »
Když pod rootem udělám su www-data a zkusím příkaz set, tak vidím že home je nastaveno na
Kód: [Vybrat]
HOME='/var/www'
A složka /var/www má vlastníka i skupinu root a práva drwxrwxrwx, takže by to mělo fungovat i tak, ne?

David123

Re:Tisk pod uživatelem www-data
« Odpověď #3 kdy: 29. 04. 2013, 14:21:20 »
Tak jsem zkusil na začátek scriptu přidat toto:
Kód: [Vybrat]
putenv('HOME=/tmp');
a zatím to vypadá, že to funguje! Moc děkuju! Musím to ale ještě pořádně otestovat, zda-li to funguje vždy.

David123

Re:Tisk pod uživatelem www-data
« Odpověď #4 kdy: 20. 05. 2013, 12:08:07 »
Tak to vypadalo, že to funguje. Ale jenom když je někdo na serveru zalogovaný přes SSH terminál. Nechápu.

Když přes webové rozhraní odešlu k tisku třeba 10 dokumentů, tak je ve frontě CUPS nevidím. Otevřu ssh a přihlásím se na server, nejdříve jako david, potom udělám su... a najednou tiskárna začne tisknout a ve frontě se mi objeví všech 10 dokumentů. Čím to může být? :(

Díky všem za reakce


Sten

Re:Tisk pod uživatelem www-data
« Odpověď #5 kdy: 20. 05. 2013, 17:01:25 »
Těžko říct, asi to požaduje dostupný terminál, třeba to tam něco píše. Zatím bych to řešil tak, že bych spustil pod uživatelem www-data screen -d -m.

3ugeene

Re:Tisk pod uživatelem www-data
« Odpověď #6 kdy: 20. 05. 2013, 17:09:54 »
a nejakej usermod www-data printer (ci jaka je skupina pro tisk0 by nefungoval)?



michal

Re:Tisk pod uživatelem www-data
« Odpověď #7 kdy: 20. 05. 2013, 17:33:09 »
a co pise po neuspesnem tisku
/var/log/everything.log (v ubuntu je to tusim var/log/syslog )
popripade jine logy (var/log/auth.log ) ??

pokud pujdes na webove rozhrani cupsu (http://ip-addr:631 napr http://127.0.0.1:631 )
tak muzes v zalozce administration zaskrtnout "save debugging information for troubleshoting"
pak restartuj cups (nebo pocitac;), posli znova tisk a hod tu var/log/cups/error_log a access_log


David123

Re:Tisk pod uživatelem www-data
« Odpověď #8 kdy: 20. 05. 2013, 21:37:06 »
Možnost vyzkoušet budu mít až zítra. Ještě mě napadlo přidat uživatele www-data do skupiny lpadmin.

Připadá mi totiž, že místo tisku se úlohy uloží v nějakém bufferu, který se pošle na tiskárnu až po přihlášení roota -> možná problém s právy? Zkusím mrknout do těch logů.

David123

Re:Tisk pod uživatelem www-data
« Odpověď #9 kdy: 22. 05. 2013, 10:32:41 »
Tak jsem dneska opět zkoušel. Pokud udělám tisk z webové stránky (pod tím uživatelem www-data) tak se nic neděje až do té doby, dokud se nepřihlásím přes ssh na jakéhokoliv uživatele - třeba david. Následně se začnou plnit logy:

access log:
Kód: [Vybrat]
localhost - - [22/May/2013:10:26:44 +0200] "POST /printers/HP_Color_LaserJet_CP2025n HTTP/1.1" 200 292 Create-Job successful-ok
localhost - - [22/May/2013:10:26:44 +0200] "POST /printers/HP_Color_LaserJet_CP2025n HTTP/1.1" 200 45879 Send-Document successful-ok
localhost - - [22/May/2013:10:26:53 +0200] "POST /printers/HP_Color_LaserJet_CP2025n HTTP/1.1" 200 292 Create-Job successful-ok
localhost - - [22/May/2013:10:26:53 +0200] "POST /printers/HP_Color_LaserJet_CP2025n HTTP/1.1" 200 45448 Send-Document successful-ok

page log:
Kód: [Vybrat]
HP_Color_LaserJet_CP2025n 80 www-data [22/May/2013:10:27:03 +0200] 1 1DEBUG2: - localhost 8237430 - -
HP_Color_LaserJet_CP2025n 81 www-data [22/May/2013:10:27:16 +0200] 1 1DEBUG: - localhost 8233995 - -
HP_Color_LaserJet_CP2025n 81 www-data [22/May/2013:10:27:39 +0200] 1 1 - localhost 8233995 - -
HP_Color_LaserJet_CP2025n 82 www-data [22/May/2013:10:27:40 +0200] 1 1DEBUG: - localhost 8253122 - -
HP_Color_LaserJet_CP2025n 82 www-data [22/May/2013:10:28:03 +0200] 1 1 - localhost 8253122 - -
HP_Color_LaserJet_CP2025n 83 www-data [22/May/2013:10:28:03 +0200] 1 1DEBUG: - localhost 8233999 - -
a proběhne tisk... čím to může být? Spouští se snad pod uživatelem david nějaký daemon co projde nějakou frontu na tisk a pošle ji na tiskárnu?

Je mi jasné, že to bude naprostá blbost, ale já na to ne a ne přijít :(

Předem díky za reakce

David123

Re:Tisk pod uživatelem www-data
« Odpověď #10 kdy: 22. 05. 2013, 10:50:11 »
robin martinez: díky, vypadá to, že to bude ono :)

Našel jsem něco s podobnou tematikou: http://lukas.zapletalovi.com/2011/02/skenovaci-server-v-linuxu.html

Citace
Bacha, To ale není všechno. Nyní ten špek, který mi zabral asi 40 minut bádání, než jsem to vydoloval z logů. Uživatel www-data musí dostat práva na skenování.

# usermod -G lp,lpadmin,saned www-data

Takže jsem udělal
Kód: [Vybrat]
usermod -G lp,lpadmin,saned www-data a vypadá to, že je to OK... ještě zkusím restartovat server, abych měl jistotu :)

David123

Re:Tisk pod uživatelem www-data
« Odpověď #11 kdy: 22. 05. 2013, 16:49:21 »
Tak to vypadá, že to nepomohlo. Všechno se začne tisknout až když se přihlásí nějaký uživatel, z logů se mi v podstatě nic vyčíst nepovedlo.

Netuším, co dál vyzkoušet.

David123

Re:Tisk pod uživatelem www-data
« Odpověď #12 kdy: 22. 05. 2013, 17:40:23 »
Ještě jsem našel spot, kde tazatel řeší téměř stejný problém:

http://opensource.tejasbarot.com/forums/vglug-vibrant-gnulinux-user-group/libreoffice-problem

danielsoft

Re:Tisk pod uživatelem www-data
« Odpověď #13 kdy: 22. 05. 2013, 17:45:39 »
co si ještě nějak pohrát s tou proměnnou $HOME ? čili zajistit, aby to byl nějaký adresář, do kterého www-data může vždy zapisovat a který v ten moment doopravdy existuje (napadá mě, že /tmp může být na tmpfs a namountuje se, až se někdo přihlásí...)

David123

Re:Tisk pod uživatelem www-data
« Odpověď #14 kdy: 24. 05. 2013, 08:21:42 »
Tak jsem to změnil na /var/www kde je 777 a stejně to začne tisknout až po přihlášení libovolného uživatele... :(

Kód: [Vybrat]
$files = '';
    foreach ($objects as $obj) {
      $files .= ' '.trim($obj).'.xlsx';
    }
    $cmd = "export HOME=/var/www;/usr/bin/libreoffice --headless -p$files > /dev/null 2>&1 &";
    exec($cmd);
    die();