Fórum Root.cz

Hlavní témata => Server => Téma založeno: David123 29. 04. 2013, 13:43:53

Název: Tisk pod uživatelem www-data
Přispěvatel: David123 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í :)
 
Název: Re:Tisk pod uživatelem www-data
Přispěvatel: monitor 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...
Název: Re:Tisk pod uživatelem www-data
Přispěvatel: David123 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?
Název: Re:Tisk pod uživatelem www-data
Přispěvatel: David123 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.
Název: Re:Tisk pod uživatelem www-data
Přispěvatel: David123 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
Název: Re:Tisk pod uživatelem www-data
Přispěvatel: Sten 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.
Název: Re:Tisk pod uživatelem www-data
Přispěvatel: 3ugeene 20. 05. 2013, 17:09:54
a nejakej usermod www-data printer (ci jaka je skupina pro tisk0 by nefungoval)?


Název: Re:Tisk pod uživatelem www-data
Přispěvatel: michal 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

Název: Re:Tisk pod uživatelem www-data
Přispěvatel: David123 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ů.
Název: Re:Tisk pod uživatelem www-data
Přispěvatel: David123 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
Název: Re:Tisk pod uživatelem www-data
Přispěvatel: David123 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 :)
Název: Re:Tisk pod uživatelem www-data
Přispěvatel: David123 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.
Název: Re:Tisk pod uživatelem www-data
Přispěvatel: David123 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
Název: Re:Tisk pod uživatelem www-data
Přispěvatel: danielsoft 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í...)
Název: Re:Tisk pod uživatelem www-data
Přispěvatel: David123 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();