troubleshooting:thumbnails
Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revizePředchozí verzeNásledující verze | Předchozí verze | ||
| troubleshooting:thumbnails [2017/11/11 13:39] – [factory sample code] djbuldog | troubleshooting:thumbnails [2025/08/28 10:09] (aktuální) – upraveno mimo DokuWiki 127.0.0.1 | ||
|---|---|---|---|
| Řádek 13: | Řádek 13: | ||
| * gnome-thumbnail-factory je knihovna, volá thumbnails, viz description [[https:// | * gnome-thumbnail-factory je knihovna, volá thumbnails, viz description [[https:// | ||
| - | * pokusy | ||
| - | * vytvořil jsem [[troubleshooting: | ||
| - | * ''/ | ||
| - | * jestli bude vůbec zavolán a co dostane na vstup | ||
| - | * pak bych mohl debugovat ten program.... který selhal | ||
| - | * binárka se vůbec nezavolala při přístupu na fotky v nautilus (ani po vymazání cache) | ||
| - | * přitom v mime je minimálně '' | ||
| - | * dotazy na IRC | + | ===== Pokusy ===== |
| - | * Hi, after some upgrades (4 months ago) the thumbs for files are not generated. I found out that gnome-thumbnail-factory should call thumbnailers. I have tried to simple wrap gdk-pixbuf-thumbnailer and it is not execuded. I dont know why :) Only / | + | |
| - | ===== nápady ===== | + | * vytvořil jsem [[troubleshooting: |
| + | * ''/ | ||
| + | * jestli bude vůbec zavolán a co dostane na vstup | ||
| + | * pak bych mohl debugovat ten program.... který selhal | ||
| + | * binárka se vůbec nezavolala při přístupu na fotky v nautilus (ani po vymazání cache) | ||
| + | * přitom v mime je minimálně '' | ||
| * vytvořit si vlastní program, co používá gnome-thumbnail-factory | * vytvořit si vlastní program, co používá gnome-thumbnail-factory | ||
| Řádek 31: | Řádek 28: | ||
| * našel jsem krásný [[https:// | * našel jsem krásný [[https:// | ||
| * co to vytáhnout ze zdrojáků nautilus? | * co to vytáhnout ze zdrojáků nautilus? | ||
| - | * musel jsem doinstalovat: | + | * musel jsem doinstalovat: |
| + | * '' | ||
| * zasekl jsem se na závislosti, | * zasekl jsem se na závislosti, | ||
| - | ==== factory sample code ==== | + | ==== Vlastní program |
| * bude to takový mix ... přepsání toho python sample do c++ po vzoru nautilus :D :D | * bude to takový mix ... přepsání toho python sample do c++ po vzoru nautilus :D :D | ||
| <code makefile> | <code makefile> | ||
| - | CXX=g++ | + | LIBS = $(shell pkg-config gnome-desktop-3.0 --libs) $(shell pkg-config gnome-vfs-2.0 --libs) |
| - | CFL=$(shell pkg-config gnome-desktop-3.0 --cflags) | + | INCL = $(shell pkg-config gnome-desktop-3.0 --cflags) |
| + | CXXFLAGS = -O2 -g -Wall $(INCL) -DGNOME_DESKTOP_USE_UNSTABLE_API | ||
| - | all: main.cpp | + | OBJS = thumb-sampl3.o |
| - | ${CXX} -g -o main main.cpp | + | TARGET = thumb-sampl3 |
| + | |||
| + | $(TARGET): $(OBJS) | ||
| + | $(CXX) -o $(TARGET) $(OBJS) $(LIBS) | ||
| + | |||
| + | all: $(TARGET) | ||
| + | |||
| + | clean: | ||
| + | rm -f $(OBJS) $(TARGET) | ||
| </ | </ | ||
| <code cpp> | <code cpp> | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| #include < | #include < | ||
| + | #include < | ||
| - | main() { | + | using namespace std; |
| - | | + | int main(int argc, char **argv) { |
| + | |||
| + | | ||
| + | char *fpath; | ||
| char *uri; | char *uri; | ||
| time_t mtime; | time_t mtime; | ||
| - | char *mime_type; | + | |
| + | |||
| + | if (argc!=2) { | ||
| + | cerr << "No input file" << endl; | ||
| + | return 1; | ||
| + | } | ||
| + | |||
| + | fpath = argv[1]; | ||
| + | cerr << " | ||
| thumbnail_factory = gnome_desktop_thumbnail_factory_new (GNOME_DESKTOP_THUMBNAIL_SIZE_LARGE); | thumbnail_factory = gnome_desktop_thumbnail_factory_new (GNOME_DESKTOP_THUMBNAIL_SIZE_LARGE); | ||
| + | |||
| + | if (!thumbnail_factory) { | ||
| + | cerr << " | ||
| + | return 1; | ||
| + | } | ||
| + | |||
| + | cerr << " | ||
| + | cerr << GNOME_DESKTOP_THUMBNAIL_SIZE_LARGE << endl; | ||
| GFile *loc; | GFile *loc; | ||
| + | loc = g_file_new_for_path(fpath); | ||
| uri = g_file_get_uri (loc); | uri = g_file_get_uri (loc); | ||
| + | cerr << "uri: " << uri << endl; | ||
| + | |||
| + | mime_type = gnome_vfs_mime_type_from_name(fpath); | ||
| + | cerr << " | ||
| + | |||
| + | struct stat finfo; | ||
| + | if (stat(fpath, | ||
| + | mtime = finfo.st_mtim.tv_sec; | ||
| + | } else { | ||
| + | cerr << " | ||
| + | return 1; | ||
| + | } | ||
| + | |||
| + | cerr << " | ||
| - | /* obe funkce vyuzivaji nautilus strukturu file-> | ||
| - | // mime_type = nautilus_file_get_mime_type (file); | ||
| - | // mtime = nautilus_file_get_mtime (file); | ||
| - | | ||
| - | mime_tyep = gnome_vfs_get_mime_type_for_name (loc); | ||
| - | | ||
| - | factory = get_thumbnail_factory (); | ||
| - | | ||
| gboolean res; | gboolean res; | ||
| - | res = gnome_desktop_thumbnail_factory_can_thumbnail (factory, | + | res = gnome_desktop_thumbnail_factory_can_thumbnail (thumbnail_factory, |
| uri, | uri, | ||
| | | ||
| | | ||
| - | | + | |
| - | g_free (uri); | + | |
| GdkPixbuf *pixbuf; | GdkPixbuf *pixbuf; | ||
| - | pixbuf = gnome_desktop_thumbnail_factory_generate_thumbnail (factory, | + | pixbuf = gnome_desktop_thumbnail_factory_generate_thumbnail (thumbnail_factory, |
| uri, | uri, | ||
| | | ||
| + | |||
| + | cerr << " | ||
| if (pixbuf) { | if (pixbuf) { | ||
| - | gnome_desktop_thumbnail_factory_save_thumbnail (factory, | + | gnome_desktop_thumbnail_factory_save_thumbnail (thumbnail_factory, |
| pixbuf, | pixbuf, | ||
| uri, | uri, | ||
| mtime); | mtime); | ||
| + | cerr << "after save_thumbnail" | ||
| g_object_unref (pixbuf); | g_object_unref (pixbuf); | ||
| } else { | } else { | ||
| - | gnome_desktop_thumbnail_factory_create_failed_thumbnail (factory, | + | |
| - | | + | // |
| - | | + | // |
| + | //cerr << "after create_failed_thumbnail" | ||
| + | |||
| + | cerr << " | ||
| } | } | ||
| + | |||
| + | //g_free (mime_type); | ||
| + | g_free (uri); | ||
| + | |||
| } | } | ||
| + | </ | ||
| + | |||
| + | ==== Zjištění z vlastního programu ==== | ||
| + | |||
| + | * z prostého spuštění programu jsem nic nezjistil | ||
| + | |||
| + | < | ||
| + | ./ | ||
| + | filepath: / | ||
| + | initialized with GNOME_DESKTOP_THUMBNAIL_SIZE_LARGE set to: 1 | ||
| + | uri: file:/// | ||
| + | mime_type: image/png | ||
| + | mtime: 1416338848 | ||
| + | can thumbnail res: 1 | ||
| + | generated pixbuf??: 0 | ||
| + | calling create_failed_thumbnail skipped | ||
| + | </ | ||
| + | |||
| + | * spuštění strace mi taky moc neřeklo | ||
| + | * spuštění programu na virtuálním debian fungovalo a náhled vytvořilo | ||
| + | * z porovnání strace jsem zjistil že: | ||
| + | * virtuální debian soubor s png obrázkem otevřel a následně načítal knihovnu '' | ||
| + | * potom soubor s obrázkem celý přečetl | ||
| + | * pharaon soubor vůbec neotevřel snažil se otevírat nějaký soubor flatpak-info | ||
| + | |||
| + | * když jsem na pharon spustil strace více ukecaný, tak jsem se konečně dozvěděl, co se děje :) | ||
| + | |||
| + | < | ||
| + | strace -vf -s 1024 ./ | ||
| + | .. | ||
| + | pid 15953] execve("/ | ||
| + | ... | ||
| + | pid 15953] write(2, " | ||
| + | .. | ||
| + | </ | ||
| + | |||
| + | * on se snaží spusitt bwrap (BubbleWrap), | ||
| + | * dělá to asi kvůli zvýšení bezpečnosti | ||
| + | * např. ta zranitelnost spuštění škodlivého kódu přes wine při pokusu extrahovat ikonu z exe souboru | ||
| + | * kontroloval jsem, že bwrap má nastaven setuidbit, ale v kernel ty user namespaces ('' | ||
| + | |||
| + | |||
| + | * zapnutí v kernel napomohlo :D | ||
| + | * debian prý by default blokuje user namespaces přes sysctl | ||
| + | * je vůbec ten usernamespace v kernel potřeba? neměl by stačit ten setuidbit? | ||
| + | * tohle se snaží udělat thumbnail-factory | ||
| + | |||
| + | < | ||
| + | mkdir / | ||
| + | "/ | ||
| + | </ | ||
| + | |||
| + | * výsledek | ||
| + | |||
| + | < | ||
| + | bwrap: Creating new namespace failed, likely because the kernel does not support user namespaces. | ||
| + | </ | ||
| + | |||
| + | * přes strace jsem našel jen jedno podezřelé (za to může asi to zakázané user ns přes sysctl?) | ||
| + | |||
| + | < | ||
| + | stat("/ | ||
| + | </ | ||
| + | |||
| + | * zjistil jsem, že problém jde replikovat nejjednodušeji takhle | ||
| + | < | ||
| + | bwrap --unshare-all bash | ||
| </ | </ | ||
| + | * hele.. a co dělá ten unshare-all? | ||
| + | * https:// | ||
| + | * zapnul jsem namespace pro PID, UTS, IPC a jede to !!! :) | ||
troubleshooting/thumbnails.1510403984.txt.gz · Poslední úprava: (upraveno mimo DokuWiki)
