Thread: [DIGImend-users] Bizarre Tablet Issues Return
Brought to you by:
spb_nick
From: Zauber P. <za...@gr...> - 2012-10-11 01:51:18
|
Okay, long story short, I previously had a problem with my tablet's cursor "jumping" all over the place: http://sourceforge.net/mailarchive/message.php?msg_id=29074286 The solution was to either update to a later version of xorg or to apply a patch. Because Arch Linux's system for building packages is fairly intuitive to use, I was able to build and install an xorg-server package with the patches applied, and was then able to transparently upgrade to the fixed version of xorg during a routine system upgrade. However, since then Arch Linux has proven to be far too experimental for my tastes, especially with the large number of invasive changes for the core system and startup routines, which left me afraid that I would eventually install package updates and then be unable to boot my OS afterwords. The final straw was an upgrade to FontConfig, which caused a critical program to crash immediately upon execution. So, I switched to Lubuntu. For a while I didn't use my tablet, but now that I have started using it again, I'm finding that the bug with the cursor jumping has returned because Ubuntu is using an earlier xorg without the fix. So, my question is this: Is there an easy way to do one of the following: 1) Compile and install a patched version of xorg through the normal package-management system 2) Install a package for an upstream version of xorg And if there is no easy solution to the above, does anyone have a patched xorg package for x86_64 Precise Pangolin? |
From: Favux ... <fav...@gm...> - 2012-10-11 02:34:46
|
No one has made a PPA of the X Server with the fix yet that I'm aware of. I really am not too interested in messing with it myself. What you would need to do is download the latest Precise X Server core deb package for your architecture and open it up. Add the patch, presumably to Debian patches, rename the package, zip it up and apply it. There are Ubuntu wiki pages that describe how to do that. I've been told that the X Server 1.13 in Quantal, which has the CTM fix, works with a static monitor setup. However there apparently is still a valuator bug affecting CTM if you rotate one of the monitors. If so it appears the fix was only a partial fix. Favux |
From: Favux ... <fav...@gm...> - 2012-10-11 04:13:50
|
On Wed, Oct 10, 2012 at 10:46 PM, Zauber Paracelsus <za...@gr...> wrote: > I attempted to follow your instructions and the ones on the wiki to build the package, and it fails to apply the patch. I get the following error: > > > Applying patch transform_fix.patch > patching file dix/getevents.c > Hunk #1 FAILED at 1078. > 1 out of 1 hunk FAILED -- rejects in file dix/getevents.c > Patch transform_fix.patch does not apply (enforce with -f) > make: *** [stampdir/patch] Error 1 > dpkg-buildpackage: error: debian/rules build gave error exit status 2 > debuild: fatal error at line 1350: > dpkg-buildpackage -rfakeroot -D -us -uc failed Wow. Color me impressed. You are much faster at that than I would have been. I'll console myself by thinking some of your Arch package skills were transferable. Which patch did you use? The one for the current xserver-core on the bug report or the backport by Nick? It looks like the package was happy with the addition of the patch and some adjustment there isn't what's needed. So you'd need to figure out why the patch isn't applying; it doesn't seem to be an offset issue. Hence the question about which patch. The X Server in Precise is a hybrid X Server by Debian/Ubuntu and consists of 1.11 and parts of 1.12. That might be the problem. So the easiest thing would be to try both patches. Otherwise you'd need to review the source code to find out why it is failing. I don't know if using the force switch, -f, it mentions to apply the patch is a good idea. Favux |
From: Favux ... <fav...@gm...> - 2012-10-11 17:37:49
|
On Thu, Oct 11, 2012 at 12:36 PM, Favux ... <fav...@gm...> wrote: > On Thu, Oct 11, 2012 at 11:25 AM, Zauber Paracelsus <za...@gr...> wrote: >> On Wed, 10 Oct 2012 23:13:43 -0500 >> "Favux ..." <fav...@gm...> wrote: >> >> I had been using this patch: >> http://sourceforge.net/mailarchive/attachment.php?list_name=digimend-users&message_id=4FB25214.7050103%40gmail.com&counter=1 >> >> That is one that Nikolai had attached to an email in the original thread. It was a backport of the fix to version 1.11.4 of Xorg, the same version Ubuntu Precise currently uses. >> >> My guess is that it might be patch ordering. Under the debian/patches folder is a file named "series" which has these two comments at the top: >> >> ## Patches with a number < 100 are applied in debian. >> ## Ubuntu patches start with 100. >> >> So, I tried placing it in various different orderings, though still no luck. Might not be patch ordering. >> > > I don't think it is ordering. I downloaded the source code i.e. > xorg-server-1.11.4: > apt-get source xserver-xorg-core > And then applied the patch to getevents.c and got the same error: > patching file xorg-server-1.11.4/dix/getevents.c > Hunk #1 FAILED at 1078. > 1 out of 1 hunk FAILED -- saving rejects to file > xorg-server-1.11.4/dix/getevents.c.rej > > Looking at the source code in getevents.c it looks like things have > changed quite a bit. For one thing we seem to be at line 1136 instead > of around line 1078 in the patch. But I don't think it is the offset. > It looks to be the function I think we're trying to patch has changed > a bit: > /** > * Apply the device's transformation matrix to the valuator mask and replace > * the scaled values in mask. This transformation only applies to valuators > * 0 and 1, others will be untouched. > * > * @param dev The device the valuators came from > * @param[in,out] mask The valuator mask. > */ > static void > transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask) > { > double x, y, ox, oy; > > if (valuator_mask_isset(mask, 0)) > ox = x = valuator_mask_get_double(mask, 0); > else > ox = x = dev->last.valuators[0]; > > if (valuator_mask_isset(mask, 1)) > oy = y = valuator_mask_get_double(mask, 1); > else > oy = y = dev->last.valuators[1]; > > transform(&dev->transform, &x, &y); > > if (valuator_mask_isset(mask, 0) || ox != x) > valuator_mask_set_double(mask, 0, x); > > if (valuator_mask_isset(mask, 1) || oy != y) > valuator_mask_set_double(mask, 1, y); > } > > So that's what needs to be addressed. > > Favux Oops, forgot to send to DIGImend-users too. |
From: Favux ... <fav...@gm...> - 2012-10-11 17:50:10
|
Nick's patch was on 5-15-12 and the Ubuntu xserver-xorg-core (2:1.11.4-0ubuntu10.6) ChangeLog shows the last entry as 7-16-12. But I don't see a patch that obviously affects getevents.c. |
From: Favux ... <fav...@gm...> - 2012-10-11 18:39:08
|
On Thu, Oct 11, 2012 at 1:12 PM, Zauber Paracelsus <za...@gr...> wrote: > On Thu, 11 Oct 2012 12:50:01 -0500 > "Favux ..." <fav...@gm...> wrote: > >> Nick's patch was on 5-15-12 and the Ubuntu xserver-xorg-core >> (2:1.11.4-0ubuntu10.6) ChangeLog shows the last entry as 7-16-12. But >> I don't see a patch that obviously affects getevents.c. > > Weird. Alright, I just patched the getevents.c source code successfully with Peter's 0001-dix-undo-transformation-for-missing-valuators-49347.patch. Try that patch instead. Everything seems correct with it. Favux |
From: Favux ... <fav...@gm...> - 2012-10-11 18:48:44
|
Sorry, should have shown details: $ patch -p2 < 0001-dix-undo-transformation-for-missing-valuators-49347.patch patching file getevents.c Hunk #1 succeeded at 1146 (offset -21 lines). And now the function looks like (other than the indents): /** * Apply the device's transformation matrix to the valuator mask and replace * the scaled values in mask. This transformation only applies to valuators * 0 and 1, others will be untouched. * * @param dev The device the valuators came from * @param[in,out] mask The valuator mask. */ static void transformAbsolute(DeviceIntPtr dev, ValuatorMask *mask) { double x, y, ox, oy; if (!valuator_mask_isset(mask, 0) || !valuator_mask_isset(mask, 1)) { struct pixman_f_transform invert; /* undo transformation from last event */ ox = dev->last.valuators[0]; oy = dev->last.valuators[1]; pixman_f_transform_invert(&invert, &dev->transform); transform(&invert, &ox, &oy); x = ox; y = oy; } if (valuator_mask_isset(mask, 0)) ox = x = valuator_mask_get_double(mask, 0); if (valuator_mask_isset(mask, 1)) oy = y = valuator_mask_get_double(mask, 1); transform(&dev->transform, &x, &y); if (valuator_mask_isset(mask, 0) || ox != x) valuator_mask_set_double(mask, 0, x); if (valuator_mask_isset(mask, 1) || oy != y) valuator_mask_set_double(mask, 1, y); } |