Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Automatisch wallpaper veranderen op bepaald tijdstip  (gelezen 4417 keer)

Offline Bloom

  • Lid
Re: Automatisch wallpaper veranderen op bepaald tijdstip
« Reactie #25 Gepost op: 2012/04/14, 12:31:54 »
Alles met een '#' ervoor zijn commentaarlijnen en mag je dus negeren.
Helemaal onderaan zie ik echter twee lijnen die er niet in thuis horen:
~                                                                               
"/tmp/crontab.J0bOIr/crontab" 22L, 888C
Die zijn er mogeijk bij een vorige bewerking per ongeluk in geplakt. Wis die twee lijnen en vul de twee lijnen in die ik hoger gaf. Sluit daarna de editor af en crontab wordt automatisch bijgewerkt. Je kunt het schema controleren via
crontab -l

Re: Automatisch wallpaper veranderen op bepaald tijdstip
« Reactie #26 Gepost op: 2012/04/14, 13:13:05 »
@Bloom
Het probleem is, ik kan deze output niet bewerken. Ik krijg dit in de terminal (zie screenshot)


EDIT: Wacht even, ik doe een iets grotere ;)
Scnd EDIT: ziezo
« Laatst bewerkt op: 2012/04/14, 13:20:29 door Luckiboy »

Offline Bloom

  • Lid
Re: Automatisch wallpaper veranderen op bepaald tijdstip
« Reactie #27 Gepost op: 2012/04/14, 13:22:18 »
crontab -e start de standaardteksteditor. Bij Ubuntu en de meeste andere Debian-achtigen is dat nano, een kleine teksteditor voor de terminal. Als je liever gedit (Gnome/Unity) of leafpad (XFCE) gebruikt, kun je dat opgeven als volgt:
export EDITOR=gedit
crontab -e
of
export EDITOR=leafpad
crontab -e

Re: Automatisch wallpaper veranderen op bepaald tijdstip
« Reactie #28 Gepost op: 2012/04/14, 13:27:38 »
Nu staat er alleen maar dit:
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command

Dus zonder ~                                                                               
"/tmp/crontab.J0bOIr/crontab" 22L, 888C


« Laatst bewerkt op: 2012/04/14, 13:33:32 door Luckiboy »

Re: Automatisch wallpaper veranderen op bepaald tijdstip
« Reactie #29 Gepost op: 2012/04/14, 13:34:57 »
Je zult nog steeds bij het opstarten het script moeten aanroepen, tenminste voor het gewenste effect. Stel dat je de PC om 9 uur 's ochtends aanzet dan wil je de dagwallpaper terwijl die misschien ingesteld stond op nacht en omgekeerd als je pas om 20 uur 's avonds de PC aan zet.

Re: Automatisch wallpaper veranderen op bepaald tijdstip
« Reactie #30 Gepost op: 2012/04/14, 13:38:10 »
Oh... Dan gaat het dus eigenlijk niet automatisch, dus dan heeft dit hele gedoe eigenlijk ook geen zin :|

Re: Automatisch wallpaper veranderen op bepaald tijdstip
« Reactie #31 Gepost op: 2012/04/14, 13:41:02 »
Oh... Dan gaat het dus eigenlijk niet automatisch, dus dan heeft dit hele gedoe eigenlijk ook geen zin :|

Jawel hoor als je het bij de opstarttoepassingen plaatst. Dat bedoel ik met aanroepen en dat je dus aan crontab alleen niet genoeg hebt.

Re: Automatisch wallpaper veranderen op bepaald tijdstip
« Reactie #32 Gepost op: 2012/04/14, 13:43:32 »
Maar dan moet je je pc zeker wel precies om 6 en 18 uur aan hebben staan?

Re: Automatisch wallpaper veranderen op bepaald tijdstip
« Reactie #33 Gepost op: 2012/04/14, 13:47:34 »
~                                                                              
"/tmp/crontab.J0bOIr/crontab" 22L, 888C
Is iets van vim.
~ Betekent "eind van bestand"
Wat daar onder staat is de naam van het bestand dat je aan het editten bent, het aantal regels en karakters.

Dit is deel van de interface van vim, en staat dus niet in je tekstbestand.

Als je liever hebt dat nano je standaardeditor is in plaats van vim (lees: je bent te lui om met vim te leren werken en zien hoe geweldig het wel niet is):
sudo update-alternatives --config editor

