{"id":308,"date":"2012-02-08T09:48:04","date_gmt":"2012-02-08T11:48:04","guid":{"rendered":"http:\/\/www.universolivre.net.br\/blog\/?p=308"},"modified":"2012-02-08T09:48:04","modified_gmt":"2012-02-08T11:48:04","slug":"thinkpad-x200-t-com-todas-as-funcoes-em-gnulinux","status":"publish","type":"post","link":"https:\/\/www.universolivre.com.br\/?p=308","title":{"rendered":"ThinkPad X200 T com todas as fun\u00e7\u00f5es em GNU\/Linux&#8230;"},"content":{"rendered":"<h3>Ou quase isso!<\/h3>\n<p>A um tempo atr\u00e1s, postei uma reportagem de como deixar o ThinkPad X200 Tablet funcionando com GNU\/Linux (no meu caso Debian), com a maioria das fun\u00e7\u00f5es funcionando. Esse post pode ser lido <a title=\"Finalmente Livre\u2026\" href=\"http:\/\/www.universolivre.net.br\/blog\/2011\/12\/01\/finalmente-livre-2\/\" target=\"_blank\">aqui<\/a>. Mas n\u00e3o estava completo, porque ainda faltava fazer com que uma das fun\u00e7\u00f5es mais legais (a transforma\u00e7\u00e3o em tablet, girando a tela, e a rota\u00e7\u00e3o autom\u00e1tica da tela conforme se gira o tablet), ainda n\u00e3o estava funcionando.<\/p>\n<p>Passaram-se, ent\u00e3o, 3 meses de pesquisa (t\u00e1 certo, n\u00e3o foi uma pesquisa muito intensa, pois estava concentrado em minha nova empreitada profissional) e tentativasde aplica\u00e7\u00e3o de diversas sugest\u00f5es de blogs, wikis, v\u00eddeos, usu\u00e1rios de Ubuntu, CentOS e outras tantas distribui\u00e7\u00f5es. Nenhuma efetiva, mas muito aprendizado foi poss\u00edvel.<\/p>\n<p>Descobri que os m\u00f3dulos que esses dispositivos precisavam criavam diversos dispositivos no \/sys\/devices\/platform, e comecei a colocar a cabe\u00e7a para trabalhar. Percebi que seria necess\u00e1rio criar algo, que n\u00e3o seria trivial, mas que teria grandes chances de funcionar como eu queria. E mais, percebi que s\u00f3 conseguiria que funcionasse como eu queria se eu desenvolvesse algo para isso.<\/p>\n<p>Como todos sabem, n\u00e3o sou programador, sou um mero administrador de sistemas GNU\/Linux (com toda a mod\u00e9stia que Deus me deu, posso dizer que sou pouco mais que bom no que fa\u00e7o). Portanto, de programa\u00e7\u00e3o o que seu fazer \u00e9 automatiza\u00e7\u00e3o de tarefas com <em>Shell Scripts<\/em>.<\/p>\n<p>Nesta \u00faltima semana espantei a pregui\u00e7a e decidi fazer o script para automatizar essa tarefa. J\u00e1 estava cansado de toda vez que transformava o note em tablet ou decidisse girar o tablet tivesse que apertar um bot\u00e3o. Ficou simples e de f\u00e1cil compreens\u00e3o, no entanto, consumia muito processamento, pois o encadeamento de condi\u00e7\u00f5es que foi necess\u00e1rio estava sendo executado em tempo de processador. Um bug, resolvido facilmente com um <em>sleep<\/em> de meio segundo.<\/p>\n<p>Vejam s\u00f3 que script interessante. Se quiserem desenvolver algo mais, a partir daqui, fiquem \u00e1 vontade, s\u00f3 pe\u00e7o que se siga a GPL 3.<\/p>\n<pre>#!\/bin\/bash\n\n## Created by: Luiz Guaraldo &lt;guaraldo@universolivre.com.br&gt;\n## Created at: Tru Jan 24 22:15:35 BRST 2012\n## Last Update: Tru Feb 8 09:30:15 BRST 2012\n\n## Default screen mode for Swivel Down and Swivel Up [normal|right|inverted|left] and default VIDEO output\nXRANDUP=\"normal\"\nXRANDDN=\"right\"\nVIDEO=\"LVDS1\"\n\n## Personal configuration can be put on home folder in .tablet.conf file.\nif [ -f ~\/.tablet.conf ]; then\n . ~\/.tablet.conf\nfi\n\n## Get XSetWacom by XrandR rotation. Important to mantain toutch syncronization\ncase \"$XRANDUP\" in\n inverted)\n XSWUP=\"half\"\n ;;\n normal)\n XSWUP=\"none\"\n ;;\n left)\n XSWUP=\"ccw\"\n ;;\n right)\n XSWUP=\"cw\"\n ;;\n *)\n XRANDUP=\"normal\"\n XSWUP=\"none\"\n ;;\nesac\ncase \"$XRANDDN\" in\n inverted)\n XSWDN=\"half\"\n ;;\n normal)\n XSWDN=\"none\"\n ;;\n left)\n XSWDN=\"ccw\"\n ;;\n right)\n XSWDN=\"cw\"\n ;;\n *)\n XRANDDN=\"right\"\n XSWDN=\"cw\"\n ;;\nesac\n\n## Starting position of Swivel (remember that this script just act when Swivel is DOWN)\nlast=0 # Tablet mode off\nlastpos=\"$XRANDDN\" #When on tablet mode this will be default screen rotation\nposition=\"$XRANDDN\"\n\n## Starting infinite loop\nwhile :; do\n ## This file is 0 when Swivel UP and 1 when Swivel DOWN (tablet mode)\n now=`cat \/sys\/devices\/platform\/thinkpad_acpi\/hotkey_tablet_mode`\n if [ $last != $now ]; then\n ## Turn on or off tablet mode\n if [ $now == 1 ]; then\n ## Turn on tablet mode\n \/usr\/bin\/xrandr --output $VIDEO --rotate $XRANDDN\n xsetwacom set \"stylus\" Rotate $XSWDN\n xsetwacom set \"cursor\" Rotate $XSWDN\n xsetwacom set \"eraser\" Rotate $XSWDN\n else\n ## Turn off tablet mode\n \/usr\/bin\/xrandr --output $VIDEO --rotate $XRANDUP\n xsetwacom set \"stylus\" Rotate $XSWUP\n xsetwacom set \"cursor\" Rotate $XSWUP\n xsetwacom set \"eraser\" Rotate $XSWUP\n fi\n ## Mark present mode\n last=$now\n fi\n\n ## Autorotation of screen when on tablet mode\n ## This file contain HDAPS position (indicates notebook rotation)\n position1=`cat \/sys\/devices\/platform\/hdaps\/position | cut -d, -f1 | cut -d'(' -f2`\n position2=`cat \/sys\/devices\/platform\/hdaps\/position | cut -d, -f2 | cut -d')' -f1`\n # This is a coordenate (rotation on X and Y axis)\n\n if [ $now == 1 ]; then ## On tablet mode?\n if [ $position1 -gt 350 ] &amp;&amp; [ $position1 -lt 400 ] &amp;&amp; [ $position2 -gt -525 ] &amp;&amp; [ $position2 -lt -475 ]; then\n position=\"right\"\n elif [ $position1 -gt 475 ] &amp;&amp; [ $position1 -lt 525 ] &amp;&amp; [ $position2 -gt -400 ] &amp;&amp; [ $position2 -lt -350 ]; then\n position=\"inverted\"\n elif [ $position1 -gt 625 ] &amp;&amp; [ $position1 -lt 675 ] &amp;&amp; [ $position2 -gt -525 ] &amp;&amp; [ $position2 -lt -475 ]; then\n position=\"left\"\n elif [ $position1 -gt 475 ] &amp;&amp; [ $position1 -lt 525 ] &amp;&amp; [ $position2 -gt -675 ] &amp;&amp; [ $position2 -lt -625 ]; then\n position=\"normal\"\n fi\n\n ## Just act when possition changed\n if [ \"$position\" != \"$lastpos\" ]; then\n ## Get XSetWacom syncronization\n case \"$position\" in\n inverted)\n wpos=\"half\"\n ;;\n normal)\n wpos=\"none\"\n ;;\n left)\n wpos=\"ccw\"\n ;;\n right)\n wpos=\"cw\"\n ;;\n esac\n xrandr --output $VIDEO --rotate $position\n xsetwacom set \"stylus\" Rotate $wpos\n xsetwacom set \"cursor\" Rotate $wpos\n xsetwacom set \"eraser\" Rotate $wpos\n\n ## Mark new position\n lastpos=$position\n fi\n fi\n\n ## Processor got hudge ocupation. 70% lass processor ocupation after sleep.\n sleep 0.5\ndone<\/pre>\n<p>Claro que criar o script foi s\u00f3 o primeiro passo. Agora precisava clocar para rodar automaticamente. Para isso, usei o in\u00edcio autom\u00e1tico do GNOME (que \u00e9 o gerenciador de janelas que eu uso), mas pode ser feito em qualquer gerenciador de janelas.<\/p>\n<p>Para alterar o padr\u00e3o de entrada e sa\u00edda do tablet mode, basta criar um arquivo <strong>.tablet.conf<\/strong> no diret\u00f3rio <em>home<\/em> do usu\u00e1rio com duas linhas:<\/p>\n<pre>XRANDUP=\"normal\"\nXRANDDN=\"inverted\"<\/pre>\n<p>Assim, ai iniciar uma nova sess\u00e3o do gerenciador de janelas j\u00e1 estava tudo funcionando como eu queria&#8230; A rota\u00e7\u00e3o autom\u00e1tica da tela s\u00f3 ocorre quando em <em>Tablet Mode<\/em>, ao entrar nesse modo a tela se vira da forma como eu queria (e n\u00e3o da forma padr\u00e3o do script &#8211; que fiz seguindo o padr\u00e3o que o software da Lenovo para RWindows tinha), enfim, cmo n\u00e3o existia o que eu queria, tratei de criar&#8230;<\/p>\n<p>Espero que seja \u00fatil para todos. Postem coment\u00e1rios, por favor. Basta autenticarem com o Twitter.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A um tempo atr\u00e1s, postei uma reportagem de como deixar o ThinkPad X200 Tablet funcionando com GNU\/Linux (no meu caso Debian), com a maioria das fun\u00e7\u00f5es funcionando. Esse post pode ser lido aqui (&#8220;Finalmente livre&#8230;&#8221;). Mas n\u00e3o estava completo, porque ainda faltava fazer com que uma das fun\u00e7\u00f5es mais legais (a transforma\u00e7\u00e3o em tablet, girando a tela, e a rota\u00e7\u00e3o autom\u00e1tica da tela conforme se gira o tablet), ainda n\u00e3o estava funcionando.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,7,8],"tags":[],"class_list":["post-308","post","type-post","status-publish","format-standard","hentry","category-debian","category-software-livre","category-suporte"],"_links":{"self":[{"href":"https:\/\/www.universolivre.com.br\/index.php?rest_route=\/wp\/v2\/posts\/308"}],"collection":[{"href":"https:\/\/www.universolivre.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.universolivre.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.universolivre.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.universolivre.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=308"}],"version-history":[{"count":0,"href":"https:\/\/www.universolivre.com.br\/index.php?rest_route=\/wp\/v2\/posts\/308\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.universolivre.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=308"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.universolivre.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=308"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.universolivre.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}