Fórum Ubuntu CZ/SK
Ostatní => Tipy a triky pro Linux => Téma založeno: Martin Šácha 09 Května 2011, 20:22:09
-
Protože nové verze flash playeru neukládají videa do /tmp/FlashXXXXX a bashové scripty k nalezení na internetu mi nefungují, sbastlil jsem v C++ program, který to řeší pro více videí najednou (testováno na Firefoxu 4 a 5). :)
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int main()
{
FILE* pipe=popen("pidof plugin-container","r");
char buff[6];
string pid="";//obsahuje PID procesu plugin-container
if(fgets(buff,6,pipe)!=NULL)
pid+=buff;
pclose(pipe);
//nacteni obsahu /proc/PID/fd/
FILE* pipe2=popen((char*)("cd /proc/"+pid+"/fd/ && ls -l").c_str(),"r");
char buff2[255];//buffer jednotlivych radek vypisu
string cislo="";//nazev pod kterym se video nachazi
string cislo_buf="";
int start=0;
int start_name=0;
while(fgets(buff2,255,pipe2)!=NULL)//prochazi vypis
{
start=0;
start_name=0;
cislo="";
cislo_buf="";
for(start=0;start<255;start++)
{
if(buff2[start]=='>')//zachytny bod
{
start_name=start+2;
start-=2;
while(buff2[start-1]!=' ')//ziskani nazvu souboru
{
start--;
cislo_buf=buff2[start];
cislo_buf+=cislo;
cislo=cislo_buf;
}
break;
}
}
if(buff2[start_name]=='/'&&buff2[start_name+1]=='t'&&buff2[start_name+2]=='m'&&buff2[start_name+3]=='p')
{
system(("cp /proc/"+pid+"/fd/"+cislo+" ~/Plocha/").c_str());
}
}
pclose(pipe2);
return 0;
}
Snad se to někomu bude hodit.
Omluvte prosím čistotu kódu, když někoho napadne zlepšení, budu rád ;)
PS. Opraveny statické řetězce (jméno a skupina).
-
Ha, zásadní chyba, počkejte chvíli na patch (statická délka řetězce).
-
http://forum.ubuntu.cz/index.php?topic=53994.0 (http://forum.ubuntu.cz/index.php?topic=53994.0)
Sem jsi se koukal?
-
http://forum.ubuntu.cz/index.php?topic=53994.0 (http://forum.ubuntu.cz/index.php?topic=53994.0)
Sem jsi se koukal?
Bohoušův script se zasekl u "grep bash" a nevypsal nic.
Daysleeperovo taky nešlo, jinak bych to použil :)
Oprava je na světě, už by to mělo šlapat všem :)
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int main()
{
FILE* pipe=popen("pidof plugin-container","r");
char buff[6];
string pid="";//obsahuje PID procesu plugin-container
if(fgets(buff,6,pipe)!=NULL)
pid+=buff;
pclose(pipe);
//nacteni obsahu /proc/PID/fd/
FILE* pipe2=popen((char*)("cd /proc/"+pid+"/fd/ && ls -l").c_str(),"r");
char buff2[255];//buffer jednotlivych radek vypisu
string cislo="";//nazev pod kterym se video nachazi
string cislo_buf="";
int start=0;
int start_name=0;
while(fgets(buff2,255,pipe2)!=NULL)//prochazi vypis
{
start=0;
start_name=0;
cislo="";
cislo_buf="";
for(start=0;start<255;start++)
{
if(buff2[start]=='>')//zachytny bod
{
start_name=start+2;
start-=2;
while(buff2[start-1]!=' ')//ziskani nazvu souboru
{
start--;
cislo_buf=buff2[start];
cislo_buf+=cislo;
cislo=cislo_buf;
}
break;
}
}
if(buff2[start_name]=='/'&&buff2[start_name+1]=='t'&&buff2[start_name+2]=='m'&&buff2[start_name+3]=='p')
{
system(("cp /proc/"+pid+"/fd/"+cislo+" ~/Plocha/").c_str());
}
}
pclose(pipe2);
return 0;
}
-
Myslím, že Bohouš chtěl napsat původně 'Flash', místo 'bash' :)
-
Diky, opraveno, to jsem si opravdu nevsiml ;D
jsem to z toho virtualboxu blbe pretukal do fora
-
Co funguje mně:
Opera 11.10 Maverick 64bit:
pushd `pwd`;cd /proc/`pidof operapluginwrapper-ia32-linux`/fd/; cp `ls -l|grep Flash|cut -d " " -f8` `xdg-user-dir DESKTOP`; popd
Firefox 4.0 Natty 32bit
pushd `pwd`;cd /proc/`pidof plugin-container`/fd/; cp `ls -l|grep Flash|cut -d " " -f8` `xdg-user-dir DESKTOP`; popd
Firefox 4.0.1 Maverick 64bit
pushd `pwd`;cd /proc/`pidof npviewer.bin`/fd/; cp `ls -l|grep Flash|cut -d " " -f8` `xdg-user-dir DESKTOP`; popd
Všechno Flash Player 10,2,159,1
-
Firefox 4.0 Natty
pushd `pwd`;cd /proc/`pidof plugin-container`/fd/; cp `ls -l|grep Flash|cut -d " " -f8` `xdg-user-dir DESKTOP`; popd
Všechno Flash Player 10,2,159,1
Konečně něco co funguje:) Takže potvrzuji funkčnost i pro FF5a v Lucidu.
-
Napsal jsem ještě univerzální příkaz pro všechny prohlížeče, který kopíruje videa na Plochu. Předpokladem pro funkčnost je to, že nemáte těch prohlížečů (obecně aplikací využívajících libflashplugin.so) spuštěno více, to by se muselo dále ošetřit.
pushd `pwd`; cd /proc/`ps ax|grep libflashplayer.so|grep -v grep|awk '{print $1}'`/fd; cp `ls -l|grep Flash| awk '{print $8}'` `xdg-user-dir DESKTOP`; popd
pushd/popd je tam jen kvůli tomu, abyste se po provedení příkazu vrátili do původního adresáře.
-
Asi něco dělám špatně:
bash: cd: /proc//fd/: Adresář nebo soubor neexistuje
cp: za „/home/stehno/Plocha“ chybí název cílového souboru
Více informací získáte příkazem „cp --help“.
co?
-
Asi něco dělám špatně:
bash: cd: /proc//fd/: Adresář nebo soubor neexistuje
cp: za „/home/stehno/Plocha“ chybí název cílového souboru
Více informací získáte příkazem „cp --help“.
co?
Máš-li spuštěno více aplikací, které používají ten flajš plugin, tak se tohle stane. Zjistíš jednoduše:
ps ax|grep libflashplayer.so
Pokud to chceš trochu pochopit, můžeš kouknout sem (http://gdhnotes.blogspot.com/2011/05/jak-si-zkopirovat-flash-videa-z-cache.html).
-
Funguje to v FF a v Chromiu v Chromu ne
-
Funguje to v FF a v Chromiu v Chromu ne
Jo, už je mi to jasné. Je to tím, že Chromium spouští pro každý tab nový proces a pokud máš otevřeno více tabů s flajšem, je to špatně. Až budu mít čas napíšu skript, který je obslouží všechny.
-
Já to původně zkoušel v Chromu, ale ten mi nevypsal nic.
Díky za odkaz a radu.
-
Tak ani ten Chromajzlík nespouští víc flajšových pluginů, takže ten můj původní příkaz musí fungovat pokud není spuštěn ještě jiný prohlížeč. Nicméně tady je úprava, která vytahá flajše na Plochu ze všeho, co zrovna operuje:
pushd `pwd`;ps ax|grep libflashplayer.so|grep -v grep|awk '{print $1}'|while read pid;do cd /proc/$pid/fd;ls -l |grep Flash| awk '{print $8}'|while read file;do cp $file "`xdg-user-dir DESKTOP`/$pid$file";done;done;popd
-
Tak ani ten Chromajzlík nespouští víc flajšových pluginů, takže ten můj původní příkaz musí fungovat pokud není spuštěn ještě jiný prohlížeč. Nicméně tady je úprava, která vytahá flajše na Plochu ze všeho, co zrovna operuje:
pushd `pwd`;ps ax|grep libflashplayer.so|grep -v grep|awk '{print $1}'|while read line;do cd /proc/$line/fd;ls -l |grep Flash| awk '{print $8}'|while read file;do cp $file `xdg-user-dir DESKTOP`;done;done;popd
Respect K+
-
od prechodu z 10.10 na 11.4 pri pokuse sa pripojit na net cez wifi zamrza pc co s tym ???
-
od prechodu z 10.10 na 11.4 pri pokuse sa pripojit na net cez wifi zamrza pc co s tym ???
Promiň, ale v tomto vlákně wifi neřešíme a řešit nebudem ;)
-
To bude tim ze se po pouziti vyse uvedenych skriptu ukladaji pakety na plochu ;D
-
Čus. Funguje tohle ještě někomu? Mě nějak neeee. :/
-
Čus. Funguje tohle ještě někomu? Mě nějak neeee. :/
Bohužel už dávno ne, ani jsem nezkoumal, jestli to má ještě rozumné řešení..
-
No, ale docela by se mi to hodilo. :) Je blbý, když nakešované video nemůžeš uložit. A znova to stahovat nějakým pluginem stojí za houby. Nechceš to ještě zkouknout? ;)
-
U gnashe si muzes nastavit, kam ti ty videa bude ukladat do cache. Bohuzel si ale nepustis flash jinde nez na youtube...
-
Hmm, to je docela blbé. :)
-
Takže to rozumné řešení má, dnes mi to nedalo:
Jak si zkopírovat flash videa z cache dnes (http://gdhnotes.blogspot.cz/2013/03/jak-si-zkopirovat-flash-videa-z-cache.html)