Re: [問題] 非GL的xscreensaver?

看板Linux作者 (PCMan 知識+)時間17年前 (2009/02/19 04:23), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《soom ()》之銘言: : 因為小弟手邊有一部舊P4的機器必須要跑螢幕保護程式同時又做LAMP服務 : 但是其內建的顯示晶片在Debian GNU/Linux 5底下似乎抓不到可用的Driver : 所以想找一個輕量一點的螢幕保護程式,只要將指定帳號內某資料夾 : (ex. /home/user/Desktop/pic )的圖片檔以slideshow方式循環播出 : 查找xscreensaver的faq可以看到他建議使用ChBg或xv : ( http://www.jwz.org/xscreensaver/faq.html#slideshow ) : 但在Debian 5的套件庫中似乎都找不到可用的套件,ChBg是unstable : xv則是連影子都看不到。直接抓source下來編也都是Error收場 : 不知道有沒有類似功能的軟體可以使用? : 還是只能砍掉重練(囧) 如果你沒有一定非要是螢幕保護程式不可的話...下面這個非常精簡的小程式就可以用 另外,這個程式只有 54 行,其實也是適合拿來當作 gtk+ 的範例程式啦 XD 以下程式碼以 GNU GPL2 授權釋出,請存檔成 slideshow.c 編譯方式:gcc `pkg-config gtk+-2.0 --cflags --libs` slideshow.c -o slideshow 使用方式:slideshow <換圖的間隔秒數> <包含圖檔的目錄名> 結束方式:使用 Window manager 的關閉視窗熱鍵,例如 Alt+F4 #include <gtk/gtk.h> #include <stdlib.h> static GtkWidget *win, *img; static GList *files = NULL, *f = NULL; gboolean on_timeout(gpointer user_data){ GdkPixbuf* pix; _retry: g_debug(f->data); pix = gdk_pixbuf_new_from_file_at_scale(f->data, img->allocation.width, img->allocation.height, TRUE, NULL); f = f->next ? f->next : files; if(pix){ gtk_image_set_from_pixbuf(img, pix); g_object_unref(pix); } else if( f != files ) goto _retry; return TRUE; } static gboolean on_init(gpointer user_data){ on_timeout(user_data); return FALSE; } void get_files(const char* path){ char* fn; GDir* dir = g_dir_open(path, 0, NULL); if(!dir) return; while(fn = g_dir_read_name(dir)){ files = g_list_prepend(files, g_build_filename(path,fn,NULL)); if(g_file_test(files->data, G_FILE_TEST_IS_DIR)) get_files(files->data); } g_dir_close(dir); } int main(int argc, char** argv){ GdkColor black={0}; gtk_init(&argc, &argv); if(argc < 3) return 1; get_files(argv[2]); if(!files) return 1; f=files; win = gtk_window_new(GTK_WINDOW_TOPLEVEL); img = gtk_image_new(); gtk_container_add(win, img); gtk_window_fullscreen(win); gtk_widget_modify_bg(win, GTK_STATE_NORMAL, &black); g_timeout_add(atoi(argv[1])*1000, on_timeout, NULL); g_timeout_add(500, on_init, NULL); g_signal_connect(win, "delete-event", G_CALLBACK(gtk_main_quit), NULL); gtk_widget_show_all(win); gtk_main(); return 0; } 在這種用途來說,gtk+ 算是也滿好用的。 如果你用 pygtk,程式又會更短了! -- 個人網頁: http://pcman.sayya.org/ 上面有自畫像及各種聯絡資訊 Blog: http://pcman.sayya.org/blog.php?id=pcman PCMan 全系列 BBS 連線軟體 http://pcman.ptt.cc/ http://pcmanx.csie.net/ 新酷音輸入法 for Windows http://chewing.csie.net/ IE Tab Firefox plugin/extension http://ietab.mozdev.org/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.114.121.121 ※ 編輯: HZYSoft 來自: 59.114.121.121 (02/19 04:27)
文章代碼(AID): #19d6upX1 (Linux)
文章代碼(AID): #19d6upX1 (Linux)