<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>wag-net</title>
	<atom:link href="http://wag-net.ch/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://wag-net.ch</link>
	<description></description>
	<lastBuildDate>Wed, 21 Jul 2010 11:51:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>ArchLinux: Banshee and iPod detection</title>
		<link>http://wag-net.ch/?p=412</link>
		<comments>http://wag-net.ch/?p=412#comments</comments>
		<pubDate>Fri, 21 May 2010 15:45:26 +0000</pubDate>
		<dc:creator>wag</dc:creator>
				<category><![CDATA[ArchLinux]]></category>
		<category><![CDATA[aur]]></category>
		<category><![CDATA[banshee]]></category>
		<category><![CDATA[ipod]]></category>
		<category><![CDATA[podsleuth]]></category>

		<guid isPermaLink="false">http://wag-net.ch/?p=412</guid>
		<description><![CDATA[If Banshee doesn&#8217;t detect your iPod anymore, it might be Banshee&#8217;s iPod detector: Podsleuth is included in [extra] but doesn&#8217;t work anymore after the DeviceKits->UPower switch. The following PKGBUILD compiles the new 0.6.7 version which fixes the iPod detection problems for Banshee.]]></description>
			<content:encoded><![CDATA[<p>If Banshee doesn&#8217;t detect your iPod anymore, it might be Banshee&#8217;s iPod detector:<br />
<a href="http://www.archlinux.org/packages/extra/i686/podsleuth/">Podsleuth</a> is included in [extra] but doesn&#8217;t work anymore after the DeviceKits->UPower switch.</p>
<p>The following <a href="http://wag-net.ch/data/podsleuth-0.6.7-1.src.tar.gz">PKGBUILD</a> compiles the new 0.6.7 version which fixes the iPod detection problems for Banshee.</p>
]]></content:encoded>
			<wfw:commentRss>http://wag-net.ch/?feed=rss2&amp;p=412</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Create chroot jailed SSH User</title>
		<link>http://wag-net.ch/?p=359</link>
		<comments>http://wag-net.ch/?p=359#comments</comments>
		<pubDate>Fri, 14 May 2010 10:11:18 +0000</pubDate>
		<dc:creator>wag</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[chroot]]></category>
		<category><![CDATA[jail]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://wag-net.ch/?p=359</guid>
		<description><![CDATA[This will setup a user which, on ssh login, gets redirected to a chroot jail (requires OpenSSH >= 4.9). 1. Create user: # useradd -G users -s /bin/bash jail # passwd jail 2. Create chroot jail: # mkdir -p /var/jail/{bin,home/jail,lib} # cp -aL /bin/{bash,cat,cp,echo,grep,gzip,less,ln,ls,mkdir,more,mv,nano,pwd,rm,sh,tar,vi} /var/jail/bin/ # cp /etc/skel/* /var/jail/home/jail/ # chown -R jail:users /var/jail/home/jail/ Copy [...]]]></description>
			<content:encoded><![CDATA[<p>This will setup a user which, on ssh login, gets redirected to a chroot jail (requires OpenSSH >= 4.9).</p>
<p><strong>1. Create user:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;"># useradd -G users -s /bin/bash jail
# passwd jail</pre></div></div>

<p><strong>2. Create chroot jail:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;"># mkdir -p /var/jail/{bin,home/jail,lib}
# cp -aL /bin/{bash,cat,cp,echo,grep,gzip,less,ln,ls,mkdir,more,mv,nano,pwd,rm,sh,tar,vi} /var/jail/bin/
# cp /etc/skel/* /var/jail/home/jail/
# chown -R jail:users /var/jail/home/jail/</pre></div></div>

<p>Copy the required libraries, check if there&#8217;s a /lib64 link to /lib and add one if so.</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;"># ldd /var/jail/bin/* | grep -Eo '/lib[^ ]*' | sort | uniq | xargs -I{} cp -aL '{}' /var/jail/lib/</pre></div></div>

<p>This creates a minimal enviroment for the ssh user.<br />
You can add more functionality f.e. device nodes, /etc-files or /usr/bin-programms (incl. dependent libraries).<br />
<strong><br />
3. Configure sshd:</strong><br />
Add the following to /etc/ssh/sshd_config</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">Match User jail
  ChrootDirectory /var/jail/</pre></div></div>

<p>Restart sshd</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;"># /etc/init.d/sshd restart</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://wag-net.ch/?feed=rss2&amp;p=359</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ArchLinux: Hibernate splashscreen with uswsusp and splashy</title>
		<link>http://wag-net.ch/?p=361</link>
		<comments>http://wag-net.ch/?p=361#comments</comments>
		<pubDate>Tue, 30 Mar 2010 12:51:43 +0000</pubDate>
		<dc:creator>wag</dc:creator>
				<category><![CDATA[ArchLinux]]></category>
		<category><![CDATA[aur]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[splashy]]></category>
		<category><![CDATA[uswsusp]]></category>

		<guid isPermaLink="false">http://wag-net.ch/?p=361</guid>
		<description><![CDATA[splashy works great on startup and shutdown, but not while hibernating with pm-utils. uswsup would work with splashy but the default package from community does not include splashy support. Compiling the lastest official version 0.8 from suspend.sourceforge.net with &#8216;&#8211;enable-splashy&#8217; raises an error: checking for splashy_open in -lsplashy... no configure: error: Required libsplashy was not found [...]]]></description>
			<content:encoded><![CDATA[<p>splashy works great on startup and shutdown, but not while hibernating with pm-utils.<br />
uswsup would work with splashy but the default package from community does not include splashy support.</p>
<p>Compiling the lastest official version 0.8 from <a href="http://suspend.sourceforge.net/">suspend.sourceforge.net</a> with &#8216;&#8211;enable-splashy&#8217; raises an error:</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">checking for splashy_open in -lsplashy... no
configure: error: Required libsplashy was not found</pre></div></div>

<p>The newer version 0.9 from <a href="http://git.kernel.org/?p=linux/kernel/git/rafael/suspend-utils.git">git.kernel.org</a> fixes that error.</p>
<p>After compilation, hibernating and resuming will display the installed splashy screen.<br />
<br/><br />
Here&#8217;s the package providing uswsusp with splashy support: <a href="http://aur.archlinux.org/packages.php?ID=36053">uswsusp-splashy-git</a></p>
]]></content:encoded>
			<wfw:commentRss>http://wag-net.ch/?feed=rss2&amp;p=361</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PyGTK: TemperatureWatch [update]</title>
		<link>http://wag-net.ch/?p=327</link>
		<comments>http://wag-net.ch/?p=327#comments</comments>
		<pubDate>Thu, 17 Dec 2009 13:52:24 +0000</pubDate>
		<dc:creator>wag</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[gobject]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[pygtk]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://wag-net.ch/?p=327</guid>
		<description><![CDATA[Display live CPU Temperature and Fan speed in a GTK window. Working on Ubuntu, ArchLinux and Thinkpad T60, probably others too. Version 1.1 released: - Includes Fan speed Code below or here #!/usr/bin/env python # -*- coding: utf-8 -*- # # Display live CPU Temperature in a GTK window. # Working on Ubuntu, ArchLinux and [...]]]></description>
			<content:encoded><![CDATA[<p>Display live CPU Temperature and Fan speed in a GTK window.<br />
Working on Ubuntu, ArchLinux and Thinkpad T60, probably others too.</p>
<p>Version 1.1 released:<br />
- Includes Fan speed</p>
<p><span id="more-327"></span></p>
<p><img style="margin: 2px;" src="http://wag-net.ch/pictures/temperaturewatch.png" alt="temperaturewatch" /></p>
<p>Code below or <a href="http://github.com/wag/python/blob/master/temperaturewatch/temperaturewatch.py">here</a></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
<span style="color: #808080; font-style: italic;"># -*- coding: utf-8 -*-</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Display live CPU Temperature in a GTK window.</span>
<span style="color: #808080; font-style: italic;"># Working on Ubuntu, ArchLinux and Thinkpad T60, probably others too.</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Version: 1.1</span>
<span style="color: #808080; font-style: italic;"># Requires: python &gt;=2.5, python-gtk2, python-gobject</span>
<span style="color: #808080; font-style: italic;"># /proc fs with thinkpad_acpi module enabled</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Copyright (C) 2009 wag@wag-net.ch</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># This program is free software: you can redistribute it and/or modify</span>
<span style="color: #808080; font-style: italic;"># it under the terms of the GNU General Public License as published by</span>
<span style="color: #808080; font-style: italic;"># the Free Software Foundation, either version 3 of the License, or</span>
<span style="color: #808080; font-style: italic;"># (at your option) any later version.</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># This program is distributed in the hope that it will be useful,</span>
<span style="color: #808080; font-style: italic;"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span style="color: #808080; font-style: italic;"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
<span style="color: #808080; font-style: italic;"># GNU General Public License for more details.</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># You should have received a copy of the GNU General Public License</span>
<span style="color: #808080; font-style: italic;"># along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
&nbsp;
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> gtk, gobject, pango
gobject.<span style="color: black;">threads_init</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">subprocess</span> <span style="color: #ff7700;font-weight:bold;">as</span> sp, <span style="color: #dc143c;">re</span>
&nbsp;
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> TemperatureWatch<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #808080; font-style: italic;"># Set path to cpu thermal_zone proc file, or leave blank</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">p_CPU0</span> = <span style="color: #483d8b;">&quot;/proc/acpi/thermal_zone/THM0/temperature&quot;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">p_CPU1</span> = <span style="color: #483d8b;">&quot;/proc/acpi/thermal_zone/THM1/temperature&quot;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">p_FAN</span> = <span style="color: #483d8b;">&quot;/proc/acpi/ibm/fan&quot;</span>
&nbsp;
&nbsp;
        gobject.<span style="color: black;">timeout_add</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">500</span>, <span style="color: #008000;">self</span>.<span style="color: black;">update</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">win</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> update<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #483d8b;">&quot;&quot;&quot;Update labels every half second&quot;&quot;&quot;</span>
        <span style="color: #808080; font-style: italic;"># Execute system call, regex for numbers, set label</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">p_CPU0</span>:
            CPU0 = sp.<span style="color: black;">Popen</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;cat&quot;</span>, <span style="color: #008000;">self</span>.<span style="color: black;">p_CPU0</span><span style="color: black;">&#93;</span>, stdout = sp.<span style="color: black;">PIPE</span><span style="color: black;">&#41;</span>.<span style="color: black;">communicate</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
            rCPU0 = <span style="color: #dc143c;">re</span>.<span style="color: black;">search</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;(<span style="color: #000099; font-weight: bold;">\d</span>+)&quot;</span>, CPU0<span style="color: black;">&#41;</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">l_CPU0</span>.<span style="color: black;">set_text</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;%s °C&quot;</span> <span style="color: #66cc66;">%</span> rCPU0.<span style="color: black;">group</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">p_CPU1</span>:
            CPU1 = sp.<span style="color: black;">Popen</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;cat&quot;</span>, <span style="color: #008000;">self</span>.<span style="color: black;">p_CPU1</span><span style="color: black;">&#93;</span>, stdout = sp.<span style="color: black;">PIPE</span><span style="color: black;">&#41;</span>.<span style="color: black;">communicate</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
            rCPU1 = <span style="color: #dc143c;">re</span>.<span style="color: black;">search</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;(<span style="color: #000099; font-weight: bold;">\d</span>+)&quot;</span>, CPU1<span style="color: black;">&#41;</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">l_CPU1</span>.<span style="color: black;">set_text</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;%s °C&quot;</span> <span style="color: #66cc66;">%</span> rCPU1.<span style="color: black;">group</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">p_FAN</span>:
            FAN = sp.<span style="color: black;">Popen</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;cat&quot;</span>, <span style="color: #008000;">self</span>.<span style="color: black;">p_FAN</span><span style="color: black;">&#93;</span>, stdout = sp.<span style="color: black;">PIPE</span><span style="color: black;">&#41;</span>.<span style="color: black;">communicate</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
            rFAN = <span style="color: #dc143c;">re</span>.<span style="color: black;">search</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;(<span style="color: #000099; font-weight: bold;">\d</span>+)&quot;</span>, FAN<span style="color: black;">&#41;</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">l_FAN</span>.<span style="color: black;">set_text</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;%s RPM&quot;</span> <span style="color: #66cc66;">%</span> rFAN.<span style="color: black;">group</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">True</span>
&nbsp;
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> win<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #483d8b;">&quot;&quot;&quot;Create window&quot;&quot;&quot;</span>
        win = gtk.<span style="color: black;">Window</span><span style="color: black;">&#40;</span>gtk.<span style="color: black;">WINDOW_TOPLEVEL</span><span style="color: black;">&#41;</span>
        win.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;destroy&quot;</span>, <span style="color: #ff7700;font-weight:bold;">lambda</span> q: gtk.<span style="color: black;">main_quit</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        win.<span style="color: black;">set_title</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;TemperatureWatch&quot;</span><span style="color: black;">&#41;</span>
        win.<span style="color: black;">set_border_width</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">20</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
        <span style="color: #808080; font-style: italic;"># Box, AspectFrame, Table</span>
        vb = gtk.<span style="color: black;">VBox</span><span style="color: black;">&#40;</span><span style="color: #008000;">False</span>, <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>
        win.<span style="color: black;">add</span><span style="color: black;">&#40;</span>vb<span style="color: black;">&#41;</span>
&nbsp;
        af = gtk.<span style="color: black;">AspectFrame</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        af.<span style="color: black;">set_border_width</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>
        vb.<span style="color: black;">pack_start</span><span style="color: black;">&#40;</span>af<span style="color: black;">&#41;</span>
&nbsp;
        table = gtk.<span style="color: black;">Table</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">3</span>, <span style="color: #008000;">False</span><span style="color: black;">&#41;</span>
        win.<span style="color: black;">set_geometry_hints</span><span style="color: black;">&#40;</span>table, min_width=<span style="color: #ff4500;">150</span>, min_height=<span style="color: #ff4500;">120</span><span style="color: black;">&#41;</span>
        table.<span style="color: black;">set_row_spacings</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span>
        table.<span style="color: black;">set_col_spacings</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span>
        af.<span style="color: black;">add</span><span style="color: black;">&#40;</span>table<span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
        <span style="color: #808080; font-style: italic;"># Labels</span>
        l__CPU0 = gtk.<span style="color: black;">Label</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;CPU0 : &quot;</span><span style="color: black;">&#41;</span>
        l__CPU0.<span style="color: black;">set_padding</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">5</span>, <span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span>
        l__CPU0.<span style="color: black;">modify_font</span><span style="color: black;">&#40;</span>pango.<span style="color: black;">FontDescription</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;16&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        table.<span style="color: black;">attach</span><span style="color: black;">&#40;</span>l__CPU0, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
&nbsp;
        l__CPU1 = gtk.<span style="color: black;">Label</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;CPU1 : &quot;</span><span style="color: black;">&#41;</span>
        l__CPU1.<span style="color: black;">set_padding</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">5</span>, <span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span>
        l__CPU1.<span style="color: black;">modify_font</span><span style="color: black;">&#40;</span>pango.<span style="color: black;">FontDescription</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;16&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        table.<span style="color: black;">attach</span><span style="color: black;">&#40;</span>l__CPU1, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>
&nbsp;
        l__FAN = gtk.<span style="color: black;">Label</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;FAN : &quot;</span><span style="color: black;">&#41;</span>
        l__FAN.<span style="color: black;">set_padding</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">5</span>, <span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span>
        l__FAN.<span style="color: black;">modify_font</span><span style="color: black;">&#40;</span>pango.<span style="color: black;">FontDescription</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;16&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        table.<span style="color: black;">attach</span><span style="color: black;">&#40;</span>l__FAN, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">3</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #008000;">self</span>.<span style="color: black;">l_CPU0</span> = gtk.<span style="color: black;">Label</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;00 °C&quot;</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">l_CPU0</span>.<span style="color: black;">set_padding</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">5</span>, <span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">l_CPU0</span>.<span style="color: black;">modify_font</span><span style="color: black;">&#40;</span>pango.<span style="color: black;">FontDescription</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;16&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        table.<span style="color: black;">attach</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">l_CPU0</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #008000;">self</span>.<span style="color: black;">l_CPU1</span> = gtk.<span style="color: black;">Label</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;00 °C&quot;</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">l_CPU1</span>.<span style="color: black;">set_padding</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">5</span>, <span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">l_CPU1</span>.<span style="color: black;">modify_font</span><span style="color: black;">&#40;</span>pango.<span style="color: black;">FontDescription</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;16&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        table.<span style="color: black;">attach</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">l_CPU1</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #008000;">self</span>.<span style="color: black;">l_FAN</span> = gtk.<span style="color: black;">Label</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;0000 RPM&quot;</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">l_FAN</span>.<span style="color: black;">set_padding</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">5</span>, <span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">l_FAN</span>.<span style="color: black;">modify_font</span><span style="color: black;">&#40;</span>pango.<span style="color: black;">FontDescription</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;16&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        table.<span style="color: black;">attach</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">l_FAN</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">3</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
        <span style="color: #808080; font-style: italic;"># Button</span>
        b_quit = gtk.<span style="color: black;">Button</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot; Quit &quot;</span><span style="color: black;">&#41;</span>
        b_quit.<span style="color: black;">set_border_width</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>
        b_quit.<span style="color: black;">child</span>.<span style="color: black;">modify_font</span><span style="color: black;">&#40;</span>pango.<span style="color: black;">FontDescription</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;11&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        vb.<span style="color: black;">pack_start</span><span style="color: black;">&#40;</span>b_quit<span style="color: black;">&#41;</span>
        b_quit.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;clicked&quot;</span>, <span style="color: #ff7700;font-weight:bold;">lambda</span> q: gtk.<span style="color: black;">main_quit</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
        win.<span style="color: black;">show_all</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        gtk.<span style="color: black;">main</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
&nbsp;
TW = TemperatureWatch<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://wag-net.ch/?feed=rss2&amp;p=327</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PyGTK: ShutdownLater [update]</title>
		<link>http://wag-net.ch/?p=319</link>
		<comments>http://wag-net.ch/?p=319#comments</comments>
		<pubDate>Tue, 15 Dec 2009 19:53:45 +0000</pubDate>
		<dc:creator>wag</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[dbus]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[gobject]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[pygtk]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://wag-net.ch/?p=319</guid>
		<description><![CDATA[Shutdown, reboot, hibernate or suspend your computer later! GTK GUI which lets the user choose between shutdown, reboot, hibernate or suspend after a specified amount of time. Runs on UPower-DBus calls, which surpasses the need for root access. Working on Ubuntu 10.04, ArchLinux 2009.08 (Maybe other GTK, DBus, DeviceKit systems too). Version 1.1 released: - [...]]]></description>
			<content:encoded><![CDATA[<p>Shutdown, reboot, hibernate or suspend your computer later!</p>
<p>GTK GUI which lets the user choose between shutdown, reboot, hibernate or suspend<br />
after a specified amount of time.<br />
Runs on UPower-DBus calls, which surpasses the need for root access.<br />
Working on Ubuntu 10.04, ArchLinux 2009.08 (Maybe other GTK, DBus, DeviceKit systems too).</p>
<p>Version 1.1 released:<br />
- gnome-desktop 2.30 fixes (Ubuntu 10.04 compatible).<br />
<span id="more-319"></span></p>
<p><img style="margin: 2px;" src="http://wag-net.ch/pictures/shutdownlater_conf.png" alt="shutdownlater_conf" width="259" height="308" /><br />
Configuration</p>
<p><img style="margin: 2px;" src="http://wag-net.ch/pictures/shutdownlater_run.png" alt="shutdownlater_run" width="258" height="170" /><br />
Running</p>
<p>Code below or <a href="http://github.com/wag/python/blob/master/shutdownlater/shutdownlater.py">here</a></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
<span style="color: #808080; font-style: italic;"># -*- coding: utf-8 -*-</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># GTK GUI which executes shutdown, reboot, hibernate or suspend after a given time.</span>
<span style="color: #808080; font-style: italic;"># DBus, UPower and ConsoleKit handles the stuff under the hood.</span>
<span style="color: #808080; font-style: italic;"># If the methodes are allowed, no root access is required.</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Version: 1.1</span>
<span style="color: #808080; font-style: italic;"># Requires: gnome-desktop 2.30</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># NOTE: UPower-Suspend/Hibernate do not give a reply through dbus. This programm</span>
<span style="color: #808080; font-style: italic;"># does ignore that, but if you try to suspend/hibernate after a wake up</span>
<span style="color: #808080; font-style: italic;"># it takes about 20sec till the non existing reply gets recognized.</span>
<span style="color: #808080; font-style: italic;"># TODO: Check if dbus requests are allowed (CanStop(), CanRestart()).</span>
<span style="color: #808080; font-style: italic;"># Support older backends (Hal, DeviceKit-Power, SessionManager).</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Version History:</span>
<span style="color: #808080; font-style: italic;"># 1.0 - Initial Release</span>
<span style="color: #808080; font-style: italic;"># 1.1 - Gnome-Desktop 2.30 fixes: UPower replaces DeviceKit-Power,</span>
<span style="color: #808080; font-style: italic;"># ConsoleKit replaces SessionManager</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Copyright (C) 2010 wag@wag-net.ch</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># This program is free software: you can redistribute it and/or modify</span>
<span style="color: #808080; font-style: italic;"># it under the terms of the GNU General Public License as published by</span>
<span style="color: #808080; font-style: italic;"># the Free Software Foundation, either version 3 of the License, or</span>
<span style="color: #808080; font-style: italic;"># (at your option) any later version.</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># This program is distributed in the hope that it will be useful,</span>
<span style="color: #808080; font-style: italic;"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span style="color: #808080; font-style: italic;"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
<span style="color: #808080; font-style: italic;"># GNU General Public License for more details.</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># You should have received a copy of the GNU General Public License</span>
<span style="color: #808080; font-style: italic;"># along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
&nbsp;
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> gtk, gobject, dbus, dbus.<span style="color: black;">mainloop</span>.<span style="color: black;">glib</span>
gobject.<span style="color: black;">threads_init</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
dbus.<span style="color: black;">mainloop</span>.<span style="color: black;">glib</span>.<span style="color: black;">DBusGMainLoop</span><span style="color: black;">&#40;</span>set_as_default=<span style="color: #008000;">True</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> C_ShutdownLater<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #008000;">self</span>.<span style="color: black;">loop</span> = gobject.<span style="color: black;">MainLoop</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">do</span> = <span style="color: #483d8b;">&quot;shutdown&quot;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">win_conf</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> win_conf<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #483d8b;">&quot;&quot;&quot;Create configuration window&quot;&quot;&quot;</span>
        win = gtk.<span style="color: black;">Window</span><span style="color: black;">&#40;</span>gtk.<span style="color: black;">WINDOW_TOPLEVEL</span><span style="color: black;">&#41;</span>
        win.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;destroy&quot;</span>, <span style="color: #008000;">self</span>.<span style="color: black;">quit</span><span style="color: black;">&#41;</span>
        win.<span style="color: black;">set_title</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;ShutdownLater&quot;</span><span style="color: black;">&#41;</span>
        win.<span style="color: black;">set_border_width</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">20</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
        <span style="color: #808080; font-style: italic;"># Box, Table</span>
        vb_main = gtk.<span style="color: black;">VBox</span><span style="color: black;">&#40;</span><span style="color: #008000;">False</span>, <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>
        win.<span style="color: black;">add</span><span style="color: black;">&#40;</span>vb_main<span style="color: black;">&#41;</span>
&nbsp;
        t_rb = gtk.<span style="color: black;">Table</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">2</span>, <span style="color: #008000;">False</span><span style="color: black;">&#41;</span>
        win.<span style="color: black;">set_geometry_hints</span><span style="color: black;">&#40;</span>t_rb, min_width=<span style="color: #ff4500;">200</span>, min_height=<span style="color: #ff4500;">70</span><span style="color: black;">&#41;</span>
        t_rb.<span style="color: black;">set_row_spacings</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span>
        t_rb.<span style="color: black;">set_col_spacings</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span>
&nbsp;
        f_rb = gtk.<span style="color: black;">Frame</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot; Initiate : &quot;</span><span style="color: black;">&#41;</span>
        f_rb.<span style="color: black;">set_border_width</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">4</span><span style="color: black;">&#41;</span>
        f_rb.<span style="color: black;">add</span><span style="color: black;">&#40;</span>t_rb<span style="color: black;">&#41;</span>
        vb_main.<span style="color: black;">pack_start</span><span style="color: black;">&#40;</span>f_rb<span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
        <span style="color: #808080; font-style: italic;"># RadioButtons</span>
        rb_shutdown = gtk.<span style="color: black;">RadioButton</span><span style="color: black;">&#40;</span><span style="color: #008000;">None</span>, <span style="color: #483d8b;">&quot;Shutdown&quot;</span><span style="color: black;">&#41;</span>
        rb_shutdown.<span style="color: black;">set_border_width</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span>
        rb_shutdown.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;toggled&quot;</span>, <span style="color: #008000;">self</span>.<span style="color: black;">rb_callback</span>, <span style="color: #483d8b;">&quot;shutdown&quot;</span><span style="color: black;">&#41;</span>
        t_rb.<span style="color: black;">attach</span><span style="color: black;">&#40;</span>rb_shutdown, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
&nbsp;
        rb_reboot = gtk.<span style="color: black;">RadioButton</span><span style="color: black;">&#40;</span>rb_shutdown, <span style="color: #483d8b;">&quot;Reboot&quot;</span><span style="color: black;">&#41;</span>
        rb_reboot.<span style="color: black;">set_border_width</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span>
        rb_reboot.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;toggled&quot;</span>, <span style="color: #008000;">self</span>.<span style="color: black;">rb_callback</span>, <span style="color: #483d8b;">&quot;reboot&quot;</span><span style="color: black;">&#41;</span>
        t_rb.<span style="color: black;">attach</span><span style="color: black;">&#40;</span>rb_reboot, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
&nbsp;
        rb_hibernate = gtk.<span style="color: black;">RadioButton</span><span style="color: black;">&#40;</span>rb_shutdown, <span style="color: #483d8b;">&quot;Hibernate&quot;</span><span style="color: black;">&#41;</span>
        rb_hibernate.<span style="color: black;">set_border_width</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span>
        rb_hibernate.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;toggled&quot;</span>, <span style="color: #008000;">self</span>.<span style="color: black;">rb_callback</span>, <span style="color: #483d8b;">&quot;hibernate&quot;</span><span style="color: black;">&#41;</span>
        t_rb.<span style="color: black;">attach</span><span style="color: black;">&#40;</span>rb_hibernate, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>
&nbsp;
        rb_suspend = gtk.<span style="color: black;">RadioButton</span><span style="color: black;">&#40;</span>rb_shutdown, <span style="color: #483d8b;">&quot;Suspend&quot;</span><span style="color: black;">&#41;</span>
        rb_suspend.<span style="color: black;">set_border_width</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span>
        rb_suspend.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;toggled&quot;</span>, <span style="color: #008000;">self</span>.<span style="color: black;">rb_callback</span>, <span style="color: #483d8b;">&quot;suspend&quot;</span><span style="color: black;">&#41;</span>
        t_rb.<span style="color: black;">attach</span><span style="color: black;">&#40;</span>rb_suspend, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
        <span style="color: #808080; font-style: italic;"># Table, Labels</span>
        t_sp = gtk.<span style="color: black;">Table</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">3</span>, <span style="color: #ff4500;">2</span>, <span style="color: #008000;">False</span><span style="color: black;">&#41;</span>
        t_sp.<span style="color: black;">set_row_spacings</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">10</span><span style="color: black;">&#41;</span>
        t_sp.<span style="color: black;">set_col_spacings</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">10</span><span style="color: black;">&#41;</span>
&nbsp;
        f_sp = gtk.<span style="color: black;">Frame</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot; After : &quot;</span><span style="color: black;">&#41;</span>
        f_sp.<span style="color: black;">set_border_width</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">4</span><span style="color: black;">&#41;</span>
        f_sp.<span style="color: black;">add</span><span style="color: black;">&#40;</span>t_sp<span style="color: black;">&#41;</span>
        vb_main.<span style="color: black;">pack_start</span><span style="color: black;">&#40;</span>f_sp<span style="color: black;">&#41;</span>
&nbsp;
        l_h = gtk.<span style="color: black;">Label</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Hours&quot;</span><span style="color: black;">&#41;</span>
        l_h.<span style="color: black;">set_padding</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">3</span>, <span style="color: #ff4500;">3</span><span style="color: black;">&#41;</span>
        t_sp.<span style="color: black;">attach</span><span style="color: black;">&#40;</span>l_h, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
        l_m = gtk.<span style="color: black;">Label</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Minutes&quot;</span><span style="color: black;">&#41;</span>
        t_sp.<span style="color: black;">attach</span><span style="color: black;">&#40;</span>l_m, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
        l_s = gtk.<span style="color: black;">Label</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Seconds&quot;</span><span style="color: black;">&#41;</span>
        t_sp.<span style="color: black;">attach</span><span style="color: black;">&#40;</span>l_s, <span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">3</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
        <span style="color: #808080; font-style: italic;"># SpinBoxes</span>
        sp_h_adj = gtk.<span style="color: black;">Adjustment</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">999</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">10</span>, <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">sp_h</span> = gtk.<span style="color: black;">SpinButton</span><span style="color: black;">&#40;</span>sp_h_adj, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">sp_h</span>.<span style="color: black;">set_numeric</span><span style="color: black;">&#40;</span><span style="color: #008000;">True</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">sp_h</span>.<span style="color: black;">set_size_request</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">50</span>, <span style="color: #ff4500;">27</span><span style="color: black;">&#41;</span>
        t_sp.<span style="color: black;">attach</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">sp_h</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">2</span>, <span style="color: #008000;">False</span><span style="color: black;">&#41;</span>
&nbsp;
        sp_m_adj = gtk.<span style="color: black;">Adjustment</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">59</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">10</span>, <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">sp_m</span> = gtk.<span style="color: black;">SpinButton</span><span style="color: black;">&#40;</span>sp_m_adj, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">sp_m</span>.<span style="color: black;">set_numeric</span><span style="color: black;">&#40;</span><span style="color: #008000;">True</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">sp_m</span>.<span style="color: black;">set_size_request</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">45</span>, <span style="color: #ff4500;">27</span><span style="color: black;">&#41;</span>
        t_sp.<span style="color: black;">attach</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">sp_m</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">2</span>, <span style="color: #008000;">False</span><span style="color: black;">&#41;</span>
&nbsp;
        sp_s_adj = gtk.<span style="color: black;">Adjustment</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">59</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">10</span>, <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">sp_s</span> = gtk.<span style="color: black;">SpinButton</span><span style="color: black;">&#40;</span>sp_s_adj, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">sp_s</span>.<span style="color: black;">set_numeric</span><span style="color: black;">&#40;</span><span style="color: #008000;">True</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">sp_s</span>.<span style="color: black;">set_size_request</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">45</span>, <span style="color: #ff4500;">27</span><span style="color: black;">&#41;</span>
        t_sp.<span style="color: black;">attach</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">sp_s</span>, <span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">3</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">2</span>, <span style="color: #008000;">False</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
        <span style="color: #808080; font-style: italic;"># Table, Buttons</span>
        t_b = gtk.<span style="color: black;">Table</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">1</span>, <span style="color: #008000;">False</span><span style="color: black;">&#41;</span>
        t_b.<span style="color: black;">set_row_spacings</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">10</span><span style="color: black;">&#41;</span>
        t_b.<span style="color: black;">set_col_spacings</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">10</span><span style="color: black;">&#41;</span>
        vb_main.<span style="color: black;">pack_start</span><span style="color: black;">&#40;</span>t_b<span style="color: black;">&#41;</span>
&nbsp;
        b_start = gtk.<span style="color: black;">Button</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Start&quot;</span><span style="color: black;">&#41;</span>
        b_start.<span style="color: black;">set_border_width</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">4</span><span style="color: black;">&#41;</span>
        t_b.<span style="color: black;">attach</span><span style="color: black;">&#40;</span>b_start, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
        b_start.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;clicked&quot;</span>, <span style="color: #008000;">self</span>.<span style="color: black;">start</span>, win<span style="color: black;">&#41;</span>
&nbsp;
        b_quit = gtk.<span style="color: black;">Button</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot; Quit &quot;</span><span style="color: black;">&#41;</span>
        b_quit.<span style="color: black;">set_border_width</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">4</span><span style="color: black;">&#41;</span>
        t_b.<span style="color: black;">attach</span><span style="color: black;">&#40;</span>b_quit, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
        b_quit.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;clicked&quot;</span>, <span style="color: #008000;">self</span>.<span style="color: black;">quit</span><span style="color: black;">&#41;</span>
&nbsp;
        win.<span style="color: black;">show_all</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        gtk.<span style="color: black;">main</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> win_run<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, main<span style="color: black;">&#41;</span>:
        <span style="color: #483d8b;">&quot;&quot;&quot;Create running window&quot;&quot;&quot;</span>
        win_conf = main
        win = gtk.<span style="color: black;">Window</span><span style="color: black;">&#40;</span>gtk.<span style="color: black;">WINDOW_TOPLEVEL</span><span style="color: black;">&#41;</span>
        win.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;destroy&quot;</span>, <span style="color: #008000;">self</span>.<span style="color: black;">cancel</span>, win_conf, win<span style="color: black;">&#41;</span>
        win.<span style="color: black;">set_title</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;ShutdownLater&quot;</span><span style="color: black;">&#41;</span>
        win.<span style="color: black;">set_border_width</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">20</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
        <span style="color: #808080; font-style: italic;"># Box, ProgBar</span>
        vb_main = gtk.<span style="color: black;">VBox</span><span style="color: black;">&#40;</span><span style="color: #008000;">False</span>, <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>
        win.<span style="color: black;">add</span><span style="color: black;">&#40;</span>vb_main<span style="color: black;">&#41;</span>
&nbsp;
        pb_adj = gtk.<span style="color: black;">Adjustment</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">5</span>, <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">pb_time</span> = gtk.<span style="color: black;">ProgressBar</span><span style="color: black;">&#40;</span>pb_adj<span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">pb_time</span>.<span style="color: black;">set_size_request</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">200</span>, <span style="color: #ff4500;">30</span><span style="color: black;">&#41;</span>
&nbsp;
        af_pb = gtk.<span style="color: black;">Frame</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot; %s in : &quot;</span> <span style="color: #66cc66;">%</span> <span style="color: #008000;">self</span>.<span style="color: black;">do</span>.<span style="color: black;">capitalize</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        af_pb.<span style="color: black;">set_border_width</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">4</span><span style="color: black;">&#41;</span>
        af_pb.<span style="color: black;">add</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">pb_time</span><span style="color: black;">&#41;</span>
        vb_main.<span style="color: black;">pack_start</span><span style="color: black;">&#40;</span>af_pb<span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
        <span style="color: #808080; font-style: italic;"># Table, Buttons</span>
        t_b = gtk.<span style="color: black;">Table</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">1</span>, <span style="color: #008000;">False</span><span style="color: black;">&#41;</span>
        t_b.<span style="color: black;">set_row_spacings</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">10</span><span style="color: black;">&#41;</span>
        t_b.<span style="color: black;">set_col_spacings</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">10</span><span style="color: black;">&#41;</span>
        vb_main.<span style="color: black;">pack_start</span><span style="color: black;">&#40;</span>t_b<span style="color: black;">&#41;</span>
&nbsp;
        b_pause = gtk.<span style="color: black;">ToggleButton</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Pause&quot;</span><span style="color: black;">&#41;</span>
        b_pause.<span style="color: black;">set_border_width</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">4</span><span style="color: black;">&#41;</span>
        t_b.<span style="color: black;">attach</span><span style="color: black;">&#40;</span>b_pause, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
        b_pause.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;toggled&quot;</span>, <span style="color: #008000;">self</span>.<span style="color: black;">pause</span><span style="color: black;">&#41;</span>
&nbsp;
        b_cancel = gtk.<span style="color: black;">Button</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Cancel&quot;</span><span style="color: black;">&#41;</span>
        b_cancel.<span style="color: black;">set_border_width</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">4</span><span style="color: black;">&#41;</span>
        t_b.<span style="color: black;">attach</span><span style="color: black;">&#40;</span>b_cancel, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
        b_cancel.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;clicked&quot;</span>, <span style="color: #008000;">self</span>.<span style="color: black;">cancel</span>, win_conf, win<span style="color: black;">&#41;</span>
&nbsp;
        win.<span style="color: black;">show_all</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> quit<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, data=<span style="color: #008000;">None</span><span style="color: black;">&#41;</span>:
        <span style="color: #008000;">self</span>.<span style="color: black;">loop</span>.<span style="color: black;">quit</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        gtk.<span style="color: black;">main_quit</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> start<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, widget, data<span style="color: black;">&#41;</span>:
        <span style="color: #483d8b;">&quot;&quot;&quot;Start choosen process&quot;&quot;&quot;</span>
        win_conf = data
        <span style="color: #808080; font-style: italic;"># Get spinbutton values as int, calculate total and current time</span>
        h = <span style="color: #008000;">self</span>.<span style="color: black;">sp_h</span>.<span style="color: black;">get_value_as_int</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        m = <span style="color: #008000;">self</span>.<span style="color: black;">sp_m</span>.<span style="color: black;">get_value_as_int</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        s = <span style="color: #008000;">self</span>.<span style="color: black;">sp_s</span>.<span style="color: black;">get_value_as_int</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #008000;">self</span>.<span style="color: black;">t_total</span> = <span style="color: black;">&#40;</span>h<span style="color: #66cc66;">*</span><span style="color: #ff4500;">3600</span><span style="color: black;">&#41;</span>+<span style="color: black;">&#40;</span>m<span style="color: #66cc66;">*</span><span style="color: #ff4500;">60</span><span style="color: black;">&#41;</span>+s
        <span style="color: #008000;">self</span>.<span style="color: black;">t_current</span> = <span style="color: black;">&#40;</span>h<span style="color: #66cc66;">*</span><span style="color: #ff4500;">3600</span><span style="color: black;">&#41;</span>+<span style="color: black;">&#40;</span>m<span style="color: #66cc66;">*</span><span style="color: #ff4500;">60</span><span style="color: black;">&#41;</span>+s
&nbsp;
        <span style="color: #808080; font-style: italic;"># Hide main window and show run window</span>
        win_conf.<span style="color: black;">hide</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">win_run</span><span style="color: black;">&#40;</span>data<span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #008000;">self</span>.<span style="color: black;">timer</span><span style="color: black;">&#40;</span>h, m, s<span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> rb_callback<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, widget, data=<span style="color: #008000;">None</span><span style="color: black;">&#41;</span>:
        <span style="color: #483d8b;">&quot;&quot;&quot;Set do variable from user input&quot;&quot;&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> widget.<span style="color: black;">get_active</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">do</span> = data
&nbsp;
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> pause<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, widget<span style="color: black;">&#41;</span>:
        <span style="color: #483d8b;">&quot;&quot;&quot;Pause process&quot;&quot;&quot;</span>
        <span style="color: #808080; font-style: italic;"># Kill or start timer</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">t_current</span> <span style="color: #66cc66;">!</span>= <span style="color: #ff4500;">0</span>:
            <span style="color: #ff7700;font-weight:bold;">if</span> widget.<span style="color: black;">get_active</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
                gobject.<span style="color: black;">source_remove</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">g_id</span><span style="color: black;">&#41;</span>
            <span style="color: #ff7700;font-weight:bold;">else</span>:
                <span style="color: #008000;">self</span>.<span style="color: black;">g_id</span> = gobject.<span style="color: black;">timeout_add</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1000</span>, <span style="color: #008000;">self</span>.<span style="color: black;">count</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> cancel<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, widget, win_conf, win_run<span style="color: black;">&#41;</span>:
        <span style="color: #483d8b;">&quot;&quot;&quot;Cancel process&quot;&quot;&quot;</span>
        <span style="color: #808080; font-style: italic;"># Remove timer, destroy run window, show main window again</span>
        gobject.<span style="color: black;">source_remove</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">g_id</span><span style="color: black;">&#41;</span>
        win_run.<span style="color: black;">destroy</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        win_conf.<span style="color: black;">show</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> timer<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, h, m, s<span style="color: black;">&#41;</span>:
        <span style="color: #483d8b;">&quot;&quot;&quot;Call counter every second&quot;&quot;&quot;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">pb_time</span>.<span style="color: black;">set_text</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;%02i:%02i:%02i&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>h, m, s<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">g_id</span> = gobject.<span style="color: black;">timeout_add</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1000</span>, <span style="color: #008000;">self</span>.<span style="color: black;">count</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> count<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #483d8b;">&quot;&quot;&quot;Countdown and rewrite progressbar&quot;&quot;&quot;</span>
        <span style="color: #808080; font-style: italic;"># Countdown, calculate and update</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">t_current</span> <span style="color: #66cc66;">!</span>= <span style="color: #ff4500;">0</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">t_current</span> -= <span style="color: #ff4500;">1</span>
            pb_percent = <span style="color: #008000;">float</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">t_current</span><span style="color: black;">&#41;</span>/<span style="color: #008000;">float</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">t_total</span><span style="color: black;">&#41;</span>
&nbsp;
            pb_h = <span style="color: #008000;">self</span>.<span style="color: black;">t_current</span>/<span style="color: #ff4500;">3600</span>
            pb_m = <span style="color: #008000;">self</span>.<span style="color: black;">t_current</span><span style="color: #66cc66;">%</span>3600/<span style="color: #ff4500;">60</span>
            pb_s = <span style="color: #008000;">self</span>.<span style="color: black;">t_current</span><span style="color: #66cc66;">%</span>3600<span style="color: #66cc66;">%</span>60
&nbsp;
            <span style="color: #008000;">self</span>.<span style="color: black;">pb_time</span>.<span style="color: black;">set_fraction</span><span style="color: black;">&#40;</span>pb_percent<span style="color: black;">&#41;</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">pb_time</span>.<span style="color: black;">set_text</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;%02i:%02i:%02i&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>pb_h, pb_m, pb_s<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
            <span style="color: #808080; font-style: italic;"># Again, and again, and again...</span>
            <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">True</span>
        <span style="color: #ff7700;font-weight:bold;">else</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">initiate</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> initiate<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #483d8b;">&quot;&quot;&quot;Send dbus messages&quot;&quot;&quot;</span>
        <span style="color: #808080; font-style: italic;"># Shutdown with ConsoleKit</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">do</span> == <span style="color: #483d8b;">'shutdown'</span>:
            bus = dbus.<span style="color: black;">SystemBus</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            proxy = bus.<span style="color: black;">get_object</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'org.freedesktop.ConsoleKit'</span>, <span style="color: #483d8b;">'/org/freedesktop/ConsoleKit/Manager'</span><span style="color: black;">&#41;</span>
            iface = dbus.<span style="color: black;">Interface</span><span style="color: black;">&#40;</span>proxy, <span style="color: #483d8b;">'org.freedesktop.ConsoleKit.Manager'</span><span style="color: black;">&#41;</span>
            iface.<span style="color: black;">Stop</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
        <span style="color: #808080; font-style: italic;"># Reboot with ConsoleKit</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #008000;">self</span>.<span style="color: black;">do</span> == <span style="color: #483d8b;">'reboot'</span>:
            bus = dbus.<span style="color: black;">SystemBus</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            proxy = bus.<span style="color: black;">get_object</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'org.freedesktop.ConsoleKit'</span>, <span style="color: #483d8b;">'/org/freedesktop/ConsoleKit/Manager'</span><span style="color: black;">&#41;</span>
            iface = dbus.<span style="color: black;">Interface</span><span style="color: black;">&#40;</span>proxy, <span style="color: #483d8b;">'org.freedesktop.ConsoleKit.Manager'</span><span style="color: black;">&#41;</span>
            iface.<span style="color: black;">Restart</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
        <span style="color: #808080; font-style: italic;"># Hibernate with UPower</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #008000;">self</span>.<span style="color: black;">do</span> == <span style="color: #483d8b;">'hibernate'</span>:
            bus = dbus.<span style="color: black;">SystemBus</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            proxy = bus.<span style="color: black;">get_object</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'org.freedesktop.UPower'</span>, <span style="color: #483d8b;">'/org/freedesktop/UPower'</span><span style="color: black;">&#41;</span>
            iface = dbus.<span style="color: black;">Interface</span><span style="color: black;">&#40;</span>proxy, <span style="color: #483d8b;">'org.freedesktop.UPower'</span><span style="color: black;">&#41;</span>
            iface.<span style="color: black;">Hibernate</span><span style="color: black;">&#40;</span>ignore_reply=<span style="color: #008000;">True</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
        <span style="color: #808080; font-style: italic;"># Suspend with UPower</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #008000;">self</span>.<span style="color: black;">do</span> == <span style="color: #483d8b;">'suspend'</span>:
            bus = dbus.<span style="color: black;">SystemBus</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            proxy = bus.<span style="color: black;">get_object</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'org.freedesktop.UPower'</span>, <span style="color: #483d8b;">'/org/freedesktop/UPower'</span><span style="color: black;">&#41;</span>
            iface = dbus.<span style="color: black;">Interface</span><span style="color: black;">&#40;</span>proxy, <span style="color: #483d8b;">'org.freedesktop.UPower'</span><span style="color: black;">&#41;</span>
            iface.<span style="color: black;">Suspend</span><span style="color: black;">&#40;</span>ignore_reply=<span style="color: #008000;">True</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
        <span style="color: #008000;">self</span>.<span style="color: black;">loop</span>.<span style="color: black;">run</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
sdl = C_ShutdownLater<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://wag-net.ch/?feed=rss2&amp;p=319</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PyGTK: Stopwatch [update]</title>
		<link>http://wag-net.ch/?p=275</link>
		<comments>http://wag-net.ch/?p=275#comments</comments>
		<pubDate>Tue, 08 Dec 2009 21:31:42 +0000</pubDate>
		<dc:creator>wag</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[gobject]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[pygtk]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[stopwatch]]></category>

		<guid isPermaLink="false">http://wag-net.ch/?p=275</guid>
		<description><![CDATA[I was looking for a little easy-to-use stopwatch for gnome without success. Well then, let&#8217;s make an own one. Looks like this after 13 minutes, 37 seconds and 70 miliseconds: Magic by: python, pygtk, gobject Code below or here Update 1 Joakim Gebart increased the accuracy by using time.time(). See the comment for a patch. [...]]]></description>
			<content:encoded><![CDATA[<p>I was looking for a little easy-to-use stopwatch for gnome without success.<br />
Well then, let&#8217;s make an own one.</p>
<p><span id="more-275"></span></p>
<p>Looks like this after 13 minutes, 37 seconds and 70 miliseconds:<br />
<img src="http://wag-net.ch/pictures/pygtk-stopwatch.png" alt="pygtk-stopwatch" style="margin-top: 6px; margin-bottom: 2px;" /></p>
<p>Magic by: python, pygtk, gobject</p>
<p>Code below or <a href="http://github.com/wag/python/blob/73d373ce9180866333ffb465590616117b481d63/stopwatch/stopwatch.py">here</a></p>
<p><strong>Update 1</strong><br />
Joakim Gebart increased the accuracy by using time.time().<br />
See the <a href="http://wag-net.ch/?p=275#comment-1147">comment</a> for a patch.</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
<span style="color: #808080; font-style: italic;"># -*- coding: utf-8 -*-</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Nifty GTK stopwatch using pygtk and gobject.</span>
<span style="color: #808080; font-style: italic;"># min:sec.msec display; start, stop, reset and quit buttons.</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Version: 1.0</span>
<span style="color: #808080; font-style: italic;"># Requires: python &gt;=2.5, python-gtk2, python-gobject</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Copyright (C) 2009 wag@wag-net.ch</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># This program is free software: you can redistribute it and/or modify</span>
<span style="color: #808080; font-style: italic;"># it under the terms of the GNU General Public License as published by</span>
<span style="color: #808080; font-style: italic;"># the Free Software Foundation, either version 3 of the License, or</span>
<span style="color: #808080; font-style: italic;"># (at your option) any later version.</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># This program is distributed in the hope that it will be useful,</span>
<span style="color: #808080; font-style: italic;"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span style="color: #808080; font-style: italic;"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
<span style="color: #808080; font-style: italic;"># GNU General Public License for more details.</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># You should have received a copy of the GNU General Public License</span>
<span style="color: #808080; font-style: italic;"># along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
&nbsp;
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> pygtk, gtk, pango
pygtk.<span style="color: black;">require</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'2.0'</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">import</span> gobject
gobject.<span style="color: black;">threads_init</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> W_Timer<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #008000;">self</span>.<span style="color: black;">s</span> = <span style="color: #ff4500;">0.0</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">m</span> = <span style="color: #ff4500;">0</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">g_id</span> = <span style="color: #ff4500;">0</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">win</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> b_start_cb<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, widget<span style="color: black;">&#41;</span>:
        <span style="color: #808080; font-style: italic;"># Start gobject, impossible to speed up by clicking multiple times</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">g_id</span> == <span style="color: #ff4500;">0</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">g_id</span> = gobject.<span style="color: black;">timeout_add</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">100</span>, <span style="color: #008000;">self</span>.<span style="color: black;">count</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> b_stop_cb<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, widget<span style="color: black;">&#41;</span>:
        <span style="color: #808080; font-style: italic;"># Kill gobject, reset g_id</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">g_id</span> <span style="color: #66cc66;">!</span>= <span style="color: #ff4500;">0</span>:
            gobject.<span style="color: black;">source_remove</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">g_id</span><span style="color: black;">&#41;</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">g_id</span> = <span style="color: #ff4500;">0</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> b_reset_cb<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, widget<span style="color: black;">&#41;</span>:
        <span style="color: #808080; font-style: italic;"># Reset time</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">s</span> = <span style="color: #ff4500;">0.0</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">m</span> = <span style="color: #ff4500;">0</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">l_time</span>.<span style="color: black;">set_text</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;00:00.0&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> win<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        win = gtk.<span style="color: black;">Window</span><span style="color: black;">&#40;</span>gtk.<span style="color: black;">WINDOW_TOPLEVEL</span><span style="color: black;">&#41;</span>
        win.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;destroy&quot;</span>, <span style="color: #ff7700;font-weight:bold;">lambda</span> q: gtk.<span style="color: black;">main_quit</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        win.<span style="color: black;">set_title</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Stopwatch&quot;</span><span style="color: black;">&#41;</span>
        win.<span style="color: black;">set_border_width</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">20</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #808080; font-style: italic;"># Table and window size</span>
        table = gtk.<span style="color: black;">Table</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">3</span>, <span style="color: #008000;">False</span><span style="color: black;">&#41;</span>
        win.<span style="color: black;">set_geometry_hints</span><span style="color: black;">&#40;</span>table, min_width=<span style="color: #ff4500;">160</span>, min_height=<span style="color: #ff4500;">150</span><span style="color: black;">&#41;</span>
        table.<span style="color: black;">set_row_spacings</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span>
        table.<span style="color: black;">set_col_spacings</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">3</span><span style="color: black;">&#41;</span>
        win.<span style="color: black;">add</span><span style="color: black;">&#40;</span>table<span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #808080; font-style: italic;"># AspectFrame, into table</span>
        af_time = gtk.<span style="color: black;">AspectFrame</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        table.<span style="color: black;">attach</span><span style="color: black;">&#40;</span>af_time, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #808080; font-style: italic;"># Time label, into aspect frame, font size: 19</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">l_time</span> = gtk.<span style="color: black;">Label</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;00:00.0&quot;</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">l_time</span>.<span style="color: black;">modify_font</span><span style="color: black;">&#40;</span>pango.<span style="color: black;">FontDescription</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;19&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">l_time</span>.<span style="color: black;">set_padding</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">10</span>, <span style="color: #ff4500;">5</span><span style="color: black;">&#41;</span>
        af_time.<span style="color: black;">add</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">l_time</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #808080; font-style: italic;"># Buttons, into table, font size: 11</span>
        b_start = gtk.<span style="color: black;">Button</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Start&quot;</span><span style="color: black;">&#41;</span>
        b_start.<span style="color: black;">child</span>.<span style="color: black;">modify_font</span><span style="color: black;">&#40;</span>pango.<span style="color: black;">FontDescription</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;11&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        table.<span style="color: black;">attach</span><span style="color: black;">&#40;</span>b_start, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>
        b_start.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;clicked&quot;</span>, <span style="color: #008000;">self</span>.<span style="color: black;">b_start_cb</span><span style="color: black;">&#41;</span>
&nbsp;
        b_stop = gtk.<span style="color: black;">Button</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Stop&quot;</span><span style="color: black;">&#41;</span>
        b_stop.<span style="color: black;">child</span>.<span style="color: black;">modify_font</span><span style="color: black;">&#40;</span>pango.<span style="color: black;">FontDescription</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;11&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        table.<span style="color: black;">attach</span><span style="color: black;">&#40;</span>b_stop, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>
        b_stop.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;clicked&quot;</span>, <span style="color: #008000;">self</span>.<span style="color: black;">b_stop_cb</span><span style="color: black;">&#41;</span>
&nbsp;
        b_reset = gtk.<span style="color: black;">Button</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Reset&quot;</span><span style="color: black;">&#41;</span>
        b_reset.<span style="color: black;">child</span>.<span style="color: black;">modify_font</span><span style="color: black;">&#40;</span>pango.<span style="color: black;">FontDescription</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;11&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        table.<span style="color: black;">attach</span><span style="color: black;">&#40;</span>b_reset, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">3</span><span style="color: black;">&#41;</span>
        b_reset.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;clicked&quot;</span>, <span style="color: #008000;">self</span>.<span style="color: black;">b_reset_cb</span><span style="color: black;">&#41;</span>
&nbsp;
        b_quit = gtk.<span style="color: black;">Button</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot; Quit &quot;</span><span style="color: black;">&#41;</span>
        b_quit.<span style="color: black;">child</span>.<span style="color: black;">modify_font</span><span style="color: black;">&#40;</span>pango.<span style="color: black;">FontDescription</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;11&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        table.<span style="color: black;">attach</span><span style="color: black;">&#40;</span>b_quit, <span style="color: #ff4500;">1</span>, <span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">3</span><span style="color: black;">&#41;</span>
        b_quit.<span style="color: black;">connect</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;clicked&quot;</span>, <span style="color: #ff7700;font-weight:bold;">lambda</span> q: gtk.<span style="color: black;">main_quit</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #808080; font-style: italic;"># Run GTK and show window, buttons, etc.</span>
        win.<span style="color: black;">show_all</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        gtk.<span style="color: black;">main</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> count<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #808080; font-style: italic;"># A minute yet?</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">s</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #ff4500;">60</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">m</span> += <span style="color: #ff4500;">1</span>
            <span style="color: #008000;">self</span>.<span style="color: black;">s</span> = <span style="color: #ff4500;">0.0</span>
        <span style="color: #ff7700;font-weight:bold;">else</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">s</span> += <span style="color: #ff4500;">0.1</span>
&nbsp;
        <span style="color: #808080; font-style: italic;"># Set new time to label</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">l_time</span>.<span style="color: black;">set_text</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;%02i:%04.1f&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">m</span> , <span style="color: #008000;">self</span>.<span style="color: black;">s</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #808080; font-style: italic;"># Play it again, Sam</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">True</span>
&nbsp;
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">&quot;__main__&quot;</span>:
    t = W_Timer<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://wag-net.ch/?feed=rss2&amp;p=275</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Howto: Install Rockbox on IPod nano 2. Gen</title>
		<link>http://wag-net.ch/?p=251</link>
		<comments>http://wag-net.ch/?p=251#comments</comments>
		<pubDate>Thu, 12 Nov 2009 19:14:45 +0000</pubDate>
		<dc:creator>wag</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[ipod]]></category>

		<guid isPermaLink="false">http://wag-net.ch/?p=251</guid>
		<description><![CDATA[Some weeks ago, the Linux4Nano project managed to break the IPod nano 2. Generation. Thus, it&#8217;s now possible to run custom applications on the device. Rockbox made a port (currently in development mode) which runs quite well. To get it running, you&#8217;ll have to install a bootloader (from Rockbox or Linux4Nano) and Rockbox itself. The [...]]]></description>
			<content:encoded><![CDATA[<p>Some weeks ago, the <a href="http://home.gna.org/linux4nano/">Linux4Nano</a> project managed to break the IPod nano 2. Generation.<br />
Thus, it&#8217;s now possible to run custom applications on the device.<br />
<a href="http://www.rockbox.org/">Rockbox</a> made a port (currently in development mode) which runs quite well.</p>
<p>To get it running, you&#8217;ll have to install a bootloader (from Rockbox or Linux4Nano) and Rockbox itself.<br />
The following steps worked for me but due development state, there&#8217;s no guarantee for anyone!<br />
If everything worked, nothing will break and all music will be available like before.</p>
<p>Ok? Ok!</p>
<p><span id="more-251"></span></p>
<p>- Connect the IPod to your computer<br />
- Download <a href="http://download.rockbox.org/bootloader/ipod/ipodpatcher/">ipodpatcher</a> and make it executable</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;">$ chmod +x ipodpatcher</pre></div></div>

<p>- Decide if you want to be able to start some other stuff beside Rockbox<br />
- Rockbox only:</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;"># ./ipodpatcher</pre></div></div>

<p>- Rockbox, original Apple software and other images, download <a href="http://l4n.clustur.com/data/theseven/releases/iloader/installer.ipodx">ILoader</a> and:</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;"># ./ipodpatcher -a iloader.ipodx</pre></div></div>

<p>- Download <a href="http://build.rockbox.org/data/rockbox-ipodnano2g.zip">Rockbox</a> and extract it to the root directory of your IPod<br />
- Safely remove the IPod and restart it (press &#8216;Select&#8217;+'Menu&#8217;)</p>
<p>- Now, depending on your bootloader, Rockbox or&#8230;<br />
<img style="margin-top: 2px; margin-bottom: 2px;" src="http://wag-net.ch/pictures/rockbox1.jpg" alt="rockbox1" /><img style="margin-top: 2px; margin-bottom: 2px;" src="http://wag-net.ch/pictures/rockbox2.jpg" alt="rockbox1" /></p>
<p>- ILoader will start, select Rockbox with &#8216;Play/Pause&#8217;, the old Apple software with &#8216;Reverse&#8217; or all the other <a href="http://l4n.clustur.com/index.php/ILoader">stuff</a>&#8230;<br />
<img style="margin-top: 2px; margin-bottom: 2px;" src="http://wag-net.ch/pictures/iloader.jpg" alt="iloader" /></p>
]]></content:encoded>
			<wfw:commentRss>http://wag-net.ch/?feed=rss2&amp;p=251</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu 9.10: 32 and 64 Bit Benchmark</title>
		<link>http://wag-net.ch/?p=187</link>
		<comments>http://wag-net.ch/?p=187#comments</comments>
		<pubDate>Sat, 31 Oct 2009 18:23:15 +0000</pubDate>
		<dc:creator>wag</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[32bit]]></category>
		<category><![CDATA[64bit]]></category>
		<category><![CDATA[benchmark]]></category>

		<guid isPermaLink="false">http://wag-net.ch/?p=187</guid>
		<description><![CDATA[To 64 bit or not to 64 bit. 64 bit has some advantages and disadvantages compared to 32 bit. + possible to address more than 4GB RAM + better performance with various tools - not all applications are 64 bit available - more RAM space used due larger pointers and data types Well, well, lets [...]]]></description>
			<content:encoded><![CDATA[<p>To 64 bit or not to 64 bit.</p>
<p>64 bit has some advantages and disadvantages compared to 32 bit.<br />
+ possible to address more than 4GB RAM<br />
+ better performance with various tools<br />
- not all applications are 64 bit available<br />
- more RAM space used due larger pointers and data types</p>
<p>Well, well, lets see what it does in general usage&#8230;</p>
<p><span id="more-187"></span></p>
<p>The following tests were executed on an identical 32 bit Ubuntu 9.10 and a 64 bit Ubuntu 9.10 setup:<br />
- Boot speed from grub to the desktop with bootchart<br />
- Copy a file (888MB) from and to an external HDD<br />
- The same as above but copy from and to a Truecrypt container<br />
- Compress and decompress a directory (333.5MB, 31&#8217;000 files) with tar-gzip and tar-bzip2<br />
- Encrypt and decrypt a tar archive (348.8MB) with OpenSSL (AES-256-CBC)<br />
- Encrypt and decrypt the same archive with GPG (DSA/ELG-E 4096)<br />
- Encode a wav audio file (96.8MB) to mp3 and ogg with Lame and OggEnc<br />
- Encode a wmv (71.5MB) and avi-xvid (253.8MB) Video file to mkv-x264 with mencoder<br />
- Benchmark blender.test with Blender<br />
- Benchmark various Nexuiz demos<br />
- Compile the 2.6.31-15 kernel</p>
<p>Test conditions were:<br />
- time command to measure the exact duration (except Nexuiz and Blender benchmark)<br />
- Run every test 3 times or more (except kernel compilation)<br />
- sync systemcalls to clear memory before tests</p>
<p>Test Machine specs:<br />
- Asus P5K Pro P35<br />
- Intel Core2Duo E6750 2.6Ghz<br />
- Kingston 2GB RAM<br />
- Samsung SATA 320GB 7200rpm<br />
- GeForce 8600GT 256MB</p>
<p>Versions:<br />
- Kernel: 2.6.31-14<br />
- Bootchart: 0.90.2<br />
- Truecrypt: 6.3<br />
- VirtualBox: 3.0.8<br />
- OpenSSL: 0.9.8<br />
- GPG: 1.4.9<br />
- Lame: 3.98.2<br />
- Vorbis-tools (OggEnc): 1.2.0<br />
- Mencoder: 1.0<br />
- Blender: 2.49<br />
- Nexuiz: 2.5.2<br />
- gcc: 4.4.1</p>
<p>Now, the charts:</p>
<p>Startup speed measured with bootchart<br />
<img style="border: 1px solid black; margin-left: 2px; margin-right: 2px;" src="http://wag-net.ch/pictures/bench/bootchart.jpg" alt="bootchart" width="347" height="303" /></p>
<p>Copy a file (888MB) to and from an external USB 2.0 HDD<br />
Copy to HDD                                                                   Copy from HDD<br />
<img style="border: 1px solid black; margin-left: 2px; margin-right: 2px;" src="http://wag-net.ch/pictures/bench/cptohdd.jpg" alt="cptohdd" width="347" height="303" /><img style="border: 1px solid black; margin-left: 2px; margin-right: 2px;" src="http://wag-net.ch/pictures/bench/cpfromhdd.jpg" alt="cpfromhdd" width="347" height="303" /></p>
<p>Copy a file (888MB) to and from a Truecrypt container lying on the external USB 2.0 HDD<br />
Copy to TC container                                                                                                                Copy from TC container<br />
<img style="border: 1px solid black; margin-left: 2px; margin-right: 2px;" src="http://wag-net.ch/pictures/bench/cptotchdd.jpg" alt="cptotchdd" width="347" height="303" /><img style="border: 1px solid black; margin-left: 2px; margin-right: 2px;" src="http://wag-net.ch/pictures/bench/cpfromtchdd.jpg" alt="cpfromtchdd" width="347" height="303" /></p>
<p>Not a real difference</p>
<p>Compress and decompress a directory (333.5MB, 31&#8217;000 files) with tar and gzip<br />
Compress                                                                         Decompress<br />
<img style="border: 1px solid black; margin-left: 2px; margin-right: 2px;" src="http://wag-net.ch/pictures/bench/comptargz.jpg" alt="comptargz" width="347" height="303" /><img style="border: 1px solid black; margin-left: 2px; margin-right: 2px;" src="http://wag-net.ch/pictures/bench/decomptargz.jpg" alt="decomptargz" width="347" height="303" /></p>
<p>Compress and decompress a directory (333.5MB, 31&#8217;000 files) with tar and bzip2<br />
Compress                                                                         Decompress<br />
<img style="border: 1px solid black; margin-left: 2px; margin-right: 2px;" src="http://wag-net.ch/pictures/bench/comptarbz2.jpg" alt="comptarbz2" width="347" height="303" /><img style="border: 1px solid black; margin-left: 2px; margin-right: 2px;" src="http://wag-net.ch/pictures/bench/decomptarbz2.jpg" alt="decomptarbz2" width="347" height="303" /></p>
<p>64 bit for compression, 32 bit for decompression</p>
<p>Encrypt and decrypt a tar archive (348.8MB) with OpenSSL AES-256-CBC<br />
Encrypt                                                                            Decrypt<br />
<img style="border: 1px solid black; margin-left: 2px; margin-right: 2px;" src="http://wag-net.ch/pictures/bench/encopenssl.jpg" alt="encopenssl" width="347" height="303" /><img style="border: 1px solid black; margin-left: 2px; margin-right: 2px;" src="http://wag-net.ch/pictures/bench/decopenssl.jpg" alt="decopenssl" width="347" height="303" /></p>
<p>Encrypt and decrypt a tar archive (348.8MB) with GPG DSA/ELG-E 4096 bit Key<br />
Encrypt                                                                             Decrypt<br />
<img style="border: 1px solid black; margin-left: 2px; margin-right: 2px;" title="Encrypt" src="http://wag-net.ch/pictures/bench/encgpg.jpg" alt="encgpg" width="347" height="303" /><img style="border: 1px solid black; margin-left: 2px; margin-right: 2px;" src="http://wag-net.ch/pictures/bench/decgpg.jpg" alt="decgpg" width="347" height="324" /></p>
<p>As you can see, encryption profits from 64 bit (except Truecrypt copy processes)</p>
<p>Encode a raw wav audio file (96.8MB) to mp3 with Lame<br />
<img style="border: 1px solid black; margin-left: 2px; margin-right: 2px;" src="http://wag-net.ch/pictures/bench/wavmp3.jpg" alt="wavlame" /></p>
<p>Encode a raw wav audio file (96.8MB) to ogg with OggEnc<br />
<img style="border: 1px solid black; margin-left: 2px; margin-right: 2px;" src="http://wag-net.ch/pictures/bench/wavogg.jpg" alt="wavogg" width="347" height="303" /></p>
<p>Overall better audio encoding with 64 bit</p>
<p>Encode a wmv video file (71.5MB) to mkv (x264 codec) with mencoder<br />
<img style="border: 1px solid black; margin-left: 2px; margin-right: 2px;" src="http://wag-net.ch/pictures/bench/wmvmkv.jpg" alt="wmvmkv" width="347" height="324" /></p>
<p>Encode a avi (xvid codec) video file (253.8MB) to mkv (x264 codec) with mencoder<br />
<img style="border: 1px solid black; margin-left: 2px; margin-right: 2px;" src="http://wag-net.ch/pictures/bench/avimkv.jpg" alt="avimkv" width="347" height="324" /></p>
<p>XviD  1 : 0  WMV</p>
<p>Blender <a href="http://www.eofw.org/bench/">benchmark</a> with the test.blend file<br />
<img style="border: 1px solid black; margin-left: 2px; margin-right: 2px;" src="http://wag-net.ch/pictures/bench/blender.jpg" alt="blender" width="347" height="303" /></p>
<p>Heavily based on CPU usage</p>
<p>Nexuiz benchmark with the demos 1, 3, 5, average frames per second over all three demos<br />
<img style="border: 1px solid black; margin-left: 2px; margin-right: 2px;" src="http://wag-net.ch/pictures/bench/nexuiz.jpg" alt="nexuiz" width="347" height="303" /></p>
<p>Tested with this open source game, may be different on closed source games</p>
<p>Kernel 2.6.31-15 compilation time with the &#8216;make menuconfig&#8217; .config file<br />
<img style="border: 1px solid black; margin-left: 2px; margin-right: 2px;" src="http://wag-net.ch/pictures/bench/make.jpg" alt="kernel" /></p>
<p>A bit more than 2 minutes between the two architectures on about an hour of compilation</p>
<p>The tar.gz, tar.bz2 and blender test were also run inside a VirtualBox Ubuntu 9.10 32 bit environment<br />
on both setups, but with no notable difference</p>
<p>Well, except for a few tests, 64 bit made the race.</p>
<p>Why not give Ubuntu 9.10 64 bit a try?</p>
]]></content:encoded>
			<wfw:commentRss>http://wag-net.ch/?feed=rss2&amp;p=187</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Steampunk USB-Stick</title>
		<link>http://wag-net.ch/?p=157</link>
		<comments>http://wag-net.ch/?p=157#comments</comments>
		<pubDate>Fri, 16 Oct 2009 19:08:46 +0000</pubDate>
		<dc:creator>wag</dc:creator>
				<category><![CDATA[Art]]></category>
		<category><![CDATA[steampunk]]></category>
		<category><![CDATA[usbstick]]></category>

		<guid isPermaLink="false">http://wag-net.ch/?p=157</guid>
		<description><![CDATA[After discovering Steampunk some days ago, I decided to make something by myself. I steampunk&#8217;d my old 2GB USB-Stick: But how? Well&#8230; behold the adventures of Steampunk&#8230; Frist, gathering some old clock pieces. (bought various clocks for 25SFr/16€/25$ and disassembled them) The case for the Stick came from an old wooden pendulum clock. I don&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>After discovering <a href="http://en.wikipedia.org/wiki/Steampunk">Steampunk</a> some days ago, I decided to make something by myself.<br />
I steampunk&#8217;d my old 2GB USB-Stick:</p>
<p><span id="more-157"></span><br />
<img style="margin: 5px 0px;" src="http://wag-net.ch/pictures/steampunk_usb.jpg" alt="Steampunk USB-Stick" /></p>
<p><br/><br />
But how?<br />
<br/><br />
Well&#8230; behold the adventures of Steampunk&#8230;<br />
<br/></p>
<p><img style="margin: 5px 0px;" src="http://wag-net.ch/pictures/sp1.jpg" alt="sp1" /><br />
Frist, gathering some old clock pieces.<br />
(bought various clocks for 25SFr/16€/25$ and disassembled them)</p>
<p><img style="margin: 5px 0px;" src="http://wag-net.ch/pictures/sp2.jpg" alt="sp2" /><br />
The case for the Stick came from an old wooden pendulum clock.<br />
I don&#8217;t have much experience in building things with wood and metal,<br />
also i don&#8217;t have a garage filled with big tools, so this looks a bit messed up.</p>
<p><img style="margin: 5px 0px;" src="http://wag-net.ch/pictures/sp3.jpg" alt="sp3" /><br />
Next, the stick has to fit into part 1&amp;2, took some drilling and rasping.</p>
<p><img style="margin: 5px 0px;" src="http://wag-net.ch/pictures/sp4.jpg" alt="sp4" /><br />
By using glue, adding multiple gears and other pieces from the clocks onto part 1&amp;2.<br />
Nearly all pieces could be used in their original form, but some of them had to be<br />
downsized to fit the imagination.</p>
<p><img style="margin: 5px 0px;" src="http://wag-net.ch/pictures/sp5.jpg" alt="sp5" /><br />
After some painting and gluing, finally combining the two parts and the stick.</p>
<p><img style="margin: 5px 0px;" src="http://wag-net.ch/pictures/sp6.jpg" alt="sp6" /><br />
Again, drilling and rasping the holes into part 3&amp;4.<br />
This step has to be very exact, else the head won&#8217;t hold onto the usb-connector.</p>
<p><img style="margin: 5px 0px;" src="http://wag-net.ch/pictures/sp7.jpg" alt="sp7" /><br />
<a href="http://wag-net.ch/pictures/sp7b.jpg">Fullsize Image (450KB)</a><br />
Adding some more gears, creating a little chimney and<br />
connecting body &amp; head with a miniature chain.<br />
Finally, more painting and some varnish over the wood.</p>
<p><br/><br />
The whole took about 20-30h.<br />
But could easily be done in less time with some experience and the right tools.</p>
]]></content:encoded>
			<wfw:commentRss>http://wag-net.ch/?feed=rss2&amp;p=157</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Howto: Hack Nokia 5800 XM (31.0.008, 31.0.101) with HelloOX2/RomPatcher+ [update]</title>
		<link>http://wag-net.ch/?p=127</link>
		<comments>http://wag-net.ch/?p=127#comments</comments>
		<pubDate>Thu, 01 Oct 2009 19:59:35 +0000</pubDate>
		<dc:creator>wag</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[helloox2]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[nokia]]></category>
		<category><![CDATA[rompatcher+]]></category>

		<guid isPermaLink="false">http://wag-net.ch/?p=127</guid>
		<description><![CDATA[If you want to install custom applications on your Nokia 5800 XM, you&#8217;ll have to sign them with a certificate&#8230; or just hack the phone and sign nothing. Before you can start, you have to get a developer certificate especially for your phone. Visit cer.opda.cn , register, login, goto My Certificates and press Apply cer. [...]]]></description>
			<content:encoded><![CDATA[<p>If you want to install custom applications on your Nokia 5800 XM, you&#8217;ll have to sign them with a certificate&#8230;<br />
or just hack the phone and sign nothing.</p>
<p>Before you can start, you have to get a developer certificate especially for your phone.<br />
Visit <a href="http://cer.opda.cn/en">cer.opda.cn</a> , register, login, goto <em>My Certificates</em> and press <em>Apply cer</em>.<br />
Enter your information, you&#8217;ll find the IMEI number by typing &#8216;*#06#&#8217; into your phone.<br />
Your .cer and .key files will appear on <em>My Certificates</em> after about 24h.</p>
<p>Download the <em>HelloOX2 Unsigned</em> package from <a href="http://helloox2.com">helloOX2.com</a><br />
Now you have to sign the .sis package with your new developer certificate.<br />
There are several ways to sign: Online signing (f.e. cer.opda.cn), various Windows tools,<br />
<a href="http://www.martin.st/symbian">symbian sdk kit</a> for linux which includes a signing tool, or directly on the phone (f.e. <a href="http://rapidshare.com/files/252301309/FreeSigner_v1.1_S60_5th.zip">FreeSigner</a>).<br />
The FreeSigner tool is already signed with a certificate (.sis<strong>x</strong>), means you can install it without any modifications.</p>
<p>Before hacking, backup your personal data on the phone either over Windows and Nokia PC Suite,<br />
or use the internal backup tool from your phone and then backup your memory card.</p>
<p>Transfer your (un)signed HelloOX2 package to your phone via Nokia PC Suite<br />
or manually to MEMORYCARD/data/installs, unplug phone and then install it on the memory card.<br />
Just follow the popups (Modo is a file manager, if you need it).<br />
Remove HelloOX2 if you like (but not RomPatcher+ !).<br />
Afterwards, start RomPatcher+, activate Installserver_FP2 and add it to Auto.</p>
<p>Your phone is now hacked and you can install unsigned applications.</p>
<p>All credits to HelloOX2 and RomPatcher+ team.</p>
<p><strong>Update 1:</strong><br />
Sadly my phone has an old product code, the new 40.0.005 is not available for me.<br />
But updating from 31.0.008 to 31.0.101 still works with HelloOX2 (hooray&#8230;.)</p>
<p><strong>Update 2:</strong><br />
After version 50.0.005 upgrade, apps and rompatcher+ are still working.<br />
No reinstall required, but if you would like to, consult HelloOX2.com</p>
<p>Take a look at these pages for apps, themes, games, etc.<br />
<a href="http://diabo.freehostia.com/symbian/">Symbian Underground</a><br />
<a href="http://www.mobilecastle.biz/mobiles/s60-v5-symbian-os-9-4-applications/">MobileCastle &#8211; S60 v5 Symbian OS 9.4 Applications</a><br />
<a href="http://forum.dailymobile.se/index.php/board,52.0">DailyMobile &#8211; Symbian S60v5 Forum</a><br />
<a href="http://gizmogates.com/forum/YaBB.pl?catselect=s60v5">GizmoGates &#8211; Symbian S60 5th Edition Application / Games / Themes</a></p>
]]></content:encoded>
			<wfw:commentRss>http://wag-net.ch/?feed=rss2&amp;p=127</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
