特殊:Badtitle/NS100:RotateWallpapers:修订间差异

来自Ubuntu中文
跳到导航跳到搜索
Oneleaf留言 | 贡献
新页面: {{From|https://help.ubuntu.com/community/RotateWallpapers}} {{Languages|UbuntuHelp:RotateWallpapers}} This program was custom made by a developer in the nautilus channel. Thanks gicmo! ...
 
Wikibot留言 | 贡献
无编辑摘要
 
(未显示2个用户的4个中间版本)
第1行: 第1行:
{{From|https://help.ubuntu.com/community/RotateWallpapers}}
{{From|https://help.ubuntu.com/community/RotateWallpapers}}
{{Languages|UbuntuHelp:RotateWallpapers}}
{{Languages|UbuntuHelp:RotateWallpapers}}
<<Include(Tag/Deletion)>>
This program was custom made by a developer in the nautilus channel.
This program was custom made by a developer in the nautilus channel.
Thanks gicmo!
Thanks gicmo!
change-bg rotates your wallpaper (jpg/png) in a gnome enviornment over a specified amount of time.
change-bg rotates your wallpaper (jpg/png) in a gnome enviornment over a specified amount of time.
=== Dependencies ===
=== Dependencies ===
Install both of the following.
Install both of the following.
'''libgnomevfs2-dev'''
'''libgnomevfs2-dev'''
'''build-essential'''
'''build-essential'''
=== Source Code ===
=== Source Code ===
*Copy this source code into a blank text document.
1.Copy this source code into a blank text document.
 
2.Save as change-bg.c
*Save as change-bg.c
<pre><nowiki>
<pre><nowiki>
/*  
/*  


Compile with:
  Compile with:
gcc -Wall -o change-bg `pkg-config --cflags --libs gnome-vfs-2.0 gconf-2.0` change-bg.c
  gcc -Wall -o change-bg `pkg-config --cflags --libs gnome-vfs-2.0 gconf-2.0` change-bg.c
 
 
Copyright (C) 2005, Christian Kellner
  Copyright (C) 2005, Christian Kellner


The Gnome Library is free software; you can redistribute it and/or
  The Gnome Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
  modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
  published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
  License, or (at your option) any later version.


The Gnome Library is distributed in the hope that it will be useful,
  The Gnome Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
  but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Library General Public License for more details.
  Library General Public License for more details.


You should have received a copy of the GNU Library General Public
  You should have received a copy of the GNU Library General Public
License along with the Gnome Library; see the file COPYING.LIB.  If not,
  License along with the Gnome Library; see the file COPYING.LIB.  If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
  Boston, MA 02111-1307, USA.




第139行: 第133行:
mins = atoi (argv[1]);
mins = atoi (argv[1]);
if (text_uri === NULL || mins === 0) {
if (text_uri == NULL || mins == 0) {
fprintf (stderr, "Usage: %s <seconds> 0> <uri>\n", argv[0]);
fprintf (stderr, "Usage: %s <seconds> 0> <uri>\n", argv[0]);
return 1;
return 1;
第174行: 第168行:
}
}
</nowiki></pre>
</nowiki></pre>
=== Compiling ===
=== Compiling ===
Change directories to where change-bg.c is located and run the following command.
Change directories to where change-bg.c is located and run the following command.
第180行: 第173行:
gcc -Wall -o change-bg `pkg-config --cflags --libs gnome-vfs-2.0 gconf-2.0` change-bg.c
gcc -Wall -o change-bg `pkg-config --cflags --libs gnome-vfs-2.0 gconf-2.0` change-bg.c
</nowiki></pre>
</nowiki></pre>
=== Using ===
=== Using ===
./change-bg <seconds> <location of wallpapers>
./change-bg <seconds> <location of wallpapers>
 
=== Doing it with a Bash script ===
[[category:CategoryDocumentation]] [[category:CategoryCleanup]]
As an alternative you could save the following script and call it from a startup program [Sessions].
Modify the WALLPAPER_LOCATION to the place where you store your wallpaper images.
<pre><nowiki>
#!/bin/bash
# change_wp [seconds]   Changes the wallpaper at a given interval of seconds.
# example: change_wp 3600 change the wallpaper every hour.
# If you do not supply any time it just changes the wallpaper and exits.
# Copyleft (C) 2007, Albert Bicchi [email protected]
WALLPAPER_LOCATION="/home/albert/wallpapers"
find "${WALLPAPER_LOCATION}" -iname '*.jp*g' -o -iname '*.png' > /tmp/wallpapers
TOTAL=`cat /tmp/wallpapers | wc -l`
while [ 1 ]
do
((LINE=RANDOM%TOTAL+1))
WALLPAPER=`sed -n "$LINE"p /tmp/wallpapers`
gconftool -t str -s /desktop/gnome/background/picture_filename "${WALLPAPER}"
if [ "$1" = "" ]; then
exit 0
fi
sleep "$1s"
done
</nowiki></pre>


[[category:UbuntuHelp]]
[[category:UbuntuHelp]]

2009年11月17日 (二) 20:32的最新版本

{{#ifexist: :RotateWallpapers/zh | | {{#ifexist: RotateWallpapers/zh | | {{#ifeq: {{#titleparts:RotateWallpapers|1|-1|}} | zh | | }} }} }} {{#ifeq: {{#titleparts:RotateWallpapers|1|-1|}} | zh | | }}

<<Include(Tag/Deletion)>> This program was custom made by a developer in the nautilus channel. Thanks gicmo! change-bg rotates your wallpaper (jpg/png) in a gnome enviornment over a specified amount of time.

Dependencies

Install both of the following. libgnomevfs2-dev build-essential

Source Code

1.Copy this source code into a blank text document. 2.Save as change-bg.c

/* 

   Compile with:
   gcc -Wall -o change-bg `pkg-config --cflags --libs gnome-vfs-2.0 gconf-2.0` change-bg.c
   
   Copyright (C) 2005, Christian Kellner

   The Gnome Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Library General Public License as
   published by the Free Software Foundation; either version 2 of the
   License, or (at your option) any later version.

   The Gnome Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Library General Public License for more details.

   You should have received a copy of the GNU Library General Public
   License along with the Gnome Library; see the file COPYING.LIB.  If not,
   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
   Boston, MA 02111-1307, USA.


*/

#include <libgnomevfs/gnome-vfs.h>
#include <gconf/gconf-client.h>
#include <glib.h>
#include <stdio.h>
#include <stdlib.h>

GConfClient  *gcc = NULL;
char         *text_uri = NULL;
GnomeVFSURI  *uri;
GList        *files = NULL;
GList        *iter = NULL;
static gboolean
change_picture (gpointer data)
{
	GnomeVFSURI *nuri;
	gboolean result;
	char *path;

	if (gcc == NULL) {
		gcc = gconf_client_get_default ();
	}
	path = (char *) iter->data;
	nuri = gnome_vfs_uri_append_string (uri, path);
	
	path = gnome_vfs_uri_to_string (nuri, GNOME_VFS_URI_HIDE_USER_NAME |
					GNOME_VFS_URI_HIDE_PASSWORD |
					GNOME_VFS_URI_HIDE_TOPLEVEL_METHOD |
					GNOME_VFS_URI_HIDE_FRAGMENT_IDENTIFIER |
					GNOME_VFS_URI_HIDE_HOST_PORT |
					GNOME_VFS_URI_HIDE_HOST_NAME);

	fprintf (stdout, "Setting bg to %s\n", path);
	
	result = gconf_client_set_string (gcc,
					  "/desktop/gnome/background/picture_filename",
					  path,
					  NULL);

	g_free (path);

	if (result == FALSE) {
		fprintf (stderr, "Error setting %s as bg\n", path);
	}

	if (iter->next != NULL) {
		iter = iter->next;
	} else {
		iter = files;
	}
	
	return TRUE;
}

static gboolean
visit_files (const gchar *rel_path,
	     GnomeVFSFileInfo *info,
	     gboolean recursing_will_loop,
	     gpointer data,
	     gboolean *recurse)
{
	GList **files = (GList **) data;
	*recurse = TRUE;

	if (info->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_MIME_TYPE &&
	    (g_str_equal (info->mime_type, "image/png") ||
	     g_str_equal (info->mime_type, "image/jpeg"))) {
		
		*files = g_list_prepend (*files, g_strdup (rel_path));
		fprintf (stdout, "Adding %s\n", rel_path);
	}
	
	return !recursing_will_loop;
}

int
main (int argc, char **argv)
{
	GnomeVFSResult  result;
	GMainLoop      *ml;
	int             mins;
		
	if (argc != 3) {
		fprintf (stderr, "Usage: %s <seconds> <uri>\n", argv[0]);
		return 1;
	}

	if (! gnome_vfs_init ()) {
		fprintf (stderr, "Cannot initialize gnome-vfs.\n");
		return 1;
	}

	text_uri = gnome_vfs_make_uri_from_shell_arg (argv[2]);

	mins = atoi (argv[1]);
	
	if (text_uri == NULL || mins == 0) {
		fprintf (stderr, "Usage: %s <seconds> 0> <uri>\n", argv[0]);
		return 1;
	}
	
	fprintf (stdout, "Generating file list ...\n");
	files = NULL;
	result = gnome_vfs_directory_visit (text_uri,
					    GNOME_VFS_FILE_INFO_GET_MIME_TYPE | 
					    GNOME_VFS_FILE_INFO_FORCE_FAST_MIME_TYPE,
					    GNOME_VFS_DIRECTORY_VISIT_LOOPCHECK |
					    GNOME_VFS_DIRECTORY_VISIT_SAMEFS,
					    visit_files,
					    &files);

	if (result != GNOME_VFS_OK) {
		fprintf (stderr, "Error: %s\n",
			 gnome_vfs_result_to_string (result));
		return 1;
	}
	
	uri = gnome_vfs_uri_new (text_uri);
	
	iter = files;
	
	g_timeout_add (1000 * mins, change_picture, NULL);
	
	ml = g_main_loop_new (NULL, FALSE);

	fprintf (stdout, "Going into main loop (timeout: %d seconds)\n", mins);
	g_main_loop_run (ml);
	
	return 0;
}

Compiling

Change directories to where change-bg.c is located and run the following command.

gcc -Wall -o change-bg `pkg-config --cflags --libs gnome-vfs-2.0 gconf-2.0` change-bg.c

Using

./change-bg <seconds> <location of wallpapers>

Doing it with a Bash script

As an alternative you could save the following script and call it from a startup program [Sessions]. Modify the WALLPAPER_LOCATION to the place where you store your wallpaper images.

#!/bin/bash
# change_wp [seconds]	  Changes the wallpaper at a given interval of seconds.
# example: change_wp 3600	 change the wallpaper every hour.
# If you do not supply any time it just changes the wallpaper and exits.
# Copyleft (C) 2007, 	Albert Bicchi 	[email protected]
WALLPAPER_LOCATION="/home/albert/wallpapers"
find "${WALLPAPER_LOCATION}" -iname '*.jp*g' -o -iname '*.png' > /tmp/wallpapers
TOTAL=`cat /tmp/wallpapers | wc -l`
while [ 1 ]
do
	((LINE=RANDOM%TOTAL+1))
	WALLPAPER=`sed -n "$LINE"p /tmp/wallpapers`
	gconftool -t str -s /desktop/gnome/background/picture_filename "${WALLPAPER}"
	if [ "$1" = "" ]; then
		exit 0
	fi
	sleep "$1s"
done