A GUI for RandR

<meta content="OpenOffice.org 2.2 (Linux)" name="GENERATOR" /><meta content="Alberto Milone" name="AUTHOR" /><meta content="20070604;22164000" name="CREATED" /><meta content="Alberto Milone" name="CHANGEDBY" /><meta content="20070605;190000" name="CHANGED" /> </p> <p style="margin-bottom: 0cm;" class="western">I have been working at nights on a new project of mine. I have always thought that Keith Packards’ RandR was an excellent tool and I wanted to make xrandr (its textual interface) more userfriendly. I am aware that another chap is working on a UI written in C, however I thought I would contribute with my Python application.</p> <p style="margin-bottom: 0cm;" class="western">RandrGUI (its provisional name) is a GTK interface to xrandr. I did not create Python bindings for RandR (since I can’t code in C, <strong>yet</strong><span style="">) but an application which captures the output of xrandr and uses it to apply the settings that users choose.</span></p> <p style="margin-bottom: 0cm;" class="western">I installed Debian Sid, since it uses xserver-xorg 1.3, randr 1.2 and the intel driver 2.0, and started developing my application. I wrote the interface using glade (so that I don’t have to change the code if I want to make the UI look different.</p> <p style="margin-bottom: 0cm;" class="western"><span style="">I have almost finished writing </span><strong>version 0.1 which will enable you to</strong><span style="">:</span></p> <ul> <li> <p style="margin-bottom: 0cm;" class="western"> clone your screen on an external screen or TV</p> </li> <li> <p style="margin-bottom: 0cm;" class="western"> rotate your screen(s)</p> </li> <li> <p style="margin-bottom: 0cm;" class="western"> change your screen(s) resolution</p> </li> </ul> <p style="margin-bottom: 0cm;" class="western">You will be able to do all this without touching your xorg.conf, only a few mouse clicks are required.</p> <p style="margin-bottom: 0cm;" class="western"> </p> <p style="margin-bottom: 0cm;" class="western"><strong>What are the requirements?</strong></p> <ul> <li> <p style="margin-bottom: 0cm;" class="western"> xserver-xorg 1.3</p> </li> <li> <p style="margin-bottom: 0cm;" class="western"> randr 1.2</p> </li> <li> <p style="margin-bottom: 0cm;" class="western"> the intel driver 2.0 (or the ATI open source driver from GIT code) </p> </li> <li> <p style="margin-bottom: 0cm;" class="western"> A GNU/Linux distribution which uses the first three elements in this list.</p> </li> </ul> <p style="margin-bottom: 0cm;" class="western">This means that you will not be able to use it on Feisty. Maybe on Gutsy.</p> <p style="margin-bottom: 0cm;" class="western"> </p> <p style="margin-bottom: 0cm;" class="western"><strong>Does it work flawlessly?</strong></p> <p style="margin-bottom: 0cm;" class="western">No,not yet. At least not with the version of randr available on Debian unstable. However it works quite well here.</p> <p style="margin-bottom: 0cm;" class="western"> </p> <p style="margin-bottom: 0cm;" class="western"><strong>Known Issues</strong></p> <ul> <li> <p style="margin-bottom: 0cm;" class="western"> There is no way to select PAL/NTSC for your CRT TV therefore my TV works at 30Hz and the video is black and white * </p> </li> <li> <p style="margin-bottom: 0cm;" class="western"> I do not know how Randrgui will work with HD TVs * </p> </li> <li> <p style="margin-bottom: 0cm;" class="western"><span style="">Sometimes you have to change the resolution of your 2</span><sup><span style="">nd</span></sup><span style=""> screen in order to get the right resolution on your first screen (this means that more clicks are required).</span></p> </li> <li> <p style="margin-bottom: 0cm;" class="western"> If I use a DVI2VGA adapter 1 extra TMDS-1 device spawns up (I’ll have to ask some Xorg hackers about this)</p> </li> </ul> <p style="margin-bottom: 0cm;" class="western"><strong> * As far as I know,the first 2 problems are solved in Randr GIT code </strong><span style="">therefore I will have to play with the experimental code and adapt randrgui.</span></p> <p style="margin-bottom: 0cm;" class="western"> </p> <p style="margin-bottom: 0cm;" class="western"><strong>TODO</strong></p> <ul> <li> <p style="margin-bottom: 0cm;" class="western"> Write a logger (for version 0.1 ?)</p> </li> <li> <p style="margin-bottom: 0cm;" class="western"> Give the option to use each screen separately (instead of just cloning your main screen on the other screens)</p> </li> <li> <p style="margin-bottom: 0cm;" class="western"> Adapt Randrgui to Randr’s GIT code</p> </li> <li> <p style="margin-bottom: 0cm;" class="western"> Find a better name for Randrgui</p> </li> <li> <p style="margin-bottom: 0cm;" class="western"> make a deb package</p> </li> </ul> <p><strong><br /> </strong></p> <p><strong>Release date</strong> </p> <p>I hope to release it soon. I am studying all day for my English and Spanish exams therefore I can code only at nights. </p> <p style="margin-bottom: 0cm;" class="western"> </p> <p style="margin-bottom: 0cm;" class="western"><strong>Screenshots</strong></p> <p style="margin-bottom: 0cm;" class="western">I know this screenshot does not show how RandrGUI works therefore I promise that I will post more screenshots soon.</p> <p><img decoding="async" src="http://albertomilone.com/images/randrgui1.jpg" alt="randrgui in action" /></p> <p style="text-align: right; font-size: 8px">Blogged with <a href="http://www.flock.com/blogged-with-flock" title="Flock" target="_new">Flock</a></p> </div> <footer class="entry-footer"> <div class="entry-meta"> <p class="tags"></p> <p class="categories">Categorized in: <a href="https://albertomilone.com/blog/?cat=13" rel="category">Debian</a>, <a href="https://albertomilone.com/blog/?cat=9" rel="category">Ubuntu</a></p> <p class="date"><span class="posted-on"><a href="https://albertomilone.com/blog/?p=93" rel="bookmark"><i class="icon-calendar"></i><time class="entry-date published updated" datetime="2007-06-05T15:27:26+00:00">June 5, 2007</time></a></span><span class="byline"> <span class="author vcard"><a class="url fn n" href="https://albertomilone.com/blog/?author=1"><i class="icon-user"></i>albertomilone@gmail.com</a></span></span><span clas="post-comments"><a href="https://albertomilone.com/blog/?p=93#comments"><i class="icon-comment"></i>16 Comments</a></span></p> </div> </footer><!-- .entry-footer --> </article><!-- #post-93 --> <nav class="navigation post-navigation" aria-label="Posts"> <h2 class="screen-reader-text">Post navigation</h2> <div class="nav-links"><div class="nav-previous"><a href="https://albertomilone.com/blog/?p=91" rel="prev">Another bugfix release of Envy</a></div><div class="nav-next"><a href="https://albertomilone.com/blog/?p=94" rel="next">Envy 0.9.5-0ubuntu1 STABLE is now available</a></div></div> </nav> <div id="comments" class="comments-area"> <h2 class="comments-title"> 16 thoughts on “<span>A GUI for RandR</span>” </h2> <ol class="comment-list"> <li id="comment-723" class="comment even thread-even depth-1"> <article id="div-comment-723" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='https://secure.gravatar.com/avatar/aa438b63ff1e9b75693aeabbeddae5eb?s=64&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/aa438b63ff1e9b75693aeabbeddae5eb?s=128&d=mm&r=g 2x' class='avatar avatar-64 photo' height='64' width='64' loading='lazy' decoding='async'/> <b class="fn"><a href="http://arvindn.livejournal.com" class="url" rel="ugc external nofollow">randomwalker</a></b> <span class="says">says:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="https://albertomilone.com/blog/?p=93#comment-723"><time datetime="2007-06-05T16:57:29+00:00">June 5, 2007 at 4:57 pm</time></a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>I think you should call it gRandR, pronounced ‘grander’.</p> </div><!-- .comment-content --> <div class="reply"><a rel="nofollow" class="comment-reply-link" href="https://albertomilone.com/blog/?p=93&replytocom=723#respond" data-commentid="723" data-postid="93" data-belowelement="div-comment-723" data-respondelement="respond" data-replyto="Reply to randomwalker" aria-label="Reply to randomwalker">Reply</a></div> </article><!-- .comment-body --> </li><!-- #comment-## --> <li id="comment-724" class="comment odd alt thread-odd thread-alt depth-1"> <article id="div-comment-724" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='https://secure.gravatar.com/avatar/0e15b9fca74e7d4acef145122d9ff6e4?s=64&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/0e15b9fca74e7d4acef145122d9ff6e4?s=128&d=mm&r=g 2x' class='avatar avatar-64 photo' height='64' width='64' loading='lazy' decoding='async'/> <b class="fn">Martijn</b> <span class="says">says:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="https://albertomilone.com/blog/?p=93#comment-724"><time datetime="2007-06-05T17:38:43+00:00">June 5, 2007 at 5:38 pm</time></a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>Is this related to the DisplayConfigGTK spec? <a href="https://wiki.ubuntu.com/DisplayConfigGTK" rel="nofollow ugc">https://wiki.ubuntu.com/DisplayConfigGTK</a></p> <p>You might want to team up with those people, instead of duplicating effort.</p> </div><!-- .comment-content --> <div class="reply"><a rel="nofollow" class="comment-reply-link" href="https://albertomilone.com/blog/?p=93&replytocom=724#respond" data-commentid="724" data-postid="93" data-belowelement="div-comment-724" data-respondelement="respond" data-replyto="Reply to Martijn" aria-label="Reply to Martijn">Reply</a></div> </article><!-- .comment-body --> </li><!-- #comment-## --> <li id="comment-725" class="comment even thread-even depth-1"> <article id="div-comment-725" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='https://secure.gravatar.com/avatar/6f4795b7379a474b071f1d8361aff485?s=64&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/6f4795b7379a474b071f1d8361aff485?s=128&d=mm&r=g 2x' class='avatar avatar-64 photo' height='64' width='64' loading='lazy' decoding='async'/> <b class="fn"><a href="https://blueprints.launchpad.net/ubuntu/spec/simple-x-mode-selection" class="url" rel="ugc external nofollow">Fabian Rodriguez</a></b> <span class="says">says:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="https://albertomilone.com/blog/?p=93#comment-725"><time datetime="2007-06-05T17:48:22+00:00">June 5, 2007 at 5:48 pm</time></a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>Have you followed this spec:<br /> <a href="https://blueprints.launchpad.net/ubuntu/" rel="nofollow ugc">https://blueprints.launchpad.net/ubuntu/</a> spec/simple-x-mode-selection</p> <p>?</p> <p>There’s ongoing work to have this and other problems in X solved by next Ubuntu release. I’d hate to see duplicate work!</p> </div><!-- .comment-content --> <div class="reply"><a rel="nofollow" class="comment-reply-link" href="https://albertomilone.com/blog/?p=93&replytocom=725#respond" data-commentid="725" data-postid="93" data-belowelement="div-comment-725" data-respondelement="respond" data-replyto="Reply to Fabian Rodriguez" aria-label="Reply to Fabian Rodriguez">Reply</a></div> </article><!-- .comment-body --> </li><!-- #comment-## --> <li id="comment-726" class="comment odd alt thread-odd thread-alt depth-1"> <article id="div-comment-726" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='https://secure.gravatar.com/avatar/be562ca77b66a4ada4768efae353cbe7?s=64&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/be562ca77b66a4ada4768efae353cbe7?s=128&d=mm&r=g 2x' class='avatar avatar-64 photo' height='64' width='64' loading='lazy' decoding='async'/> <b class="fn">albertomilone</b> <span class="says">says:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="https://albertomilone.com/blog/?p=93#comment-726"><time datetime="2007-06-05T18:04:18+00:00">June 5, 2007 at 6:04 pm</time></a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>I see your concerns however one of the Pre-requisites of DisplayConfigGTK are the “python bindings for xrandr 1.2. Possibly ctypes would be enough.”</p> <p>My application gets around the problem. And it already works well.</p> <p>Of course I would be glad to help those people (provided that my help is welcome).</p> </div><!-- .comment-content --> <div class="reply"><a rel="nofollow" class="comment-reply-link" href="https://albertomilone.com/blog/?p=93&replytocom=726#respond" data-commentid="726" data-postid="93" data-belowelement="div-comment-726" data-respondelement="respond" data-replyto="Reply to albertomilone" aria-label="Reply to albertomilone">Reply</a></div> </article><!-- .comment-body --> </li><!-- #comment-## --> <li id="comment-727" class="comment even thread-even depth-1"> <article id="div-comment-727" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='https://secure.gravatar.com/avatar/375e2d5e3830388b963621ec074f365d?s=64&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/375e2d5e3830388b963621ec074f365d?s=128&d=mm&r=g 2x' class='avatar avatar-64 photo' height='64' width='64' loading='lazy' decoding='async'/> <b class="fn"><a href="http://www.digitalprognosis.com" class="url" rel="ugc external nofollow">Jeff Schroeder</a></b> <span class="says">says:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="https://albertomilone.com/blog/?p=93#comment-727"><time datetime="2007-06-05T19:08:57+00:00">June 5, 2007 at 7:08 pm</time></a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>Alberto,</p> <p>This looks really nice, I’ll try it out on Gutsy in a few days and let you know how it goes.</p> <p>Keep up the good work!</p> <p>In other news, envy reboots my nvidia laptop when trying to create a package, I’ll email you what it does sometime soon.</p> </div><!-- .comment-content --> <div class="reply"><a rel="nofollow" class="comment-reply-link" href="https://albertomilone.com/blog/?p=93&replytocom=727#respond" data-commentid="727" data-postid="93" data-belowelement="div-comment-727" data-respondelement="respond" data-replyto="Reply to Jeff Schroeder" aria-label="Reply to Jeff Schroeder">Reply</a></div> </article><!-- .comment-body --> </li><!-- #comment-## --> <li id="comment-728" class="comment odd alt thread-odd thread-alt depth-1"> <article id="div-comment-728" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='https://secure.gravatar.com/avatar/e75a657426ea706a191e47398431c30c?s=64&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/e75a657426ea706a191e47398431c30c?s=128&d=mm&r=g 2x' class='avatar avatar-64 photo' height='64' width='64' loading='lazy' decoding='async'/> <b class="fn">Mathieu Laurent</b> <span class="says">says:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="https://albertomilone.com/blog/?p=93#comment-728"><time datetime="2007-06-05T20:02:20+00:00">June 5, 2007 at 8:02 pm</time></a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>Great project Alberto ! And good luck for your exam 😉</p> </div><!-- .comment-content --> <div class="reply"><a rel="nofollow" class="comment-reply-link" href="https://albertomilone.com/blog/?p=93&replytocom=728#respond" data-commentid="728" data-postid="93" data-belowelement="div-comment-728" data-respondelement="respond" data-replyto="Reply to Mathieu Laurent" aria-label="Reply to Mathieu Laurent">Reply</a></div> </article><!-- .comment-body --> </li><!-- #comment-## --> <li id="comment-729" class="comment even thread-even depth-1"> <article id="div-comment-729" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='https://secure.gravatar.com/avatar/e7b5d7d48539496b665103f77ed1015f?s=64&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/e7b5d7d48539496b665103f77ed1015f?s=128&d=mm&r=g 2x' class='avatar avatar-64 photo' height='64' width='64' loading='lazy' decoding='async'/> <b class="fn">David Nusinow</b> <span class="says">says:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="https://albertomilone.com/blog/?p=93#comment-729"><time datetime="2007-06-05T20:12:03+00:00">June 5, 2007 at 8:12 pm</time></a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>This is great to see! If you are interested in getting it in to Debian, let me know and I’ll help make it happen. If you’re interested in cooperating with the X Strike Force, please write us at <a href="mailto:debian-x@lists.debian.org">debian-x@lists.debian.org</a>.</p> </div><!-- .comment-content --> <div class="reply"><a rel="nofollow" class="comment-reply-link" href="https://albertomilone.com/blog/?p=93&replytocom=729#respond" data-commentid="729" data-postid="93" data-belowelement="div-comment-729" data-respondelement="respond" data-replyto="Reply to David Nusinow" aria-label="Reply to David Nusinow">Reply</a></div> </article><!-- .comment-body --> </li><!-- #comment-## --> <li id="comment-730" class="comment odd alt thread-odd thread-alt depth-1"> <article id="div-comment-730" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='https://secure.gravatar.com/avatar/be562ca77b66a4ada4768efae353cbe7?s=64&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/be562ca77b66a4ada4768efae353cbe7?s=128&d=mm&r=g 2x' class='avatar avatar-64 photo' height='64' width='64' loading='lazy' decoding='async'/> <b class="fn">albertomilone</b> <span class="says">says:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="https://albertomilone.com/blog/?p=93#comment-730"><time datetime="2007-06-05T23:03:54+00:00">June 5, 2007 at 11:03 pm</time></a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>@Jeff<br /> sure. Let me know when you have time 😉</p> <p>@David Nusinow:<br /> I’ll be glad to help. I subscribed to the mailing list</p> <p>@all<br /> thanks for your support 😉</p> </div><!-- .comment-content --> <div class="reply"><a rel="nofollow" class="comment-reply-link" href="https://albertomilone.com/blog/?p=93&replytocom=730#respond" data-commentid="730" data-postid="93" data-belowelement="div-comment-730" data-respondelement="respond" data-replyto="Reply to albertomilone" aria-label="Reply to albertomilone">Reply</a></div> </article><!-- .comment-body --> </li><!-- #comment-## --> <li id="comment-731" class="comment even thread-even depth-1"> <article id="div-comment-731" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='https://secure.gravatar.com/avatar/5815ad8360bee3dad4a41efa48cf5601?s=64&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/5815ad8360bee3dad4a41efa48cf5601?s=128&d=mm&r=g 2x' class='avatar avatar-64 photo' height='64' width='64' loading='lazy' decoding='async'/> <b class="fn"><a href="http://itmanagement.earthweb.com/" class="url" rel="ugc external nofollow">Matt Hartley</a></b> <span class="says">says:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="https://albertomilone.com/blog/?p=93#comment-731"><time datetime="2007-06-05T23:18:46+00:00">June 5, 2007 at 11:18 pm</time></a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>(Took me forever to realize I had to click on “Leave an URL” just to enter the mandatory anti-spam word, may need to make this a little more clear. Sorry, just really found that annoying)</p> <p>—-</p> <p>Hi again, it’s Matt (the guy who did the “OSS projects to watch” for Datamation)</p> <p>I think this is *fantastic* and would also be interested in how dual-displays are handled? Not cloning, rather extended twinview (NVIDIA) support?</p> </div><!-- .comment-content --> <div class="reply"><a rel="nofollow" class="comment-reply-link" href="https://albertomilone.com/blog/?p=93&replytocom=731#respond" data-commentid="731" data-postid="93" data-belowelement="div-comment-731" data-respondelement="respond" data-replyto="Reply to Matt Hartley" aria-label="Reply to Matt Hartley">Reply</a></div> </article><!-- .comment-body --> </li><!-- #comment-## --> <li id="comment-732" class="comment odd alt thread-odd thread-alt depth-1"> <article id="div-comment-732" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='https://secure.gravatar.com/avatar/5815ad8360bee3dad4a41efa48cf5601?s=64&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/5815ad8360bee3dad4a41efa48cf5601?s=128&d=mm&r=g 2x' class='avatar avatar-64 photo' height='64' width='64' loading='lazy' decoding='async'/> <b class="fn"><a href="http://itmanagement.earthweb.com/" class="url" rel="ugc external nofollow">Matt Hartley</a></b> <span class="says">says:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="https://albertomilone.com/blog/?p=93#comment-732"><time datetime="2007-06-05T23:22:54+00:00">June 5, 2007 at 11:22 pm</time></a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>N/M, it looks like you are already ahead of me on the dual-monitor stuff. 😉</p> <p>“…Give the option to use each screen separately (instead of just cloning your main screen on the other screens)”</p> </div><!-- .comment-content --> <div class="reply"><a rel="nofollow" class="comment-reply-link" href="https://albertomilone.com/blog/?p=93&replytocom=732#respond" data-commentid="732" data-postid="93" data-belowelement="div-comment-732" data-respondelement="respond" data-replyto="Reply to Matt Hartley" aria-label="Reply to Matt Hartley">Reply</a></div> </article><!-- .comment-body --> </li><!-- #comment-## --> <li id="comment-733" class="comment even thread-even depth-1"> <article id="div-comment-733" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='https://secure.gravatar.com/avatar/c920ff59b2b4601f0097cbcc3cf2d29b?s=64&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/c920ff59b2b4601f0097cbcc3cf2d29b?s=128&d=mm&r=g 2x' class='avatar avatar-64 photo' height='64' width='64' loading='lazy' decoding='async'/> <b class="fn">Bryce Harrington</b> <span class="says">says:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="https://albertomilone.com/blog/?p=93#comment-733"><time datetime="2007-06-06T01:21:50+00:00">June 6, 2007 at 1:21 am</time></a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>Hiya Alberto,</p> <p>I’m one of the people working on displayconfig-gtk for Ubuntu (actually I focus more on Xorg itself, but this is an important piece). We would love to have your help, especially if you have sorted out issues we haven’t yet.</p> <p>Display detection and configuration has been a problematic area with Ubuntu historically, but my hope is that with a good gui/randr tool we’ll be able to turn this into a big strength. So the more good brains we can get working on this solution, the better! I would be happy to put you in touch with folks, or come by the #ubuntu-devel channel on freenode and look for glatzor or I.</p> </div><!-- .comment-content --> <div class="reply"><a rel="nofollow" class="comment-reply-link" href="https://albertomilone.com/blog/?p=93&replytocom=733#respond" data-commentid="733" data-postid="93" data-belowelement="div-comment-733" data-respondelement="respond" data-replyto="Reply to Bryce Harrington" aria-label="Reply to Bryce Harrington">Reply</a></div> </article><!-- .comment-body --> </li><!-- #comment-## --> <li id="comment-734" class="comment odd alt thread-odd thread-alt depth-1"> <article id="div-comment-734" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='https://secure.gravatar.com/avatar/be562ca77b66a4ada4768efae353cbe7?s=64&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/be562ca77b66a4ada4768efae353cbe7?s=128&d=mm&r=g 2x' class='avatar avatar-64 photo' height='64' width='64' loading='lazy' decoding='async'/> <b class="fn">albertomilone</b> <span class="says">says:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="https://albertomilone.com/blog/?p=93#comment-734"><time datetime="2007-06-06T09:29:36+00:00">June 6, 2007 at 9:29 am</time></a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>@Matt<br /> currently only cloning is implemented. The multi-screen I wrote about consists in having different workspaces on distinct displays. However I feel that GNOME and KDE are not ready for multi-screen (especially KDE). But of course I hope to be proven wrong.</p> <p>I have to ask Xorg’s mailing list if something similar to twinview can be done through randr. If it’s doable then I’ll implement it 😉</p> <p>@Bryce<br /> I would be more than glad to help and I’ll definitely look for you on freenode, or via email.</p> </div><!-- .comment-content --> <div class="reply"><a rel="nofollow" class="comment-reply-link" href="https://albertomilone.com/blog/?p=93&replytocom=734#respond" data-commentid="734" data-postid="93" data-belowelement="div-comment-734" data-respondelement="respond" data-replyto="Reply to albertomilone" aria-label="Reply to albertomilone">Reply</a></div> </article><!-- .comment-body --> </li><!-- #comment-## --> <li id="comment-735" class="comment even thread-even depth-1"> <article id="div-comment-735" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='https://secure.gravatar.com/avatar/a153cc0ebef591904c04d8bf487661de?s=64&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/a153cc0ebef591904c04d8bf487661de?s=128&d=mm&r=g 2x' class='avatar avatar-64 photo' height='64' width='64' loading='lazy' decoding='async'/> <b class="fn"><a href="http://popey.com/" class="url" rel="ugc external nofollow">Alan Pope</a></b> <span class="says">says:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="https://albertomilone.com/blog/?p=93#comment-735"><time datetime="2007-06-06T10:49:41+00:00">June 6, 2007 at 10:49 am</time></a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>My laptop is a tablet one, and when I rotate the screen I have to rotate the wacom tablet also otherwise when I move the stylus up it goes left, and when I move it down it goes right.</p> <p>xsetwacom is the command you need, which is in the wacom-tools package (main).</p> <p>So to rotate you might issue:-</p> <p> sudo xsetwacom set cursor rotate</p> <p>Where is CW, CCW, HALF or NONE (default).</p> </div><!-- .comment-content --> <div class="reply"><a rel="nofollow" class="comment-reply-link" href="https://albertomilone.com/blog/?p=93&replytocom=735#respond" data-commentid="735" data-postid="93" data-belowelement="div-comment-735" data-respondelement="respond" data-replyto="Reply to Alan Pope" aria-label="Reply to Alan Pope">Reply</a></div> </article><!-- .comment-body --> </li><!-- #comment-## --> <li id="comment-736" class="comment odd alt thread-odd thread-alt depth-1"> <article id="div-comment-736" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='https://secure.gravatar.com/avatar/be562ca77b66a4ada4768efae353cbe7?s=64&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/be562ca77b66a4ada4768efae353cbe7?s=128&d=mm&r=g 2x' class='avatar avatar-64 photo' height='64' width='64' loading='lazy' decoding='async'/> <b class="fn">albertomilone</b> <span class="says">says:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="https://albertomilone.com/blog/?p=93#comment-736"><time datetime="2007-06-06T10:54:22+00:00">June 6, 2007 at 10:54 am</time></a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>@Alan<br /> thanks for your suggestion. The same happens with my mouse or touchpad.</p> </div><!-- .comment-content --> <div class="reply"><a rel="nofollow" class="comment-reply-link" href="https://albertomilone.com/blog/?p=93&replytocom=736#respond" data-commentid="736" data-postid="93" data-belowelement="div-comment-736" data-respondelement="respond" data-replyto="Reply to albertomilone" aria-label="Reply to albertomilone">Reply</a></div> </article><!-- .comment-body --> </li><!-- #comment-## --> <li id="comment-737" class="comment even thread-even depth-1"> <article id="div-comment-737" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='https://secure.gravatar.com/avatar/2a2ae7fefcdabf4737ff2b060e68bc5a?s=64&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/2a2ae7fefcdabf4737ff2b060e68bc5a?s=128&d=mm&r=g 2x' class='avatar avatar-64 photo' height='64' width='64' loading='lazy' decoding='async'/> <b class="fn">C</b> <span class="says">says:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="https://albertomilone.com/blog/?p=93#comment-737"><time datetime="2007-06-26T13:14:11+00:00">June 26, 2007 at 1:14 pm</time></a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>What about color depth? I tried to change mine from 24 to 16 once, and X fell down and couldn’t get up.</p> </div><!-- .comment-content --> <div class="reply"><a rel="nofollow" class="comment-reply-link" href="https://albertomilone.com/blog/?p=93&replytocom=737#respond" data-commentid="737" data-postid="93" data-belowelement="div-comment-737" data-respondelement="respond" data-replyto="Reply to C" aria-label="Reply to C">Reply</a></div> </article><!-- .comment-body --> </li><!-- #comment-## --> <li id="comment-738" class="comment odd alt thread-odd thread-alt depth-1"> <article id="div-comment-738" class="comment-body"> <footer class="comment-meta"> <div class="comment-author vcard"> <img alt='' src='https://secure.gravatar.com/avatar/be562ca77b66a4ada4768efae353cbe7?s=64&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/be562ca77b66a4ada4768efae353cbe7?s=128&d=mm&r=g 2x' class='avatar avatar-64 photo' height='64' width='64' loading='lazy' decoding='async'/> <b class="fn">albertomilone</b> <span class="says">says:</span> </div><!-- .comment-author --> <div class="comment-metadata"> <a href="https://albertomilone.com/blog/?p=93#comment-738"><time datetime="2007-06-26T14:03:00+00:00">June 26, 2007 at 2:03 pm</time></a> </div><!-- .comment-metadata --> </footer><!-- .comment-meta --> <div class="comment-content"> <p>@C<br /> I’m not sure whether you can change the colour depth of your display.</p> </div><!-- .comment-content --> <div class="reply"><a rel="nofollow" class="comment-reply-link" href="https://albertomilone.com/blog/?p=93&replytocom=738#respond" data-commentid="738" data-postid="93" data-belowelement="div-comment-738" data-respondelement="respond" data-replyto="Reply to albertomilone" aria-label="Reply to albertomilone">Reply</a></div> </article><!-- .comment-body --> </li><!-- #comment-## --> </ol><!-- .comment-list --> <div id="respond" class="comment-respond"> <h3 id="reply-title" class="comment-reply-title">Leave a Reply <small><a rel="nofollow" id="cancel-comment-reply-link" href="/blog/?p=93#respond" style="display:none;">Cancel reply</a></small></h3><form action="https://albertomilone.com/blog/wp-comments-post.php" method="post" id="commentform" class="comment-form" novalidate><p class="comment-notes"><span id="email-notes">Your email address will not be published.</span> <span class="required-field-message">Required fields are marked <span class="required">*</span></span></p><p class="comment-form-comment"><label for="comment">Comment <span class="required">*</span></label> <textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required></textarea></p><p class="comment-form-author"><label for="author">Name <span class="required">*</span></label> <input id="author" name="author" type="text" value="" size="30" maxlength="245" autocomplete="name" required /></p> <p class="comment-form-email"><label for="email">Email <span class="required">*</span></label> <input id="email" name="email" type="email" value="" size="30" maxlength="100" aria-describedby="email-notes" autocomplete="email" required /></p> <p class="comment-form-url"><label for="url">Website</label> <input id="url" name="url" type="url" value="" size="30" maxlength="200" autocomplete="url" /></p> <p class="form-submit"><input name="submit" type="submit" id="submit" class="submit" value="Post Comment" /> <input type='hidden' name='comment_post_ID' value='93' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /> </p><p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="2ad4073401" /></p><p style="display: none !important;" class="akismet-fields-container" data-prefix="ak_"><label>Δ<textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_1" name="ak_js" value="163"/><script>document.getElementById( "ak_js_1" ).setAttribute( "value", ( new Date() ).getTime() );</script></p></form> </div><!-- #respond --> <p class="akismet_comment_form_privacy_notice">This site uses Akismet to reduce spam. <a href="https://akismet.com/privacy/" target="_blank" rel="nofollow noopener">Learn how your comment data is processed</a>.</p> </div><!-- #comments --> </main><!-- #main --> </div><!-- #primary --> </div><!-- #content --> <footer id="colophon" class="site-footer" role="contentinfo"> <div class="theme-info"> <p><a href="https://www.machothemes.com/themes/decode/" rel="dofollow">Decode Theme</a> by <a href="https://www.machothemes.com/" rel="dofollow" title="Professional & Responsive WordPress Themes">Macho Themes</a></p> </div><!-- .theme-info --> </footer><!-- #colophon --> </div><!-- #page --> <div id="sidebar" class="sidebar left"> <div id="sidebar-top" class="sidebar-top SidebarTop clearfix"> <button id="sidebar-close" class="sidebar-close SidebarClose" title="Hide sidebar"> <svg width="100%" height="100%" viewBox="0 0 200 200" version="1.1" xmlns="http://www.w3.org/2000/svg"> <path class="close-icon" d="M0,172.881356 L72.8813559,100 L1.0658141e-14,27.1186441 L27.1186441,-2.84217094e-14 L100,72.8813559 L172.881356,0 L200,27.1186441 L127.118644,100 L200,172.881356 L172.881356,200 L100,127.118644 L27.1186441,200 Z M0,172.881356" fill="#444444"></path> </svg> </button> </div> <div class="sidebar-content"> <div class="widget-area" role="complementary"> <aside id="search-2" class="widget widget_search"><form role="search" method="get" class="search-form" action="https://albertomilone.com/blog/"> <label> <span class="screen-reader-text">Search for:</span> <input type="search" class="search-field" placeholder="Search …" value="" name="s" /> </label> <input type="submit" class="search-submit" value="Search" /> </form></aside> <aside id="recent-posts-2" class="widget widget_recent_entries"> <h2 class="widgettitle">Recent Posts</h2> <ul> <li> <a href="https://albertomilone.com/blog/?p=670">NVIDIA PRIME in Ubuntu 18.04 and 18.10, and a call for testing</a> </li> <li> <a href="https://albertomilone.com/blog/?p=662">Hybrid Graphics in Ubuntu 14.04</a> </li> <li> <a href="https://albertomilone.com/blog/?p=653">GPG key transition</a> </li> <li> <a href="https://albertomilone.com/blog/?p=597">On Heated Technical Discussions</a> </li> <li> <a href="https://albertomilone.com/blog/?p=591">Hybrid Graphics with AMD and NVIDIA in Ubuntu 13.10 and 12.04.3</a> </li> </ul> </aside><aside id="archives-2" class="widget widget_archive"><h2 class="widgettitle">Archives</h2> <label class="screen-reader-text" for="archives-dropdown-2">Archives</label> <select id="archives-dropdown-2" name="archive-dropdown"> <option value="">Select Month</option> <option value='https://albertomilone.com/blog/?m=201809'> September 2018 </option> <option value='https://albertomilone.com/blog/?m=201405'> May 2014 </option> <option value='https://albertomilone.com/blog/?m=201312'> December 2013 </option> <option value='https://albertomilone.com/blog/?m=201311'> November 2013 </option> <option value='https://albertomilone.com/blog/?m=201310'> October 2013 </option> <option value='https://albertomilone.com/blog/?m=201306'> June 2013 </option> <option value='https://albertomilone.com/blog/?m=201305'> May 2013 </option> <option value='https://albertomilone.com/blog/?m=201301'> January 2013 </option> <option value='https://albertomilone.com/blog/?m=201209'> September 2012 </option> <option value='https://albertomilone.com/blog/?m=201111'> November 2011 </option> <option value='https://albertomilone.com/blog/?m=201107'> July 2011 </option> <option value='https://albertomilone.com/blog/?m=201104'> April 2011 </option> <option value='https://albertomilone.com/blog/?m=201103'> March 2011 </option> <option value='https://albertomilone.com/blog/?m=201009'> September 2010 </option> <option value='https://albertomilone.com/blog/?m=201003'> March 2010 </option> <option value='https://albertomilone.com/blog/?m=201002'> February 2010 </option> <option value='https://albertomilone.com/blog/?m=200909'> September 2009 </option> <option value='https://albertomilone.com/blog/?m=200907'> July 2009 </option> <option value='https://albertomilone.com/blog/?m=200903'> March 2009 </option> <option value='https://albertomilone.com/blog/?m=200901'> January 2009 </option> <option value='https://albertomilone.com/blog/?m=200812'> December 2008 </option> <option value='https://albertomilone.com/blog/?m=200811'> November 2008 </option> <option value='https://albertomilone.com/blog/?m=200810'> October 2008 </option> <option value='https://albertomilone.com/blog/?m=200808'> August 2008 </option> <option value='https://albertomilone.com/blog/?m=200807'> July 2008 </option> <option value='https://albertomilone.com/blog/?m=200806'> June 2008 </option> <option value='https://albertomilone.com/blog/?m=200805'> May 2008 </option> <option value='https://albertomilone.com/blog/?m=200804'> April 2008 </option> <option value='https://albertomilone.com/blog/?m=200803'> March 2008 </option> <option value='https://albertomilone.com/blog/?m=200802'> February 2008 </option> <option value='https://albertomilone.com/blog/?m=200801'> January 2008 </option> <option value='https://albertomilone.com/blog/?m=200712'> December 2007 </option> <option value='https://albertomilone.com/blog/?m=200711'> November 2007 </option> <option value='https://albertomilone.com/blog/?m=200710'> October 2007 </option> <option value='https://albertomilone.com/blog/?m=200709'> September 2007 </option> <option value='https://albertomilone.com/blog/?m=200708'> August 2007 </option> <option value='https://albertomilone.com/blog/?m=200707'> July 2007 </option> <option value='https://albertomilone.com/blog/?m=200706'> June 2007 </option> <option value='https://albertomilone.com/blog/?m=200705'> May 2007 </option> <option value='https://albertomilone.com/blog/?m=200704'> April 2007 </option> <option value='https://albertomilone.com/blog/?m=200703'> March 2007 </option> <option value='https://albertomilone.com/blog/?m=200702'> February 2007 </option> <option value='https://albertomilone.com/blog/?m=200701'> January 2007 </option> <option value='https://albertomilone.com/blog/?m=200612'> December 2006 </option> <option value='https://albertomilone.com/blog/?m=200611'> November 2006 </option> <option value='https://albertomilone.com/blog/?m=200610'> October 2006 </option> <option value='https://albertomilone.com/blog/?m=200609'> September 2006 </option> <option value='https://albertomilone.com/blog/?m=200608'> August 2006 </option> </select> <script type="text/javascript"> /* <![CDATA[ */ (function() { var dropdown = document.getElementById( "archives-dropdown-2" ); function onSelectChange() { if ( dropdown.options[ dropdown.selectedIndex ].value !== '' ) { document.location.href = this.options[ this.selectedIndex ].value; } } dropdown.onchange = onSelectChange; })(); /* ]]> */ </script> </aside><aside id="categories-2" class="widget widget_categories"><h2 class="widgettitle">Categories</h2> <ul> <li class="cat-item cat-item-2"><a href="https://albertomilone.com/blog/?cat=2">Android</a> </li> <li class="cat-item cat-item-12"><a href="https://albertomilone.com/blog/?cat=12">Daily routine</a> </li> <li class="cat-item cat-item-13"><a href="https://albertomilone.com/blog/?cat=13">Debian</a> </li> <li class="cat-item cat-item-3"><a href="https://albertomilone.com/blog/?cat=3">Driver Updates</a> </li> <li class="cat-item cat-item-4"><a href="https://albertomilone.com/blog/?cat=4">Envy</a> </li> <li class="cat-item cat-item-14"><a href="https://albertomilone.com/blog/?cat=14">GNU/Linux</a> </li> <li class="cat-item cat-item-5"><a href="https://albertomilone.com/blog/?cat=5">Planet</a> </li> <li class="cat-item cat-item-6"><a href="https://albertomilone.com/blog/?cat=6">Python</a> </li> <li class="cat-item cat-item-7"><a href="https://albertomilone.com/blog/?cat=7">QT</a> </li> <li class="cat-item cat-item-9"><a href="https://albertomilone.com/blog/?cat=9">Ubuntu</a> </li> <li class="cat-item cat-item-10"><a href="https://albertomilone.com/blog/?cat=10">UDS</a> </li> <li class="cat-item cat-item-1"><a href="https://albertomilone.com/blog/?cat=1">Uncategorized</a> </li> <li class="cat-item cat-item-11"><a href="https://albertomilone.com/blog/?cat=11">voices</a> </li> </ul> </aside><aside id="meta-2" class="widget widget_meta"><h2 class="widgettitle">Meta</h2> <ul> <li><a href="https://albertomilone.com/blog/wp-login.php">Log in</a></li> <li><a href="https://albertomilone.com/blog/?feed=rss2">Entries feed</a></li> <li><a href="https://albertomilone.com/blog/?feed=comments-rss2">Comments feed</a></li> <li><a href="https://wordpress.org/">WordPress.org</a></li> </ul> </aside> </div><!-- .widget-area --> </div> </div><!-- #sidebar --> <script type="text/javascript" src="https://albertomilone.com/blog/wp-content/themes/decode/scripts/decode.js?ver=3.0.9" id="decode-scripts-js"></script> <script type="text/javascript" src="https://albertomilone.com/blog/wp-includes/js/comment-reply.min.js?ver=6.7.1" id="comment-reply-js" async="async" data-wp-strategy="async"></script> <script defer type="text/javascript" src="https://albertomilone.com/blog/wp-content/plugins/akismet/_inc/akismet-frontend.js?ver=1731983489" id="akismet-frontend-js"></script> </body> </html>