Nu krijg je een lijst met editors en kan je er één van kiezen.

Om er voor te zorgen dat je scripts toch worden uitgevoerd ook al staat je computer niet aan, kijk dan naar Anacron, als je computer niet aanstond op het tijdstip dat een taak moest worden uitgevoerd wordt die tijdens het opstarten uitgevoerd.

- SeySayux
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Re: Automatisch wallpaper veranderen op bepaald tijdstip
« Reactie #34 Gepost op: 2012/04/14, 13:48:46 »
Maar dan moet je je pc zeker wel precies om 6 en 18 uur aan hebben staan?

Nee, niet als je dus het beide doet zoals ik eerder suggereerde: Je voegt een crontabregel toe om het script aan te roepen om 6 en 18 uur zodat de wallpaper wordt veranderd ALS je om die tijdstippen de PC aan hebt. Daarnaast plaats je het script bij opstarttoepassingen zodat bij opstarten de juiste wallpaper wordt gekozen. En en dus.  

Waar ik benieuwd naar ben: Werkt het nu of niet? Je hebt het script toch bij de opstarttoepassingen geplaatst? Als het niet werkte voer dan eens los die opdrachtregel uit om de wallpaper te veranderen om te zien of dat uberhaupt werkt (kan ik niet testen want ik heb geen XFCE).

