{"id":336,"date":"2011-03-10T11:07:47","date_gmt":"2011-03-10T09:07:47","guid":{"rendered":"http:\/\/www.ceh-photo.de\/blog\/?p=336"},"modified":"2011-03-10T11:13:46","modified_gmt":"2011-03-10T09:13:46","slug":"automatic-placing-of-onscreen-keyboard-in-linux","status":"publish","type":"post","link":"https:\/\/www.ceh-photo.de\/blog\/?p=336","title":{"rendered":"Automatic placing of onscreen keyboard in linux"},"content":{"rendered":"<p>This guide is writte for my Acer 1825 but it should work on all linux devices which need a onscreen keyboard like onboard.<\/p>\n<p><a href=\"http:\/\/www.ceh-photo.de\/blog\/wp-content\/plugins\/downloads-manager\/upload\/\/onscreen01.png\"><br \/>\n<\/a>I got the idea of building this script from Tom\/<span><span>drnessie<\/span><\/span> from the <span><span>ubuntuforums<\/span><\/span>.org (<a href=\"http:\/\/ubuntuforums.org\/showthread.php?t=1486671&amp;page=17\"><span>http:\/\/<span>ubuntuforums<\/span>.org\/<span>showthread<\/span>.<span>php<\/span>?t=1486671&amp;page=17<\/span><\/a>), because he tried to make a improvement of my onscreen keyboard show\/hide script from this post.<\/p>\n<p><a href=\"http:\/\/www.ceh-photo.de\/blog\/?p=200\">http:\/\/www.<span><span>ceh<\/span><\/span>-photo.<span><span>de<\/span><\/span>\/blog\/?p=200<\/a><\/p>\n<p>He wants to place the onscreen keyboard on the bottom of the screen and shrink\u00a0accordingly the\u00a0active window .<\/p>\n<p>He uses <span><span>wmctrl<\/span><\/span> but I used <span><span>wmiface<\/span><\/span> like in this post\u00a0<a href=\"http:\/\/www.ceh-photo.de\/blog\/?p=265\">http:\/\/www.<span><span>ceh<\/span><\/span>-photo.<span><span>de<\/span><\/span>\/blog\/?p=265<\/a> (please check that post to get information about installing\/downloading <span><span>wmiface<\/span><\/span>), because I am already comfortable with it. Maybe you could reach the same effects with <span><span>wmctrl<\/span><\/span>&#8230;.<\/p>\n<p>First two screenshots which shows you what my script does:<\/p>\n<p>First screenshot show my desktop before pressing the P-Button, second screenshot shows my desktop after pressing P-Button. After another press of the P-Button I will have again screenshot one conditions. This also works for portrait-mo<span><span>de<\/span><\/span>.<\/p>\n<p><a href=\"http:\/\/www.ceh-photo.de\/blog\/wp-content\/plugins\/downloads-manager\/upload\/\/onscreen02.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-339 alignleft\" title=\"onscreen keyboard beforte first script execution or after second execution\" src=\"http:\/\/www.ceh-photo.de\/blog\/wp-content\/plugins\/downloads-manager\/upload\/\/onscreen02-300x168.png\" alt=\"\" width=\"300\" height=\"168\" srcset=\"https:\/\/www.ceh-photo.de\/blog\/wp-content\/plugins\/downloads-manager\/upload\/onscreen02-300x168.png 300w, https:\/\/www.ceh-photo.de\/blog\/wp-content\/plugins\/downloads-manager\/upload\/onscreen02-1024x575.png 1024w, https:\/\/www.ceh-photo.de\/blog\/wp-content\/plugins\/downloads-manager\/upload\/onscreen02.png 1366w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/www.ceh-photo.de\/blog\/wp-content\/plugins\/downloads-manager\/upload\/\/onscreen01.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-338 alignleft\" title=\"onscreen keyboard after first script execution\" src=\"http:\/\/www.ceh-photo.de\/blog\/wp-content\/plugins\/downloads-manager\/upload\/\/onscreen01-300x168.png\" alt=\"\" width=\"300\" height=\"168\" srcset=\"https:\/\/www.ceh-photo.de\/blog\/wp-content\/plugins\/downloads-manager\/upload\/onscreen01-300x168.png 300w, https:\/\/www.ceh-photo.de\/blog\/wp-content\/plugins\/downloads-manager\/upload\/onscreen01-1024x575.png 1024w, https:\/\/www.ceh-photo.de\/blog\/wp-content\/plugins\/downloads-manager\/upload\/onscreen01.png 1366w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>You could replace the old P-Button script from this post(<a href=\"http:\/\/www.ceh-photo.de\/blog\/?p=200\">http:\/\/www.<span><span>ceh<\/span><\/span>-photo.<span><span>de<\/span><\/span>\/blog\/?p=200<\/a>) with my new script.<\/p>\n<div class=\"codecolorer-container bash default\" style=\"overflow:auto;white-space:nowrap;width:70%;height:400px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/>72<br \/>73<br \/>74<br \/>75<br \/>76<br \/>77<br \/>78<br \/>79<br \/>80<br \/>81<br \/>82<br \/>83<br \/>84<br \/>85<br \/>86<br \/>87<br \/>88<br \/>89<br \/>90<br \/>91<br \/>92<br \/>93<br \/>94<br \/>95<br \/>96<br \/>97<br \/>98<br \/>99<br \/>100<br \/>101<br \/>102<br \/>103<br \/>104<br \/>105<br \/>106<br \/>107<br \/>108<br \/>109<br \/>110<br \/>111<br \/>112<br \/>113<br \/>114<br \/>115<br \/>116<br \/>117<br \/>118<br \/>119<br \/>120<br \/>121<br \/>122<br \/>123<br \/>124<br \/>125<br \/>126<br \/>127<br \/>128<br \/>129<br \/>130<br \/>131<br \/>132<br \/>133<br \/>134<br \/>135<br \/>136<br \/>137<br \/>138<br \/>139<br \/>140<br \/>141<br \/>142<br \/>143<br \/>144<br \/><\/div><\/td><td><div class=\"bash codecolorer\"><span class=\"co0\">#!\/bin\/bash<\/span><br \/>\n<span class=\"co0\">#author: Christopher-Eyk Hrabia - http:\/\/www.ceh-photo.de - c.hrabia@gmail.com<\/span><br \/>\n<span class=\"co0\">#PURPOSE:<\/span><br \/>\n<span class=\"co0\">#This script places an arbitrary onscreen keyboard application at the bottom of the desktop and put the current active window above the keyboard in pseudo maximization<\/span><br \/>\n<span class=\"co0\">#if script is run again, onscreen keyboard will be killed and old window configuration will be restored<\/span><br \/>\n<br \/>\n<br \/>\n<span class=\"co0\">#CONFIGURATION<\/span><br \/>\n<span class=\"re2\">toppanelheight<\/span>=<span class=\"nu0\">36<\/span> <span class=\"co0\">#right click preferences to get height of panel<\/span><br \/>\n<span class=\"re2\">bottompanelheight<\/span>=<span class=\"nu0\">36<\/span><br \/>\n<span class=\"re2\">DEBUG<\/span>=<span class=\"st0\">&quot;&quot;<\/span> <span class=\"co0\"># write DEBUG=&quot;1&quot; for debug output<\/span><br \/>\n<span class=\"re2\">TEMPFILE<\/span>=<span class=\"sy0\">\/<\/span>tmp<span class=\"sy0\">\/<\/span>OnScreenKeyboard.tmp<br \/>\n<span class=\"re2\">ONSCREENKEYBOARDAPP<\/span>=onboard<br \/>\n<span class=\"re2\">ONSCREENKEYBOARDHEIGHTSHRINKOFFSET<\/span>=<span class=\"nu0\">50<\/span><br \/>\n<br \/>\n<span class=\"co0\">#####################################################<\/span><br \/>\n<br \/>\n<span class=\"co0\">#redirect stdin, stdout and stderr<\/span><br \/>\n<span class=\"br0\">&#91;<\/span> <span class=\"sy0\">!<\/span> <span class=\"st0\">&quot;<span class=\"es3\">${DEBUG}<\/span>&quot;<\/span> <span class=\"br0\">&#93;<\/span> <span class=\"sy0\">&amp;&amp;<\/span> <span class=\"kw3\">exec<\/span><span class=\"sy0\">&gt;\/<\/span>dev<span class=\"sy0\">\/<\/span>null <span class=\"nu0\">2<\/span><span class=\"sy0\">&gt;&amp;<\/span><span class=\"nu0\">1<\/span> <span class=\"sy0\">&lt;\/<\/span>dev<span class=\"sy0\">\/<\/span>null<br \/>\n<br \/>\n<br \/>\n<span class=\"re2\">running<\/span>=$<span class=\"br0\">&#40;<\/span>pgrep <span class=\"re1\">$ONSCREENKEYBOARDAPP<\/span> <span class=\"sy0\">|<\/span> <span class=\"kw2\">wc<\/span> -l<span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"kw1\">if<\/span> <span class=\"br0\">&#91;<\/span> <span class=\"re1\">$running<\/span> <span class=\"re5\">-gt<\/span> <span class=\"nu0\">0<\/span> <span class=\"br0\">&#93;<\/span> ;<span class=\"kw1\">then<\/span> <span class=\"co0\">#kill keyboard reset old status<\/span><br \/>\n&nbsp; &nbsp; &nbsp;pkill <span class=\"re1\">$ONSCREENKEYBOARDAPP<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"co0\">#read old configuration<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"re2\">filecontent<\/span>=$<span class=\"br0\">&#40;<\/span><span class=\"kw2\">cat<\/span> <span class=\"re1\">$TEMPFILE<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"co0\">#check if we have old configuration<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"kw1\">if<\/span> <span class=\"br0\">&#91;<\/span> <span class=\"re5\">-n<\/span> <span class=\"st0\">&quot;<span class=\"es2\">$filecontent<\/span>&quot;<\/span> <span class=\"br0\">&#93;<\/span>;<span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"kw1\">set<\/span> <span class=\"sy0\">`<\/span><span class=\"kw3\">echo<\/span> <span class=\"re1\">$filecontent<\/span><span class=\"sy0\">`<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"re2\">maximizedCur<\/span>=<span class=\"re4\">$1<\/span> <br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"re2\">sizeXcur<\/span>=<span class=\"re4\">$2<\/span> <br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"re2\">sizeYcur<\/span>=<span class=\"re4\">$3<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"re2\">xCur<\/span>=<span class=\"re4\">$4<\/span> <br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"re2\">yCur<\/span>=<span class=\"re4\">$5<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"re2\">winCur<\/span>=<span class=\"re4\">$6<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"co0\">#reset postion and size<\/span><br \/>\n&nbsp; &nbsp; &nbsp;wmiface setFrameGeometry <span class=\"re1\">$winCur<\/span> <span class=\"re1\">$xCur<\/span> <span class=\"re1\">$yCur<\/span> <span class=\"re1\">$sizeXcur<\/span> <span class=\"re1\">$sizeYcur<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"co0\">#if window was maximized bring it to former size<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"kw1\">case<\/span> <span class=\"re1\">$maximizedCur<\/span> <span class=\"kw1\">in<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp;wmiface maximize <span class=\"re1\">$winCur<\/span> <span class=\"nu0\">0<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">;;<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp;wmiface maximize <span class=\"re1\">$winCur<\/span> <span class=\"nu0\">1<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">;;<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp;wmiface maximize <span class=\"re1\">$winCur<\/span> <span class=\"nu0\">0<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">;;<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"nu0\">3<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp;wmiface maximize <span class=\"re1\">$winCur<\/span> <span class=\"nu0\">1<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">;;<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"kw1\">esac<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"kw1\">fi<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"co0\">#remove old configuration<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<span class=\"kw2\">rm<\/span> <span class=\"re1\">$TEMPFILE<\/span><br \/>\n&nbsp; &nbsp; &nbsp;<br \/>\n<span class=\"kw1\">else<\/span> <span class=\"co0\"># show keyboard <\/span><br \/>\n<br \/>\n<span class=\"co0\">####################################################<\/span><br \/>\n<span class=\"co0\">#get resolution of desktop<\/span><br \/>\n<span class=\"kw1\">set<\/span> <span class=\"sy0\">`<\/span>xrandr <span class=\"re5\">-q<\/span><span class=\"sy0\">|<\/span><span class=\"kw2\">sed<\/span> <span class=\"re5\">-n<\/span> <span class=\"st_h\">'s\/.*current[ ]\\([0-9]*\\) x \\([0-9]*\\),.*\/\\1 \\2\/p'<\/span><span class=\"sy0\">`<\/span><br \/>\n<span class=\"re2\">yreso<\/span>=<span class=\"re4\">$2<\/span><br \/>\n<span class=\"kw3\">echo<\/span> Yreso <span class=\"re1\">$yreso<\/span><br \/>\n<br \/>\n<span class=\"co0\">###################################################<\/span><br \/>\n<span class=\"co0\">#get information about active window<\/span><br \/>\n<span class=\"co0\">#get pointer of active window<\/span><br \/>\n<span class=\"re2\">winCur<\/span>=$<span class=\"br0\">&#40;<\/span>wmiface activeWindow<span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"kw3\">echo<\/span> <span class=\"re1\">$winCur<\/span><br \/>\n<br \/>\n<span class=\"co0\">#get maximized status<\/span><br \/>\n<span class=\"co0\">#0 for not maximized,<\/span><br \/>\n<span class=\"co0\">#1 for maximized horizontally,<\/span><br \/>\n<span class=\"co0\">#2 for maximized vertically or<\/span><br \/>\n<span class=\"co0\">#3 for fully maximized.<\/span><br \/>\n<span class=\"re2\">maximizedCur<\/span>=$<span class=\"br0\">&#40;<\/span>wmiface windowMaximized <span class=\"re1\">$winCur<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\nwmiface maximize <span class=\"re1\">$winCur<\/span> <span class=\"nu0\">1<\/span> <span class=\"nu0\">0<\/span><br \/>\n<br \/>\n<span class=\"kw1\">set<\/span> <span class=\"sy0\">`<\/span>wmiface frameSize <span class=\"re1\">$winCur<\/span> <span class=\"sy0\">|<\/span> <span class=\"kw2\">tr<\/span> <span class=\"st_h\">'x'<\/span> <span class=\"st_h\">' '<\/span><span class=\"sy0\">`<\/span><br \/>\n<br \/>\n<span class=\"re2\">sizeXcur<\/span>=<span class=\"re4\">$1<\/span><br \/>\n<span class=\"re2\">sizeYcur<\/span>=<span class=\"re4\">$2<\/span><br \/>\n<span class=\"kw3\">echo<\/span> SIZECUR <span class=\"re1\">$sizeXcur<\/span> <span class=\"re1\">$sizeYcur<\/span><br \/>\n<br \/>\n<br \/>\n<span class=\"kw1\">set<\/span> <span class=\"sy0\">`<\/span>wmiface framePosition <span class=\"re1\">$winCur<\/span> <span class=\"sy0\">|<\/span> <span class=\"kw2\">tr<\/span> <span class=\"st_h\">'+'<\/span> <span class=\"st_h\">' '<\/span><span class=\"sy0\">`<\/span><br \/>\n<br \/>\n<span class=\"re2\">xCur<\/span>=<span class=\"re4\">$1<\/span><br \/>\n<span class=\"re2\">yCur<\/span>=<span class=\"re4\">$2<\/span><br \/>\n<span class=\"kw3\">echo<\/span> PosCur <span class=\"re1\">$xCur<\/span> <span class=\"re1\">$yCur<\/span><br \/>\n<br \/>\n<span class=\"co0\">#store setting of current window in tempfile<\/span><br \/>\n<span class=\"kw3\">echo<\/span> <span class=\"re1\">$maximizedCur<\/span> <span class=\"re1\">$sizeXcur<\/span> <span class=\"re1\">$sizeYcur<\/span> <span class=\"re1\">$xCur<\/span> <span class=\"re1\">$yCur<\/span> <span class=\"re1\">$winCur<\/span> <span class=\"sy0\">&gt;<\/span><span class=\"re1\">$TEMPFILE<\/span><br \/>\n<br \/>\n<span class=\"re2\">yCur<\/span>=<span class=\"nu0\">0<\/span><br \/>\n<br \/>\n<span class=\"co0\">###########################<\/span><br \/>\n<span class=\"co0\">#handle onscreen keyboard<\/span><br \/>\n<span class=\"kw3\">eval<\/span> <span class=\"re1\">$ONSCREENKEYBOARDAPP<\/span> <span class=\"sy0\">&amp;<\/span><br \/>\n<span class=\"co0\">#wait for process start and &nbsp;get windowid<\/span><br \/>\n<span class=\"re2\">window<\/span>=$<span class=\"br0\">&#40;<\/span>wmiface findNormalWindows <span class=\"st0\">&quot;&quot;<\/span> <span class=\"re1\">$ONSCREENKEYBOARDAPP<\/span> <span class=\"st0\">&quot;&quot;<\/span> <span class=\"st0\">&quot;&quot;<\/span> <span class=\"nu0\">0<\/span> <span class=\"kw2\">false<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"kw1\">while<\/span> <span class=\"br0\">&#91;<\/span><span class=\"br0\">&#91;<\/span> <span class=\"re1\">$window<\/span> <span class=\"re5\">-eq<\/span> <span class=\"st0\">&quot;&quot;<\/span> <span class=\"br0\">&#93;<\/span><span class=\"br0\">&#93;<\/span><br \/>\n<span class=\"kw1\">do<\/span><br \/>\n<span class=\"re2\">window<\/span>=$<span class=\"br0\">&#40;<\/span>wmiface findNormalWindows <span class=\"st0\">&quot;&quot;<\/span> <span class=\"re1\">$ONSCREENKEYBOARDAPP<\/span> <span class=\"st0\">&quot;&quot;<\/span> <span class=\"st0\">&quot;&quot;<\/span> <span class=\"nu0\">0<\/span> <span class=\"kw2\">false<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"kw1\">done<\/span><br \/>\n<br \/>\n<br \/>\n<span class=\"kw3\">echo<\/span> WindowID <span class=\"re1\">$window<\/span><br \/>\n<br \/>\nwmiface maximize <span class=\"re1\">$window<\/span> <span class=\"nu0\">1<\/span> <span class=\"nu0\">0<\/span><br \/>\n<br \/>\n<span class=\"kw1\">set<\/span> <span class=\"sy0\">`<\/span>wmiface frameSize <span class=\"re1\">$window<\/span> <span class=\"sy0\">|<\/span> <span class=\"kw2\">tr<\/span> <span class=\"st_h\">'x'<\/span> <span class=\"st_h\">' '<\/span><span class=\"sy0\">`<\/span><br \/>\n<br \/>\n<span class=\"re2\">sizeX<\/span>=<span class=\"re4\">$1<\/span><br \/>\n<span class=\"re2\">sizeY<\/span>=<span class=\"re4\">$2<\/span><br \/>\n<span class=\"re2\">sizeY<\/span>=$<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>sizeY-ONSCREENKEYBOARDHEIGHTSHRINKOFFSET<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n<span class=\"kw3\">echo<\/span> SIZE <span class=\"re1\">$sizeX<\/span> <span class=\"re1\">$sizeY<\/span><br \/>\n<br \/>\n<span class=\"kw1\">set<\/span> <span class=\"sy0\">`<\/span>wmiface framePosition <span class=\"re1\">$window<\/span> <span class=\"sy0\">|<\/span> <span class=\"kw2\">tr<\/span> <span class=\"st_h\">'+'<\/span> <span class=\"st_h\">' '<\/span><span class=\"sy0\">`<\/span><br \/>\n<br \/>\n<span class=\"re2\">x<\/span>=<span class=\"re4\">$1<\/span><br \/>\n<span class=\"re2\">y<\/span>=<span class=\"re4\">$2<\/span><br \/>\n<br \/>\n<span class=\"kw3\">echo<\/span> Pos <span class=\"re1\">$x<\/span> <span class=\"re1\">$y<\/span><br \/>\n<br \/>\n<span class=\"re2\">y<\/span>=$<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span> yreso-sizeY <span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n<span class=\"co0\">#####################################<\/span><br \/>\n<span class=\"co0\">#place windows<\/span><br \/>\n<br \/>\n<span class=\"co0\">#KEYBOARD<\/span><br \/>\nwmiface setFrameGeometry <span class=\"re1\">$window<\/span> <span class=\"re1\">$x<\/span> <span class=\"re1\">$y<\/span> <span class=\"re1\">$sizeX<\/span> <span class=\"re1\">$sizeY<\/span><br \/>\n<br \/>\n<span class=\"co0\">#set current window to wanted position<\/span><br \/>\n<span class=\"re2\">sizeYcur<\/span>=$<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span> yreso-sizeY-toppanelheight - bottompanelheight <span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\nwmiface setFrameGeometry <span class=\"re1\">$winCur<\/span> <span class=\"re1\">$xCur<\/span> <span class=\"re1\">$yCur<\/span> <span class=\"re1\">$sizeXcur<\/span> <span class=\"re1\">$sizeYcur<\/span><br \/>\n<br \/>\n<span class=\"kw1\">fi<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>To get a well looking result you need to change the configuration at the top of the script. It is important that you set the correct height of your bottom and top panel of you desktop. You could get this information by right click on panel and choosing properties. more over you could define how many pixels are <span>subtracted<\/span> from the start height of your onscreen keyboard application (ONSCREENKEYBOARDHEIGHTSHRINKOFFSET). Moreover you could choose another onscreen keyboard application by replacing <span><span>onboard<\/span><\/span> in\u00a0ONSCREENKEYBOARDAPP.<\/p>\n<p>This script stores the current appearance settings of the current visible application and after the closing of the onscreen keyboard it recovers the old settings.<\/p>\n<p>In general this script should work on all screens , \u00a0<span><span>linux<\/span><\/span> desktops and distributions \u00a0which are supported by <span><span>wmiface<\/span><\/span> (At least GNOME, KDE).<\/p>\n<p>I hope somebody like that script! Give it a try!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This guide is writte for my Acer 1825 but it should work on all linux devices which need a onscreen keyboard like onboard. I got the idea of building this script from Tom\/drnessie from the ubuntuforums.org (http:\/\/ubuntuforums.org\/showthread.php?t=1486671&amp;page=17), because he tried to make a improvement of my onscreen keyboard show\/hide script from this post. http:\/\/www.ceh-photo.de\/blog\/?p=200 He [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,46],"tags":[56,63,64,40,72,71,58,57,70,65],"class_list":["post-336","post","type-post","status-publish","format-standard","hentry","category-it","category-linux-it-2","tag-acer-1825","tag-gnome","tag-kde","tag-linux","tag-onboard","tag-onscreen-keyboard","tag-touchscreen","tag-ubuntu","tag-wmctrl","tag-wmiface"],"_links":{"self":[{"href":"https:\/\/www.ceh-photo.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/336","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ceh-photo.de\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ceh-photo.de\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ceh-photo.de\/blog\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ceh-photo.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=336"}],"version-history":[{"count":8,"href":"https:\/\/www.ceh-photo.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/336\/revisions"}],"predecessor-version":[{"id":345,"href":"https:\/\/www.ceh-photo.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/336\/revisions\/345"}],"wp:attachment":[{"href":"https:\/\/www.ceh-photo.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=336"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ceh-photo.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=336"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ceh-photo.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=336"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}