<?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>Bitwise Evolution &#187; x61</title>
	<atom:link href="http://blog.ciscavate.org/category/tech/x61/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.ciscavate.org</link>
	<description>Musings of a Seattle-area hacker with a bent on improving digital lifestyles.</description>
	<lastBuildDate>Sun, 25 Jul 2010 23:21:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>The Linux Tablet: Wacom rotations &#8211; waking up on the wrong side</title>
		<link>http://blog.ciscavate.org/2009/01/the-linux-tablet-wacom-rotations-waking-up-on-the-wrong-side.html</link>
		<comments>http://blog.ciscavate.org/2009/01/the-linux-tablet-wacom-rotations-waking-up-on-the-wrong-side.html#comments</comments>
		<pubDate>Mon, 26 Jan 2009 06:45:46 +0000</pubDate>
		<dc:creator>rcreswick</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[x61]]></category>

		<guid isPermaLink="false">http://blog.ciscavate.org/?p=64</guid>
		<description><![CDATA[Update: updated the script with improved (functional) error output.  added notes about xhost.

There is an annoying bug in the sequence of code that manages the wacom rotation / sleep / resume and stylus calibration right now. (Where &#8220;right now&#8221; is Ubuntu Intrepid, with the 0.8.2-1 wacom drivers.)

This is a document bug over at the [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update: updated the script with improved (functional) error output.  added notes about xhost.</strong></p>

<p>There is an annoying bug in the sequence of code that manages the wacom rotation / sleep / resume and stylus calibration right now. (Where &#8220;right now&#8221; is Ubuntu Intrepid, with the <a href="http://linuxwacom.sourceforge.net/">0.8.2-1 wacom drivers</a>.)</p>

<p>This is a document bug over at the <a href="https://bugs.launchpad.net/ubuntu/+source/wacom-tools/+bug/295292">ubuntu launchpad</a>, and the poster there does a fine job of describing the intricacies of reproducing the bug, so I&#8217;ll only give a brief explanation here to help get indexed.</p>

<p>If you rotate the screen any amount, even returning to the original rotation, and then sleep the machine, when it wakes up, the stylus will not be calibrated properly &#8212; the cursor will be off to the side of the stylus point.  It doesn&#8217;t seem to matter how it was calibrated when the machine slept, nor does it matter what rotation you&#8217;re in when you put the machine to sleep.</p>

<p>There is one straightforward workaround:  When you wake the machine, run wacomcpl, click on stylus, click calibrate (the mouse should now be under the stylus again), and exit wacomcpl.  This is incredibly cumbersome, but at least it&#8217;s better than restarting X, which is what I have been doing.</p>

<p>Further inspection (based largely on the thread of comments on that launchpad bug) reveals that the problem is actually related to bad values for the TopX, TopY, BottomX and BottomY settings on the wacom devices after a resume.  By resetting these to their proper values for the current rotation, we can reestablish the proper calibration.  First off, we need to know the proper values, and the easiest way to get them is with <code>xsetwacom</code>:</p>

<div class="codecolorer-container bash"><div class="codecolorer" style="font-family: monospace;"><span class="re3">#!/bin/bash</span><br />
<span class="re3"># wacomSettings</span><br />
<br />
<span class="kw3">echo</span> <span class="st0">&quot;TopX=&quot;</span> `xsetwacom get stylus TopX`<br />
<span class="kw3">echo</span> <span class="st0">&quot;TopY=&quot;</span> `xsetwacom get stylus TopY`<br />
<span class="kw3">echo</span> <span class="st0">&quot;BottomX=&quot;</span> `xsetwacom get stylus BottomX`<br />
<span class="kw3">echo</span> <span class="st0">&quot;BottomY=&quot;</span> `xsetwacom get stylus BottomY`</div></div>

<p>Now, we&#8217;ll run this for each rotation, and save the results.  You should end up with something like the following:</p>

<div class="codecolorer-container bash" style="height:280px;"><div class="codecolorer" style="font-family: monospace;">|rogue on bach |AC <span class="nu0">70</span>% | @ <span class="nu0">00</span>:<span class="nu0">02</span>:<span class="nu0">26</span> ~|<br />
&nbsp;$ xrotate <span class="nu0">1</span> &amp;&amp; wacomSettings<br />
xrandr to left, xsetwacom to <span class="nu0">2</span><br />
<span class="re2">TopX=</span> <span class="nu0">-46</span><br />
<span class="re2">TopY=</span> <span class="nu0">-3</span><br />
<span class="re2">BottomX=</span> <span class="nu0">18605</span><br />
<span class="re2">BottomY=</span> <span class="nu0">24518</span><br />
&nbsp;|rogue on bach |AC <span class="nu0">70</span>% | @ <span class="nu0">00</span>:<span class="nu0">02</span>:<span class="nu0">28</span> ~|<br />
&nbsp;$ xrotate <span class="nu0">2</span> &amp;&amp; wacomSettings<br />
xrandr to inverted, xsetwacom to <span class="nu0">3</span><br />
<span class="re2">TopX=</span> <span class="nu0">58</span><br />
<span class="re2">TopY=</span> <span class="nu0">-46</span><br />
<span class="re2">BottomX=</span> <span class="nu0">24579</span><br />
<span class="re2">BottomY=</span> <span class="nu0">18605</span><br />
&nbsp;|rogue on bach |AC <span class="nu0">70</span>% | @ <span class="nu0">00</span>:<span class="nu0">02</span>:<span class="nu0">35</span> ~|<br />
&nbsp;$ xrotate <span class="nu0">3</span> &amp;&amp; wacomSettings<br />
xrandr to right, xsetwacom to <span class="nu0">1</span><br />
<span class="re2">TopX=</span> <span class="nu0">-173</span><br />
<span class="re2">TopY=</span> <span class="nu0">58</span><br />
<span class="re2">BottomX=</span> <span class="nu0">18478</span><br />
<span class="re2">BottomY=</span> <span class="nu0">24579</span><br />
&nbsp;|rogue on bach |AC <span class="nu0">70</span>% | @ <span class="nu0">00</span>:<span class="nu0">02</span>:<span class="nu0">41</span> ~|<br />
&nbsp;$ xrotate <span class="nu0">0</span> &amp;&amp; wacomSettings<br />
xrandr to normal, xsetwacom to <span class="nu0">0</span><br />
<span class="re2">TopX=</span> <span class="nu0">-3</span><br />
<span class="re2">TopY=</span> <span class="nu0">-173</span><br />
<span class="re2">BottomX=</span> <span class="nu0">24518</span><br />
<span class="re2">BottomY=</span> <span class="nu0">18478</span></div></div>

<p>(Note that my bash prompt looks like &amp; command lines above are indented, and the output is left-aligned)</p>

<p>That gives us enough information to script the calibration when we resume.  For example, when resuming to a &#8220;normal&#8221; rotation, I need to run:</p>

<div class="codecolorer-container bash"><div class="codecolorer" style="font-family: monospace;">xsetwacom <span class="kw3">set</span> stylus TopX <span class="nu0">-3</span><br />
xsetwacom <span class="kw3">set</span> stylus TopY <span class="nu0">-173</span><br />
xsetwacom <span class="kw3">set</span> stylus BottomX <span class="nu0">24518</span><br />
xsetwacom <span class="kw3">set</span> stylus BottomY <span class="nu0">18478</span></div></div>

<p>(Wrap that in a bash script and give it a shot!)</p>

<p>Here&#8217;s the full script that gets the current orientation and then calibrates the common wacom devices:</p>

<div class="codecolorer-container bash" style="height:280px;"><div class="codecolorer" style="font-family: monospace;"><span class="re3">#!/bin/bash</span><br />
<span class="re3">#</span><br />
<span class="re3"># waCalibrate.sh: recalibrates the wacom stylus</span><br />
<span class="re3">#</span><br />
<span class="re3"># Author: Rogan Creswick</span><br />
<span class="re3"># License: just be nice</span><br />
<br />
<span class="re3"># Set LOG to something reasonable: </span><br />
<span class="re3"># <span class="br0">&#40;</span>The file does not need to exist, but the *directory* does<span class="br0">&#41;</span></span><br />
<span class="re2">LOG=</span>/home/rogue/calibration.out<br />
<span class="re2">XSETWACOM=</span>/usr/<span class="kw3">local</span>/bin/xsetwacom<br />
<br />
<br />
<span class="re3">#</span><br />
<span class="re3"># Calibrates the wacom devices <span class="br0">&#123;</span>stylus, eraser, cursor<span class="br0">&#125;</span> with the </span><br />
<span class="re3"># given offsets:</span><br />
<span class="re3">#</span><br />
<span class="re3">#&nbsp; Usage:</span><br />
<span class="re3">#&nbsp; &nbsp; &nbsp;calibrate &lt;topx&gt; &lt;topy&gt; &lt;bottomx&gt; &lt;bottomy&gt;</span><br />
<span class="re3">#</span><br />
<span class="kw1">function</span> calibrate <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$<span class="br0">&#123;</span>XSETWACOM<span class="br0">&#125;</span></span> --display :<span class="nu0">0.0</span> <span class="kw3">set</span> stylus TopX $<span class="nu0">1</span> &gt;&gt; <span class="re0">$<span class="br0">&#123;</span>LOG<span class="br0">&#125;</span></span> <span class="nu0">2</span>&gt;&amp;<span class="nu0">1</span><br />
&nbsp; &nbsp; <span class="re0">$<span class="br0">&#123;</span>XSETWACOM<span class="br0">&#125;</span></span> --display :<span class="nu0">0.0</span> <span class="kw3">set</span> stylus TopY $<span class="nu0">2</span> &gt;&gt; <span class="re0">$<span class="br0">&#123;</span>LOG<span class="br0">&#125;</span></span> <span class="nu0">2</span>&gt;&amp;<span class="nu0">1</span><br />
&nbsp; &nbsp; <span class="re0">$<span class="br0">&#123;</span>XSETWACOM<span class="br0">&#125;</span></span> --display :<span class="nu0">0.0</span> <span class="kw3">set</span> stylus BottomX $<span class="nu0">3</span> &gt;&gt; <span class="re0">$<span class="br0">&#123;</span>LOG<span class="br0">&#125;</span></span> <span class="nu0">2</span>&gt;&amp;<span class="nu0">1</span><br />
&nbsp; &nbsp; <span class="re0">$<span class="br0">&#123;</span>XSETWACOM<span class="br0">&#125;</span></span> --display :<span class="nu0">0.0</span> <span class="kw3">set</span> stylus BottomY $<span class="nu0">4</span> &gt;&gt; <span class="re0">$<span class="br0">&#123;</span>LOG<span class="br0">&#125;</span></span> <span class="nu0">2</span>&gt;&amp;<span class="nu0">1</span><br />
<br />
&nbsp; &nbsp; <span class="re0">$<span class="br0">&#123;</span>XSETWACOM<span class="br0">&#125;</span></span> --display :<span class="nu0">0.0</span> <span class="kw3">set</span> eraser TopX $<span class="nu0">1</span> &gt;&gt; <span class="re0">$<span class="br0">&#123;</span>LOG<span class="br0">&#125;</span></span> <span class="nu0">2</span>&gt;&amp;<span class="nu0">1</span><br />
&nbsp; &nbsp; <span class="re0">$<span class="br0">&#123;</span>XSETWACOM<span class="br0">&#125;</span></span> --display :<span class="nu0">0.0</span> <span class="kw3">set</span> eraser TopY $<span class="nu0">2</span> &gt;&gt; <span class="re0">$<span class="br0">&#123;</span>LOG<span class="br0">&#125;</span></span> <span class="nu0">2</span>&gt;&amp;<span class="nu0">1</span><br />
&nbsp; &nbsp; <span class="re0">$<span class="br0">&#123;</span>XSETWACOM<span class="br0">&#125;</span></span> --display :<span class="nu0">0.0</span> <span class="kw3">set</span> eraser BottomX $<span class="nu0">3</span> &gt;&gt; <span class="re0">$<span class="br0">&#123;</span>LOG<span class="br0">&#125;</span></span> <span class="nu0">2</span>&gt;&amp;<span class="nu0">1</span><br />
&nbsp; &nbsp; <span class="re0">$<span class="br0">&#123;</span>XSETWACOM<span class="br0">&#125;</span></span> --display :<span class="nu0">0.0</span> <span class="kw3">set</span> eraser BottomY $<span class="nu0">4</span> &gt;&gt; <span class="re0">$<span class="br0">&#123;</span>LOG<span class="br0">&#125;</span></span> <span class="nu0">2</span>&gt;&amp;<span class="nu0">1</span><br />
<br />
&nbsp; &nbsp; <span class="re0">$<span class="br0">&#123;</span>XSETWACOM<span class="br0">&#125;</span></span> --display :<span class="nu0">0.0</span> <span class="kw3">set</span> cursor TopX $<span class="nu0">1</span> &gt;&gt; <span class="re0">$<span class="br0">&#123;</span>LOG<span class="br0">&#125;</span></span> <span class="nu0">2</span>&gt;&amp;<span class="nu0">1</span><br />
&nbsp; &nbsp; <span class="re0">$<span class="br0">&#123;</span>XSETWACOM<span class="br0">&#125;</span></span> --display :<span class="nu0">0.0</span> <span class="kw3">set</span> cursor TopY $<span class="nu0">2</span> &gt;&gt; <span class="re0">$<span class="br0">&#123;</span>LOG<span class="br0">&#125;</span></span> <span class="nu0">2</span>&gt;&amp;<span class="nu0">1</span><br />
&nbsp; &nbsp; <span class="re0">$<span class="br0">&#123;</span>XSETWACOM<span class="br0">&#125;</span></span> --display :<span class="nu0">0.0</span> <span class="kw3">set</span> cursor BottomX $<span class="nu0">3</span> &gt;&gt; <span class="re0">$<span class="br0">&#123;</span>LOG<span class="br0">&#125;</span></span> <span class="nu0">2</span>&gt;&amp;<span class="nu0">1</span><br />
&nbsp; &nbsp; <span class="re0">$<span class="br0">&#123;</span>XSETWACOM<span class="br0">&#125;</span></span> --display :<span class="nu0">0.0</span> <span class="kw3">set</span> cursor BottomY $<span class="nu0">4</span> &gt;&gt; <span class="re0">$<span class="br0">&#123;</span>LOG<span class="br0">&#125;</span></span> <span class="nu0">2</span>&gt;&amp;<span class="nu0">1</span><br />
<span class="br0">&#125;</span><br />
<br />
<br />
<span class="kw1">function</span> fixCalibration <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re3"># get the current orientation:</span><br />
&nbsp; &nbsp; <span class="re2">ORIENTATION=</span>`xrandr --verbose --query | grep <span class="st0">&quot; connected&quot;</span> | awk <span class="st0">'{print $5}'</span>`<br />
&nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Orientation: ${ORIENTATION}&quot;</span> &gt;&gt; <span class="re0">$<span class="br0">&#123;</span>LOG<span class="br0">&#125;</span></span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;${ORIENTATION}&quot;</span> <span class="kw1">in</span><br />
&nbsp; &nbsp; normal<span class="br0">&#41;</span><br />
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;calibrate <span class="nu0">-3</span> <span class="nu0">-173</span> <span class="nu0">24518</span> <span class="nu0">18478</span>&nbsp; &nbsp;<br />
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;;;<br />
&nbsp; &nbsp; left<span class="br0">&#41;</span><br />
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;calibrate <span class="nu0">-46</span> <span class="nu0">-3</span> <span class="nu0">18605</span> <span class="nu0">24518</span><br />
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;;;<br />
&nbsp; &nbsp; right<span class="br0">&#41;</span><br />
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;calibrate <span class="nu0">-173</span> <span class="nu0">58</span> <span class="nu0">18478</span> <span class="nu0">24579</span><br />
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;;;<br />
&nbsp; &nbsp; inverted<span class="br0">&#41;</span><br />
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;calibrate <span class="nu0">58</span> <span class="nu0">-46</span> <span class="nu0">24579</span> <span class="nu0">18605</span><br />
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;;;<br />
&nbsp; &nbsp; *<span class="br0">&#41;</span><br />
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;calibrate <span class="nu0">-3</span> <span class="nu0">-173</span> <span class="nu0">24518</span> <span class="nu0">18478</span><br />
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span class="kw3">echo</span> <span class="st0">&quot;ERROR!! unknown orientation! ${ORIENTATION}&quot;</span> &gt;&gt; <span class="re0">$<span class="br0">&#123;</span>LOG<span class="br0">&#125;</span></span><br />
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;;;<br />
&nbsp; &nbsp; <span class="kw1">esac</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="kw1">case</span> <span class="st0">&quot;$1&quot;</span> <span class="kw1">in</span><br />
&nbsp; &nbsp; resume|thaw<span class="br0">&#41;</span><br />
&nbsp; &nbsp; date &gt;&gt; <span class="re0">$<span class="br0">&#123;</span>LOG<span class="br0">&#125;</span></span><br />
&nbsp; &nbsp; fixCalibration <br />
&nbsp; &nbsp; whoami &gt;&gt; <span class="re0">$<span class="br0">&#123;</span>LOG<span class="br0">&#125;</span></span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; ;;<br />
&nbsp; &nbsp; *<span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;not a resum|thaw event: $1&quot;</span> &gt;&gt; <span class="re0">$<span class="br0">&#123;</span>LOG<span class="br0">&#125;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; ;;<br />
<span class="kw1">esac</span></div></div>

<p>Stick that in <code>/etc/pm/sleep.d/40wacomCalibrate</code> (or some similarly named file), make it executable by all (<code>chmod a+x /etc/pm/sleep.d/40wacomCalibrate</code>) and it should be run when the system resumes.</p>

<p><strong>Update:</strong> I found that the logging of the old script didn&#8217;t work, so I&#8217;ve updated the script to reflect that.  There were also some problems with how I was testing the first script, and the actions I was taking didn&#8217;t actually trigger the bug.  (The bug seems to be quite state-dependent, and markovian assumption was wrong.)  To get this to work, root will need to have access to the display that xsetwacom uses.  The simplest way to do this is to add <code>xhost +</code> to you x startup.  (I put it in my ~/.xsession just before <code>exec enlightenment-start</code>).
</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ciscavate.org/2009/01/the-linux-tablet-wacom-rotations-waking-up-on-the-wrong-side.html/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>The Linux Tablet: Wacom drivers</title>
		<link>http://blog.ciscavate.org/2009/01/the-linux-tablet-wacom-drivers.html</link>
		<comments>http://blog.ciscavate.org/2009/01/the-linux-tablet-wacom-drivers.html#comments</comments>
		<pubDate>Sun, 11 Jan 2009 23:06:28 +0000</pubDate>
		<dc:creator>rcreswick</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[x61]]></category>

		<guid isPermaLink="false">http://blog.ciscavate.org/?p=56</guid>
		<description><![CDATA[Ubuntu 8.10 configured most everything properly, as mentioned in the previous post in this series, but it did not result in a functional pen.

The tablet screen is a wacom digitizer with a pen that has two buttons (eraser and a finger button), and the tablet can differentiate between touching and hovering.  The linux wacom [...]]]></description>
			<content:encoded><![CDATA[<p>Ubuntu 8.10 configured most everything properly, as mentioned in the <a href="http://blog.ciscavate.org/2009/01/the-path-to-a-linux-tablet.html">previous post</a> in this series, but it did not result in a functional pen.</p>

<p>The tablet screen is a wacom digitizer with a pen that has two buttons (eraser and a finger button), and the tablet can differentiate between touching and hovering.  The linux wacom driver &amp; tools are necessary to get this all working.  While I didn&#8217;t find a single page with instructions that worked flawlessly, I was able to figure it out from a collection of links:</p>

<ul>
<li>The Linux Wacom project: 

<ul>
<li><a href="http://linuxwacom.sourceforge.net/index.php/minihowto">http://linuxwacom.sourceforge.net/index.php/minihowto</a></li>
<li><a href="http://linuxwacom.sourceforge.net/index.php/howto/x11">http://linuxwacom.sourceforge.net/index.php/howto/x11</a></li>
</ul></li>
<li>The Aliencam blog:

<ul>
<li><a href="http://blog.aliencam.net/articles/aliencams-customized-ubuntu-setup-guide/">http://blog.aliencam.net/articles/aliencams-customized-ubuntu-setup-guide/</a></li>
</ul></li>
</ul>

<p>First off, you will need the latest version of the linux Wacom driver (8.2.1 at the time of this writing).  The driver versions seem to be tied to your kernel versions, so this is quite important.  The wacom-tools package that comes with Ubuntu is not sufficient (in fact, you&#8217;ll want to uninstall it if you have it already).</p>

<p>Once you have the wacom package downloaded, follow the directions for installing it in the howto (linked above).  The wacom package uses a typical configure, make, make install process but there are a few kinks:</p>

<ul>
<li>configure (almost?) always succeeds, regardless of the dependencies you have yet to fill.  The make step will simply not build all the things you need if this happens, but it won&#8217;t fail visibly.</li>
<li>You&#8217;ll need to copy the kernel module into the /lib/modules/<code>uname -r</code>/kernel/drivers/usb/input/ directory manually (creating subdirs if necessary), <em>before</em> running make install.  (This is outlined in the mini-howto.)</li>
</ul>

<p>Once wacom is installed, you can begin working with the X.org configuration.  This is fairly clearly explained at the aliencam blog linked above, or you can use my xorg.conf here.</p>

<div class="codecolorer-container bash" style="height:280px;"><div class="codecolorer" style="font-family: monospace;">Section <span class="st0">&quot;Device&quot;</span><br />
&nbsp; &nbsp; Identifier&nbsp; <span class="st0">&quot;Configured Video Device&quot;</span><br />
EndSection<br />
<br />
Section <span class="st0">&quot;Monitor&quot;</span><br />
&nbsp; &nbsp; Identifier&nbsp; <span class="st0">&quot;Configured Monitor&quot;</span><br />
EndSection<br />
<br />
Section <span class="st0">&quot;Screen&quot;</span><br />
&nbsp; &nbsp; Identifier&nbsp; <span class="st0">&quot;Default Screen&quot;</span><br />
&nbsp; &nbsp; Monitor&nbsp;&nbsp;<span class="st0">&quot;Configured Monitor&quot;</span><br />
&nbsp; &nbsp; Device&nbsp; &nbsp; <span class="st0">&quot;Configured Video Device&quot;</span><br />
EndSection<br />
<br />
<br />
<span class="re3">#BEGIN TABLET SECTION</span><br />
Section <span class="st0">&quot;InputDevice&quot;</span><br />
&nbsp; &nbsp; Driver&nbsp; &nbsp; <span class="st0">&quot;wacom&quot;</span><br />
&nbsp; &nbsp; Identifier&nbsp; <span class="st0">&quot;stylus&quot;</span><br />
&nbsp; &nbsp; Option&nbsp; &nbsp; <span class="st0">&quot;Device&quot;</span>&nbsp; <span class="st0">&quot;/dev/ttyS0&quot;</span>&nbsp; <span class="re3"># serial ONLY</span><br />
&nbsp; &nbsp; Option&nbsp; &nbsp; <span class="st0">&quot;Type&quot;</span>&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;stylus&quot;</span><br />
&nbsp; &nbsp; Option&nbsp; &nbsp; <span class="st0">&quot;ForceDevice&quot;</span>&nbsp;<span class="st0">&quot;ISDV4&quot;</span>&nbsp; &nbsp; <span class="re3"># Tablet PC ONLY</span><br />
&nbsp; &nbsp; Option&nbsp; &nbsp; <span class="st0">&quot;Button2&quot;</span>&nbsp;<span class="st0">&quot;3&quot;</span><br />
EndSection<br />
<br />
Section <span class="st0">&quot;InputDevice&quot;</span><br />
&nbsp; &nbsp; Driver&nbsp; &nbsp; <span class="st0">&quot;wacom&quot;</span><br />
&nbsp; &nbsp; Identifier&nbsp; <span class="st0">&quot;eraser&quot;</span><br />
&nbsp; &nbsp; Option&nbsp; &nbsp; <span class="st0">&quot;Device&quot;</span>&nbsp; <span class="st0">&quot;/dev/ttyS0&quot;</span>&nbsp; &nbsp;<span class="re3"># serial ONLY</span><br />
&nbsp; &nbsp; Option&nbsp; &nbsp; <span class="st0">&quot;Type&quot;</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;eraser&quot;</span><br />
&nbsp; &nbsp; Option&nbsp; &nbsp; <span class="st0">&quot;ForceDevice&quot;</span>&nbsp; &nbsp;<span class="st0">&quot;ISDV4&quot;</span>&nbsp; &nbsp;&nbsp; &nbsp;<span class="re3"># Tablet PC ONLY</span><br />
&nbsp; &nbsp; Option&nbsp; &nbsp; <span class="st0">&quot;Button3&quot;</span>&nbsp;<span class="st0">&quot;2&quot;</span><br />
EndSection<br />
<br />
Section <span class="st0">&quot;InputDevice&quot;</span><br />
&nbsp; &nbsp; Driver&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;wacom&quot;</span><br />
&nbsp; &nbsp; Identifier&nbsp; &nbsp; <span class="st0">&quot;cursor&quot;</span><br />
&nbsp; &nbsp; Option&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;Device&quot;</span>&nbsp; &nbsp; <span class="st0">&quot;/dev/ttyS0&quot;</span>&nbsp; <span class="re3"># serial ONLY</span><br />
&nbsp; &nbsp; Option&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;Type&quot;</span>&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;cursor&quot;</span><br />
&nbsp; &nbsp; Option&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;ForceDevice&quot;</span>&nbsp;<span class="st0">&quot;ISDV4&quot;</span>&nbsp; &nbsp; <span class="re3"># Tablet PC ONLY</span><br />
<span class="re3">#&nbsp; &nbsp;Option&nbsp;&nbsp; &nbsp; &nbsp; </span><span class="st0">&quot;Mode&quot;</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;Absolute&quot;</span><br />
EndSection<br />
<br />
<span class="re3"># This section is <span class="kw1">for</span> the TabletPC that supports touch</span><br />
<span class="re3">#Section </span><span class="st0">&quot;InputDevice&quot;</span><br />
<span class="re3">#&nbsp; Driver&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="st0">&quot;wacom&quot;</span><br />
<span class="re3">#&nbsp; Identifier&nbsp; &nbsp; </span><span class="st0">&quot;touch&quot;</span><br />
<span class="re3">#&nbsp; Option&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="st0">&quot;Device&quot;</span>&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;/dev/input/wacom&quot;</span>&nbsp; <span class="re3"># USB ONLY</span><br />
<span class="re3">#&nbsp; Option&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="st0">&quot;Type&quot;</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;touch&quot;</span><br />
<span class="re3">#&nbsp; Option&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="st0">&quot;ForceDevice&quot;</span>&nbsp; &nbsp;<span class="st0">&quot;ISDV4&quot;</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re3"># Tablet PC ONLY</span><br />
<span class="re3">#&nbsp; Option&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="st0">&quot;USB&quot;</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;on&quot;</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re3"># USB ONLY</span><br />
<span class="re3">#EndSection</span><br />
<span class="re3">#END TABLET SECTION</span><br />
<br />
Section <span class="st0">&quot;ServerLayout&quot;</span><br />
&nbsp; &nbsp; Identifier&nbsp; <span class="st0">&quot;Default Layout&quot;</span><br />
&nbsp; &nbsp; Screen&nbsp; &nbsp; <span class="st0">&quot;Default Screen&quot;</span><br />
<span class="re3">#&nbsp; &nbsp;InputDevice&nbsp; &nbsp; </span><span class="st0">&quot;Synaptics Touchpad&quot;</span><br />
<br />
<span class="re3">#added to get tablet working</span><br />
&nbsp; &nbsp; InputDevice&nbsp; &nbsp; &nbsp;<span class="st0">&quot;stylus&quot;</span>&nbsp; &nbsp; <span class="st0">&quot;SendCoreEvents&quot;</span><br />
&nbsp; &nbsp; InputDevice&nbsp; &nbsp; &nbsp;<span class="st0">&quot;cursor&quot;</span>&nbsp; &nbsp; <span class="st0">&quot;SendCoreEvents&quot;</span><br />
&nbsp; &nbsp; InputDevice&nbsp; &nbsp; &nbsp;<span class="st0">&quot;eraser&quot;</span>&nbsp; &nbsp; <span class="st0">&quot;SendCoreEvents&quot;</span><br />
<span class="re3">#&nbsp; &nbsp;InputDevice&nbsp; &nbsp; </span><span class="st0">&quot;touch&quot;</span>&nbsp;&nbsp;<span class="st0">&quot;SendCoreEvents&quot;</span><br />
EndSection</div></div>

<p>After doing that, you should be able to reboot and the pen should be working.  You can do things like configure the buttons with <code>xsetwacom</code> (and you&#8217;ll need that when it comes time to rotate the screen), but I kept getting this error when I tried to run <code>xsetwacom</code>:</p>

<div class="codecolorer-container bash"><div class="codecolorer" style="font-family: monospace;">$ xsetwacom <br />
xsetwacom: error <span class="kw1">while</span> loading shared libraries: libwacomcfg.so<span class="nu0">.0</span>: cannot open shared object file: no such file or directory.</div></div>

<p>I made a lucky guess, and fixed the problem with a quick ldconfig:</p>

<div class="codecolorer-container bash" style="height:35px;"><div class="codecolorer" style="font-family: monospace;">$ sudo ldconfig&nbsp; <span class="re3"># that was a lucky guess.</span></div></div>

<p><em>Update:</em> There were some issues with the wacom calibration after a sleep/resume cycle <em>if</em> the laptop screen had been rotated during that prior wake cycle (this happens a <em>lot</em> more than it seems, given how complex that description is.)  I&#8217;ve written up a workaround <a href="http://blog.ciscavate.org/2009/01/the-linux-tablet-wacom-rotations-waking-up-on-the-wrong-side.html">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ciscavate.org/2009/01/the-linux-tablet-wacom-drivers.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The path to a Linux Tablet</title>
		<link>http://blog.ciscavate.org/2009/01/the-path-to-a-linux-tablet.html</link>
		<comments>http://blog.ciscavate.org/2009/01/the-path-to-a-linux-tablet.html#comments</comments>
		<pubDate>Fri, 09 Jan 2009 23:04:17 +0000</pubDate>
		<dc:creator>rcreswick</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[x61]]></category>

		<guid isPermaLink="false">http://blog.ciscavate.org/?p=53</guid>
		<description><![CDATA[I finally broke down and bought a Lenovo X61 tablet (with SXGA+ screen!), and it arrived this week.  This is the first of a series of posts about getting it up and running with Linux.

First off, some specs:


Lenovo X61 Tablet PC with XSGA+ (1400&#215;1050) screen (not multi-touch)
4 gigs of ram
200gb SATA hard disk
WIFI (Intel [...]]]></description>
			<content:encoded><![CDATA[<p>I finally broke down and bought a Lenovo X61 tablet (with SXGA+ screen!), and it arrived this week.  This is the first of a series of posts about getting it up and running with Linux.</p>

<p>First off, some specs:</p>

<ul>
<li>Lenovo X61 Tablet PC with XSGA+ (1400&#215;1050) screen (not multi-touch)</li>
<li>4 gigs of ram</li>
<li>200gb SATA hard disk</li>
<li>WIFI (Intel PRO/Wireless 4965 AG or AGN)</li>
<li>Gigabit Ethernet (Intel 82566MM)</li>
<li>Bluetooth </li>
<li>Wide-area networking card (3G)</li>
<li>Fingerprint reader</li>
<li>Integrated SD card reader (Richoh R5C822 SD/SDIO/MMC/MS/MSPro)</li>
<li>Intel Audio (82801H ICH8 Family audio controller)</li>
<li>1 PCMCIA (type-I?) slot</li>
<li>4-cell battery</li>
<li>Ultrabay Slim (which will be holding my Ultrabay CD-RW / DVD drive from my old T42p)</li>
<li>Intel Mobile GM965/GL960 video controller. (256mb video ram?)</li>
</ul>

<p>I&#8217;ll flesh that list out more as I can find the details (eg: wireless chipset, video, etc..)</p>

<p>First off, I blew some time poking around in Vista of course :).  The handwriting input app is phenomenal in a lot of ways.  It works very well, training is well integrated, and it has worked with every input area I&#8217;ve tried.  It <em>could</em> be better if it had contextual clues, and could tie into things like Eclipse&#8217;s intellisense.  Overall, though, it is amazing how simple it is to use, and how aesthetically pleasing the handwriting actually is.  There is a lot to be said for using a couple extra pixels to make the strokes taper off as you pull the pen away.  It has QWAN.</p>

<p>That done, I started to move on to installing Linux.  I&#8217;m giving Ubuntu 8.10 the first chance, and I thought I&#8217;d try using a USB-based install so I wouldn&#8217;t have to monkey around with the Ultrabase &amp; drive.  If you have an 8.10 system already, you can easily create a bootable usb ubuntu drive with <code>usb-creator</code> and an ubuntu iso.  This takes perhaps 45min &#8211; 1 hour.</p>

<p>Booting was as simple as going into the ibm bios-like page (by hitting the ThinkVantage button on boot) and telling it to boot from another device, then selecting the usb drive (that I had already inserted).  I split the existing 200gb partition in two with the ubuntu installer, keeping Vista in it&#8217;s 100 gig sandbox, and leaving the remaining ~100 gigs for Ubuntu to partition further (which it did, as two partitions: one for / and one for swap.  /dev/sda5 and /dev/sda6).</p>

<p>I do wish it had said how much space was being allocated to each of those partitions though.  The installer didn&#8217;t give any indication.</p>

<p>Installation from booting the installer from usb to booting into the installed system took right about 30min.  I&#8217;m impressed :)</p>

<p>Out of the box:</p>

<ul>
<li>The screen is the proper res</li>
<li>Wireless looks like it might be working (I have to AP to verify)</li>
<li>Sound works</li>
<li>the pen does <em>not</em></li>
<li>Screen rotation does not work</li>
<li>closing the lid shuts off the screen, but does not put the laptop to sleep.

<ul>
<li>This was easily fixed in the gnome power-management settings, and hey, it resumes too!</li>
</ul></li>
<li>putting the laptop in tablet mode seems to have no effect (at least it doesn&#8217;t shut off the screen ;)</li>
<li>Some power management is clearly working (screen dims when unplugged)</li>
<li>bluetooth was detected, but I have to way to test it.</li>
<li>Dual-booting seems to work just fine, although there are two entries for Vista in the grub menu, and the first boots into the Rescue and Recovery system.  Vista also had to do a chkdsk, and reboot before it would load.</li>
</ul>

<p>More information as I figure it out :)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ciscavate.org/2009/01/the-path-to-a-linux-tablet.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