Re: Automatisch wallpaper veranderen op bepaald tijdstip
« Reactie #35 Gepost op: 2012/04/14, 13:56:46 »
Dat scriptje van jou eerder in dit topic werkte jammerlijk genoeg niet :(
Daar moest je computer hoogstwaarschijnlijk wel voor aan staan

Re: Automatisch wallpaper veranderen op bepaald tijdstip
« Reactie #36 Gepost op: 2012/04/14, 14:22:01 »
Wat werkte er dan niet? Heb je die XFCE-regel los geprobeerd?

Re: Automatisch wallpaper veranderen op bepaald tijdstip
« Reactie #37 Gepost op: 2012/04/14, 15:03:23 »
xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitor0/image-path -s /home/luc/Afbeeldingen/Dagwallpaper.pngDit commando werkte goed, dan switchte de wallpaper van nacht naar dag.
Maar in dat script werkt ie niet, dan staat de wallpaper om 9 uur 's ochtends nog steeds op nacht

Re: Automatisch wallpaper veranderen op bepaald tijdstip
« Reactie #38 Gepost op: 2012/04/14, 15:22:55 »
En als je het script handmatig uitvoert? Het lijkt me dan eerder dat het script uberhaupt niet is aangroepen bij opstarten. Ik heb het nu getest met een regeltje voor KDE en dan werkt het script wel zoals verwacht hier.

Re: Automatisch wallpaper veranderen op bepaald tijdstip
« Reactie #39 Gepost op: 2012/04/14, 16:09:39 »
Ah! Nu doet ie het wel, ik had mijn wallpaper even veranderd naar nacht en toen het scriptje uitgevoerd, toen sprong ie wel op dag. Ik zal kijken of ie dat ook automatisch zal doen straks om 6 uur...

Re: Automatisch wallpaper veranderen op bepaald tijdstip
« Reactie #40 Gepost op: 2012/04/14, 17:21:02 »
Even voor de goede orde: dat werkt dan weer alleen als je het script in crontab hebt gezet (daar hebben we volgens mij al genoeg over gepost  :D).

Re: Automatisch wallpaper veranderen op bepaald tijdstip
« Reactie #41 Gepost op: 2012/04/14, 19:13:10 »
Sorry, ik snap er even niets meer van ??? Alles loopt een beetje door elkaar en wat ik probeer doet het niet
Kan iemand die precies weet hoe dit moet misschien een duidelijke how-to posten hier?

Offline Basel

  • Lid
Re: Automatisch wallpaper veranderen op bepaald tijdstip
« Reactie #42 Gepost op: 2012/04/18, 21:23:23 »
Ben er aantal dagen tussenuit geweest wat het forum betreft, maar heb ook nog even iets in elkaar geknutseld. Mijn Mint draaid wel gnome, dus vergeef me de commandline commands die alleen op gnome werken. Misschien ben ik een beetje doorgeslagen, maar het leek mij wel een leuke "gimmick" om de wallpaper aan de hand van de tijd van zonsopgang en ondergang te laten veranderen.

Hoe het werkt: Je zet twee achtergronden in de zelfde dir als het script en noemt deze achtergronden 'licht.png' en 'donker.png', maakt script uitvoerbaar, roep het script aan bij opstarten.

Onderstaande script werk, op een irritant dingetje na. Als je je pc meerdere keren op een dag opstart, worden de at commando's iedere keer aangeroepen en worden er taken aangemaakt. Ik dacht dat ik kon checken of het scriptje al aangeroepen is vandaag, door te kijken naar de timestamp of het script "gelezen" is vandaag. Maar dat werkt niet, aanroepen blijkt niet het zelfde te zijn als lezen helaas.  :|

Wat het script doet:
- Checkt of het vandaag al aangeroepen is (werkt helaas niet)
- Haalt de zonsopgang- en zonsondergang-tijd van buienradar.nl
- Stelt de huidige achtergrond in op licht of donker
- Maakt via at taken aan om op bepaalde tijd de achtergrond te wisselen en op 00:00 het script weer aan te roepen om nieuwe tijden in te stellen als computer meerdere dagen aan blijft staan.

#!/usr/bin/env python

import time
import datetime
import urllib
import re
import os
import sys


#Dict instellen om een sting te vormen naar formaat zoals het op de website
#vermeld staat
days = {'0': 'maandag', '1': 'dinsdag', '2': 'woensdag', '3': 'donderdag',
        '4': 'vrijdag', '5': 'zaterdag', '6': 'zondag'}
months = {'1': 'januari', '2': 'februari', '3': 'maart', '4': 'april',
        '5': 'mei', '6': 'juni', '7': 'juli', '8': 'augustus',
        '9': 'september', '10': 'oktober', '11': 'november', '12': 'december'}
today = []
times = []


#Datum mbv de eerder ingestelde dict omzetten naar formaat gebruikt op website
def formatdate(day):
    date = [str(day.weekday()), str(day.day), str(day.month)]
    for a, b in days.iteritems():
        date[0] = date[0].replace(a, b)
    for a, b in months.iteritems():
        date[2] = date[2].replace(a, b)
    return date


#Zonsopgang en ondergang tijden van buienradar.nl halen
def grabcont(today):
    filehandle = urllib.urlopen(
        'http://www.buienradar.nl/zonsopkomst-zonsondergang.aspx')
    for lines in filehandle.readlines():
        if (today[0] + " " + today[1] + " " + today[2]) in lines:
            rawline = removetags(lines)
    filehandle.close()
    return rawline


#Html tags van de gevonden regel strippen.
def removetags(rawinput):
    c = re.compile(r'<[^<]*?>')
    return c.sub(',', rawinput)


#Gestripte string omzetten naar list met alleen de tijden.
def formatcont(content):
    li1 = []
    li2 = ['', '']
    li = content.split(',')
    for el in li:
        if ":" in el:  # Element met tijd uit list halen,
                       #waar : in zit (bijv 12:33)
            li1.append(el)
    li2[0] = li1[0].split(':')
    li2[1] = li1[1].split(':')
    li2[0][0] = li2[0][0].zfill(2)  # getallen aanvullen tot 2 cijfers zodat at
    li2[0][1] = li2[0][1].zfill(2)  # met formaat om kan gaan (bijv 2 wordt 02)
    li2[1][0] = li2[1][0].zfill(2)
    li2[1][1] = li2[1][1].zfill(2)
    return li2


#Commandline commando's instellen zodat via at de achtergrond gewisseld wordt,
#afhankelijk van de huidige tijd.
def setat(times):
    rise = datetime.time(int(times[0][0]), int(times[0][1]))
    dawn = datetime.time(int(times[1][0]), int(times[1][1]))
    atday = ('echo gsettings set org.gnome.desktop.background picture-uri '
            'file://%s/licht.png | at %s%s') % (str(os.getcwd()),
            times[0][0], times[0][1])
    atnight = ('echo gsettings set org.gnome.desktop.background picture-uri '
            'file://%s/donker.png | at %s%s') % (str(os.getcwd()),
            times[1][0], times[1][1])
    day = ('gsettings set org.gnome.desktop.background '
            'picture-uri file://%s/licht.png') % (str(os.getcwd()))
    night = ('gsettings set org.gnome.desktop.background picture-uri '
            'file://%s/donker.png') % (str(os.getcwd()))
    now = datetime.time(time.localtime().tm_hour, time.localtime().tm_min)
    os.system('echo %s/bureaubaldwisselaar.py | at 0000' % (str(os.getcwd())))
    if now < rise:  # Als het script voor zonsopkomst wordt aangroepen:
        print 'set wallpaper to night'
        print '%s<%s -- set at to %s' % (now, rise, rise)
        print '%s<%s -- set at to %s' % (now, dawn, dawn)
        os.system(night)
        os.system(atday)
        os.system(atnight)
    elif now < dawn:  # Als het script na zonsopkomst wordt aangeroepen:
        print 'set wallpaper to day'
        print '%s<%s -- set at to %s' % (now, dawn, dawn)
        print atnight
        os.system(day)
        os.system(atnight)
        pass
    else:  # Als het script na sonsondergang wordt aangeroepen:
        print 'set wallpaper to night'
        os.system(night)


#Script uitvoeren
content = formatcont(grabcont(formatdate(datetime.date.today())))
setat(content)  # Tijden instellen via at.
sys.exit(0)


Heeft er iemand nog hints, tips, andere opmerkingen of een oplossing hoe ik het script kan laten kijken of het al aangeroepen is vandaag?
Het is niet helemaal waar de OP om vroeg (noem het dichterlijke vrijheid), maar dit is mijn twee cent.  XD

EDIT: Bestaande code zo veel als ik kon vinden aangepast aan geldende style guide, zoals SeySayux voorgesteld heeft. Alleen zou ik de global variables nog kunnen integreren in de verschillende functions.
« Laatst bewerkt op: 2012/04/20, 22:22:55 door Basel »

Re: Automatisch wallpaper veranderen op bepaald tijdstip
« Reactie #43 Gepost op: 2012/04/20, 08:24:18 »
Ja, als je me dan toch naar Python-code laat kijken, hou je dan ten minste aan PEP8, met name 80 kolommen.

Als je wilt kijken of je script al is aangeroepen op een bepaalde dag en daar bestaat niet een of andere Python-module voor  zodat je zelf ook nog eens een keertje moet nadenken (wat blijkbaar niet gelukt is): schrijf de datum van aanroepen weg naar een of ander bestand (liefst in /var/lib, want we willen ons toch een beetje aan de FHS houden, niet?) en kijk of die datum gelijk is aan "vandaag".
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline Basel

  • Lid
Re: Automatisch wallpaper veranderen op bepaald tijdstip
« Reactie #44 Gepost op: 2012/04/20, 20:00:32 »
Bedankt voor uw opbouwende kritiek.

[...] hou je dan ten minste aan PEP8, met name 80 kolommen. [...]
Ik als hobbyist die niet bijdraagt aan projecten of samenwerk met anderen had nog nooit van deze specifieke style guide regel gehoord moet ik eerlijk bekennen. Maar zit wat in idd. Zal er voortaan aan proberen te denken.

[...] zodat je zelf ook nog eens een keertje moet nadenken (wat blijkbaar niet gelukt is): [...]
Hier moet ik u in teleurstellen. Het was zelfs mijn eerste idee om een file aan te maken met timestamp data. Het leek mij alleen niet wenselijk dat een script files aan gaat maken als het niet noodzakelijk is. Als je het scripts bijvoorbeeld alleen even test op functionaliteit en alles wat je probeert of test gaat "her en der" files aanmaken, wordt daar niemand blij van denk ik. Dus ik probeerde het te vermijden en hoopte er op dat er iemand een meer elegante manier wist, die ik niet kon vinden of over het hoofd had gezien.

[...] naar een of ander bestand (liefst in /var/lib, want we willen ons toch een beetje aan de FHS houden, niet?) [...]
Ook van de FHS was ik niet op de hoogte. Natuurlijk had ik wel een globaal idee hoe het filesystem in elkaar zit, maar waar /var/lib bijvoorbeeld specifiek voor is had ik geen idee van. Lijkt mij een goede optie om idd een timestampfile naar /var/lib weg te schrijven.

Zo leer ik nog eens wat op de vrijdag avond. Zo snel ik tijd heb zal ik het aanpassen.
« Laatst bewerkt op: 2012/04/20, 22:15:00 door Basel »