diff --git a/src/wallpaper.c b/src/wallpaper.c
index 6e629dcc0367fb67512f9c71547cf39cf36945c0..3e19c41af88765153e42215c85f14a41d1a697db 100644
--- a/src/wallpaper.c
+++ b/src/wallpaper.c
@@ -29,6 +29,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "options.h"
 #include "wallpaper.h"
 #include <limits.h>
+#include <sys/stat.h>
 Window ipc_win = None;
 Window my_ipc_win = None;
 Atom ipc_atom = None;
@@ -450,12 +451,17 @@ void feh_wm_set_bg(char *fil, Imlib_Image im, int centered, int scaled,
 			if (home) {
 				FILE *fp;
 				char *path;
+				struct stat s;
 				path = estrjoin("/", home, ".fehbg", NULL);
 				if ((fp = fopen(path, "w")) == NULL) {
 					weprintf("Can't write to %s", path);
 				} else {
-					fprintf(fp, "%s\n", fehbg);
+					fprintf(fp, "#!/bin/sh\n%s\n", fehbg);
 					fclose(fp);
+					stat(path, &s);
+					if (chmod(path, s.st_mode | S_IXUSR | S_IXGRP) != 0) {
+						weprintf("Can't set %s as executable", path);
+					}
 				}
 				free(path);
 			}