Jak mít na ploše živý obrázek z on-line webkamery

Bádal jsem nad tím, jak v Gnome mít na ploše zobrazený obrázek, který by se v pravidelných intervalech aktualizoval z internetu.

Ve Windows je to poměrně jednoduché - díky Active Desktop se prostě vloží HTML stránka na plochu, na které je ten obrázek a pomocí JavaScriptu se obnovuje - vypadá to třeba takto:


<html style="margin: 0px; padding: 0px;">
<body style="margin: 0px; padding: 0px;">
<script type="text/javascript">
var stranka = 'http://www.nějakástránka.cz/webkamera.jpg';
var prekresleni_sekund = 60;     //pocet sekund do dalsiho nacteni obrazku
var prodleva_nacteni = 2;      //pocet sekund mezi zacatkem nacteni a zobrazenim - pro plynulost
function ObnovObrazek() {
  var obrazek_soubor = stranka+'?rnd='+Math.random();
  document.getElementById('skryte').src = obrazek_soubor;
  setTimeout('document.getElementById("mapa").src = "'+obrazek_soubor+'";',prodleva_nacteni*1000);
  setTimeout('ObnovObrazek();',prekresleni_sekund*1000);
}
window.onload = ObnovObrazek;
</script>
<img id="mapa" src="" width="1280" height="1024" style="border-width: 0px;">
<img id="skryte" src="" style="display: none;">
</body>
</html>

Tohle umí všechny Windows od verze 95 po XP. Windows Vista z nějakého zvláštního důvodu už Active Desktop nepodporuje, takže tam to tak jednoduché není (možná by to šlo nějak přes gadget a ActiveX).

Nicméně jak to udělat v Linuxu?

Udělal jsem pro to 2 skripty - jeden (v bashi) stáhne obrázek a přejmenuje ho. Pak zavolá druhý skript (v Pythonu), který to pozadí nastaví. (Určitě by to šlo celé udělat v Pythonu, ale tak zběhlý v něm nejsem.)
A to celé se pak volá cronem.

Takže první skript v bashi zmen_pozadi.sh:


#!/bin/sh

cd "~/pozadi/automaticky-stazeno"  #cesta, kam se budou obrazky ukladat, musi existovat
wget http://www.nějakástránka.cz/webkamera.jpg
obrazek=`date '+%Y-%m-%d %H-%M-%S'`.jpg
mv webkamera.jpg "$obrazek"
~/skripty/zmen_pozadi.py "/moje/Na pozadi/automaticky-stazeno/$obrazek"

a druhý skript zmen_pozadi.py:


#!/usr/bin/env python

import gconf
import os
import sys

client = gconf.client_get_default()
changeSet = gconf.ChangeSet()
gs = '/desktop/gnome/background/'
changeSet.set_string(gs + 'picture_filename',sys.argv[1])
client.commit_change_set(changeSet, True)

Je třeba ještě nastavit v tom prvním skriptu:

  1. adresář, do kterého se budou obrázky stahovat. Ta cesta už musí existovat. Obrázků v něm bude přibývat, bylo by proto dobré udělat do skriptu i automatické promazávání, ale občas je dobré mít i historii a smáznout to lze vždy ručně :wink:
  2. adresu k tomu obrázku, který se vlastně bude stahovat. Líbí se mi třeba kamery na http://www.humlak.cz/index.php?page=webcam (hlavně kvůli vysokému rozlišení), ale lze použít vše, co není streamované. Na internetu je toho hromada
  3. nastavit cestu k tomu druhému pythonímu skriptu
  4. a dát ten shellový skript do cronu

Mění se pouze samotný obrázek, už ne např. styl vykreslení (roztáhnout na celou plochu atd.). Tyto vlastnosti tam tedy zůstanou stejné jako předtím a lze to nastavit normálně v systému.

Musím říct, že je to docela zajímavé mít na ploše něco “živého”. Třeba teď pozoruju náměstí v Trutnově - ještě včera bylo prázdné, ale během dopoledne tam přibyly atrakce a stánky, tak můžu pozorovat, co je zrovna nového a vůbec ten cvrkot :smiley: A taky třeba když je noc, tak vidím že je noc a tak :wink: A zároveň to neruší, protože je to jen na ploše.

Tak doufám, že se někdo minimálně inspiruje :slight_smile: A neříkejte, že je to v podstatě na nic - nejen důležitými věcmi je člověk živ :wink:

Myslim ze ten python script by mohl jit nahradit jednim prikazem v bashi - xsetroot. Nevim ovsem jak je to s plochou v Gnome, mozna to pres xsetroot nejde, protoze pozadi prekryva nautilus.

xsetroot je hezký příkaz, díky :wink: Bohužel v tom Gnome nefunguje, jen mi nějak změnil kurzor myši na ten standardní křížek :slight_smile:

Prosim muzete uvest jiz hotovou html stranku kterou pouziji v Desktop aktive?
Kdyz jsem zkousel podle navodu nahore porad se nic nezobrazuje!
Diky Za pomoc
Mira

V Linuxu Aktive Desktop neni, je potreba pouzit skript a ten spoustet jako periodickou ulohu.