diff options
35 files changed, 2116 insertions, 0 deletions
diff --git a/RaspberryPITVHDMI b/RaspberryPITVHDMI new file mode 100644 index 0000000..0bd659a --- /dev/null +++ b/RaspberryPITVHDMI @@ -0,0 +1,1606 @@ +<!DOCTYPE html> +<html class="desktop-view not-mobile-device text-size-normal anon no-touch discourse-no-touch" lang="en"><head> +<meta http-equiv="content-type" content="text/html; charset=UTF-8"> +<meta charset="utf-8"> +<title>Controlling Raspberry PI with TV Remote, using HDMI CEC - Tips, Tricks and Tutorials / Raspberry Pi - Ubuntu MATE Community</title> +<meta name="description" content="Hello everyone. + +Description: I wrote a script that connects to HDMI CEC ( cec-client needed ) and listens for TV Remote key presses. Based on the keys pressed / released (or auto-released; holding down certain keys for&hellip;"> +<meta name="discourse_theme_ids" content="7"> +<meta name="discourse_current_homepage" content="categories"> +<meta name="generator" content="Discourse 2.3.1 - https://github.com/discourse/discourse version 5b91182985d70dea991ef82eeae120cac0bef935"> +<link rel="icon" type="image/png" href="https://ubuntu-mate.community/uploads/default/optimized/1X/e75ff172b5be659c48d264a448a3707f524f48f9_2_32x32.ico"> +<link rel="apple-touch-icon" type="image/png" href="https://ubuntu-mate.community/uploads/default/optimized/2X/1/14ea399f69eb3d52e32df958dbc6b6ed0d691eea_2_180x180.png"> +<meta name="theme-color" content="#87a556"> +<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, user-scalable=yes, viewport-fit=cover"> +<link rel="canonical" href="https://ubuntu-mate.community/t/controlling-raspberry-pi-with-tv-remote-using-hdmi-cec/4250"> +<script type="application/ld+json">{"@context":"http://schema.org","@type":"WebSite","url":"https://ubuntu-mate.community","potentialAction":{"@type":"SearchAction","target":"https://ubuntu-mate.community/search?q={search_term_string}","query-input":"required name=search_term_string"}}</script> +<link rel="search" type="application/opensearchdescription+xml" href="https://ubuntu-mate.community/opensearch.xml" title="Ubuntu MATE Community Search"> +<meta name="fragment" content="!"> +<link rel="preload" href="RaspberryPITVHDMI_archivos/en-a2096d7903ea9680a0ddd80943fb0530045088c839730119480af4c3d8.js" as="script"> +<script src="RaspberryPITVHDMI_archivos/en-a2096d7903ea9680a0ddd80943fb0530045088c839730119480af4c3d8.js"></script> +<link rel="preload" href="RaspberryPITVHDMI_archivos/ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df.js" as="script"> +<script src="RaspberryPITVHDMI_archivos/ember_jquery-0ae86c6a7527a99c2b9b8a11521273bd9cb4f7d41bc546df.js"></script> +<link rel="preload" href="RaspberryPITVHDMI_archivos/preload-store-081120a9f8cb0871483b66a95e534ce8e81f97d19c8cef9.js" as="script"> +<script src="RaspberryPITVHDMI_archivos/preload-store-081120a9f8cb0871483b66a95e534ce8e81f97d19c8cef9.js"></script> +<link rel="preload" href="RaspberryPITVHDMI_archivos/vendor-25f91d66eba869fbd399d751711e74544b6d60bf034a5350b61c6c.js" as="script"> +<script src="RaspberryPITVHDMI_archivos/vendor-25f91d66eba869fbd399d751711e74544b6d60bf034a5350b61c6c.js"></script> +<link rel="preload" href="RaspberryPITVHDMI_archivos/pretty-text-bundle-b33ff981ecc4ae5cc254a569e9bde34f68337b177e.js" as="script"> +<script src="RaspberryPITVHDMI_archivos/pretty-text-bundle-b33ff981ecc4ae5cc254a569e9bde34f68337b177e.js"></script> +<link rel="preload" href="RaspberryPITVHDMI_archivos/application-e820091e1a171524cdf20a1a5bea75eb18455293e45dc37f4.js" as="script"> +<script src="RaspberryPITVHDMI_archivos/application-e820091e1a171524cdf20a1a5bea75eb18455293e45dc37f4.js"></script> +<link rel="preload" href="RaspberryPITVHDMI_archivos/plugin-d3f2aabe1f4c66e75c9ad0d17efb33e5633e91ae4b556c155058c9.js" as="script"> +<script src="RaspberryPITVHDMI_archivos/plugin-d3f2aabe1f4c66e75c9ad0d17efb33e5633e91ae4b556c155058c9.js"></script> +<link rel="preload" href="RaspberryPITVHDMI_archivos/plugin-third-party-01ba4719c80b6fe911b091a7c05124b64eeece964e.js" as="script"> +<script src="RaspberryPITVHDMI_archivos/plugin-third-party-01ba4719c80b6fe911b091a7c05124b64eeece964e.js"></script> +<link href="RaspberryPITVHDMI_archivos/css.css" rel="stylesheet" type="text/css"> +<link rel="manifest" href="https://ubuntu-mate.community/manifest.webmanifest" crossorigin="use-credentials"> + +<link href="RaspberryPITVHDMI_archivos/desktop_1_581866bb4050fdf1451a3946f2c02310c650f57b.css" media="all" rel="stylesheet" data-target="desktop" data-theme-id="7"> +<link href="RaspberryPITVHDMI_archivos/desktop_theme_7_c7a073874a27ebdc0acb6535652305a0edb8a061.css" media="all" rel="stylesheet" data-target="desktop_theme" data-theme-id="7"> +<link rel="alternate" type="application/rss+xml" title="RSS feed of 'Controlling Raspberry PI with TV Remote, using HDMI CEC'" href="https://ubuntu-mate.community/t/controlling-raspberry-pi-with-tv-remote-using-hdmi-cec/4250.rss"> +<meta property="og:site_name" content="Ubuntu MATE Community"> +<meta name="twitter:card" content="summary"> +<meta name="twitter:image" content="https://ubuntu-mate.community/uploads/default/optimized/2X/e/e00e46bb720d634bb6a2ba84cad84c05078fd391_2_401x500.png"> +<meta property="og:image" content="https://ubuntu-mate.community/uploads/default/optimized/2X/e/e00e46bb720d634bb6a2ba84cad84c05078fd391_2_401x500.png"> +<meta property="og:url" content="https://ubuntu-mate.community/t/controlling-raspberry-pi-with-tv-remote-using-hdmi-cec/4250"> +<meta name="twitter:url" content="https://ubuntu-mate.community/t/controlling-raspberry-pi-with-tv-remote-using-hdmi-cec/4250"> +<meta property="og:title" content="Controlling Raspberry PI with TV Remote, using HDMI CEC"> +<meta name="twitter:title" content="Controlling Raspberry PI with TV Remote, using HDMI CEC"> +<meta property="og:description" content="Hello everyone. Description: I wrote a script that connects to HDMI CEC ( cec-client needed ) and listens for TV Remote key presses. Based on the keys pressed / released (or auto-released; holding down certain keys for too long makes them auto-release) different actions are executed. Some examples: write letters and numbers using 0-9 keys (simulating 3x4 keypad phones - key "2" switches between a-b-c-2, key 9 switches between w-x-y-z-9) ( xdotool needed ) move mouse cursor using up/down/left..."> +<meta name="twitter:description" content="Hello everyone. Description: I wrote a script that connects to HDMI CEC ( cec-client needed ) and listens for TV Remote key presses. Based on the keys pressed / released (or auto-released; holding down certain keys for too long makes them auto-release) different actions are executed. Some examples: write letters and numbers using 0-9 keys (simulating 3x4 keypad phones - key "2" switches between a-b-c-2, key 9 switches between w-x-y-z-9) ( xdotool needed ) move mouse cursor using up/down/left..."> +<meta name="twitter:label1" value="Reading time"> +<meta name="twitter:data1" value="6 mins 🕑"> +<meta name="twitter:label2" value="Likes"> +<meta name="twitter:data2" value="3 ❤"> +<meta property="article:published_time" content="2016-08-11T01:40:52+00:00"> +<meta property="og:ignore_canonical" content="true"> +<script type="application/ld+json">{"@context":"http://schema.org","@type":"QAPage","name":"Controlling Raspberry PI with TV Remote, using HDMI CEC","mainEntity":{"@type":"Question","name":"Controlling Raspberry PI with TV Remote, using HDMI CEC","text":"Hello everyone. \nDescription: \nI wrote a script that connects to HDMI CEC ( cec-client needed ) and listens for TV Remote key presses. Based on the keys pressed / released (or auto-released; holding down certain keys for too long makes them auto-release) different actions are executed. Some examples…","upvoteCount":3,"answerCount":0,"dateCreated":"2016-03-10T10:14:41.253Z","author":{"@type":"Person","name":"Simon Murgelj"}}}</script> +<meta id="data-discourse-setup" data-base-url="https://ubuntu-mate.community" data-base-uri="" data-environment="production" data-letter-avatar-version="5_7a34611334577356ea98a4f98ad61bf8" data-markdown-it-url="/assets/markdown-it-bundle-f79d9db8b5c7812b862fd0c3379d87d67d6b4ce5cda50a66cb1a50482793ce50.js" data-service-worker-url="service-worker-83e47e9f07bb77a5c8146b30ee8c7761c0ce036d70528cd57da81981879b70f7.js" data-default-locale="en" data-asset-version="19904fa7ecf0ca6bfb3659c05e68538b" data-disable-custom-css="false" data-highlight-js-path="/highlight-js/ubuntu-mate.community/bd34dee19ab76bc4f22cba22a34edbdab790a807.js" data-svg-sprite-path="/svg-sprite/ubuntu-mate.community/svg-7-a49ad7255a63371eebe293cc86311573fb927cfb.js"> +<script src="RaspberryPITVHDMI_archivos/svg-7-a49ad7255a63371eebe293cc86311573fb927cfb.js"></script><style id="image-sizing-hack">#reply-control .d-editor-preview img:not(.thumbnail), .cooked img:not(.thumbnail) {max-width:690px;max-height:500px;}</style><script src="RaspberryPITVHDMI_archivos/jquery.js"></script><script src="RaspberryPITVHDMI_archivos/bd34dee19ab76bc4f22cba22a34edbdab790a807.js"></script></head> +<body class="archetype-regular category-tips-tricks-and-tutorials-raspberry-pi-tips docked"> + +<div id="top-navbar"> +<div id="top-navbar-links" class="wrap"> +<a href="https://ubuntu-mate.org/" title="Ubuntu MATE Website">Website</a> +<a href="https://ubuntu-mate.org/download" title="Download Ubuntu MATE">Download</a> +<a href="https://bugs.launchpad.net/ubuntu-mate" title="Report bugs via Launchpad">Bug Tracker</a> +<a href="https://ubuntu-mate.org/irc/" title="Chat with other Ubuntu MATE users">IRC</a> +<a href="https://ubuntu-mate.boutique/" title="Buy mechandise and other branded items">Shop</a> +<a href="https://ubuntu-mate.community/wiki" title="View the index of wiki topics and guides">Wiki</a> +<a href="https://ubuntu-mate.org/donate/" title="Contribute back and support the project financially">Donate</a> +</div> +</div> +<section id="main" class="ember-application"> +<div class="ember-view" id="ember4"><span id="ember5" class="ember-view"><!----></span> +<div id="ember6" class="ember-view"><header class="d-header clearfix" style=""><div class="wrap"><div class="contents clearfix"> + <div class="title"><a href="https://ubuntu-mate.community/" data-auto-route="true"><img src="RaspberryPITVHDMI_archivos/0c41b826d1c81f42e55160501605d3c96ded0ae1.png" alt="Ubuntu MATE Community" id="site-logo" class="logo-small" width="36"></a></div> + <div class="extra-info-wrapper"><div class="extra-info two-rows"><div class="title-wrapper"><h1><div class="topic-statuses"></div><a class="widget-link topic-link" href="https://ubuntu-mate.community/t/controlling-raspberry-pi-with-tv-remote-using-hdmi-cec/4250" title="" data-topic-id="4250"><span>Controlling Raspberry PI with TV Remote, using HDMI CEC</span></a></h1><div class="categories-wrapper"><a class="badge-wrapper bullet" href="https://ubuntu-mate.community/c/tips-tricks-and-tutorials"><span class="badge-category-bg" style="background-color: #A6748F;"></span><span data-drop-close="true" class="badge-category clear-badge" title="If you have a tutorial, how to or other useful tips to share about Ubuntu MATE, then fit them in to one of these subcategories:"><span class="category-name">Tips, Tricks and Tutorials</span></span></a><a class="badge-wrapper bullet" href="https://ubuntu-mate.community/c/tips-tricks-and-tutorials/raspberry-pi-tips"><span class="badge-category-parent-bg" style="background-color: #A6748F;"></span><span class="badge-category-bg" style="background-color: #C6043C;"></span><span data-drop-close="true" class="badge-category clear-badge" title="Topics sharing tips and tricks specifically for the Raspberry Pi port."><span class="category-name">Raspberry Pi</span></span></a></div></div></div></div> + <div class="panel clearfix"><span class="header-buttons"><button class="widget-button btn btn-primary btn-small login-button btn-icon-text"><svg class="fa d-icon d-icon-user svg-icon svg-node" aria-hidden="true"><use xlink:href="#user"></use></svg><span class="d-button-label">Log In</span></button></span><ul role="navigation" class="icons d-header-icons"><li class="header-dropdown-toggle"><a href="https://ubuntu-mate.community/search" data-auto-route="true" title="search topics, posts, users, or categories" aria-label="search topics, posts, users, or categories" id="search-button" class="icon btn-flat"><svg class="fa d-icon d-icon-search svg-icon svg-node" aria-hidden="true"><use xlink:href="#search"></use></svg></a></li><li class="header-dropdown-toggle"><a href="" data-auto-route="true" title="go to another topic list or category" aria-label="go to another topic list or category" id="toggle-hamburger-menu" class="icon btn-flat"><svg class="fa d-icon d-icon-bars svg-icon svg-node" aria-hidden="true"><use xlink:href="#bars"></use></svg></a></li></ul></div> + </div></div></header></div> + +<span id="ember7" class="ember-view"><!----></span> + +<div id="main-outlet" class="wrap"> + <span id="ember8" class="ember-view"><!----></span> + <div class="container"> + <div id="ember9" class="ember-view"></div> + <div id="ember10" class="controls ember-view"><!----></div> + <div id="ember11" class="ember-view"></div> + <div id="ember12" class="hidden create-topics-notice ember-view"><!----></div> + <span id="ember13" class="ember-view"><!----></span> + </div> + <div id="ember14" class="regular category-tips-tricks-and-tutorials-raspberry-pi-tips ember-view"> <div id="ember15" class="ember-view"></div> + <div class="container"> + <div id="ember16" class="ember-view"><!----></div> + </div> + +<!----> + <span id="ember17" class="ember-view"><!----></span> + +<div id="topic-title" class="ember-view"><div class="container"> + <div class="title-wrapper"> + <h1 data-topic-id="4250"> + <a> + <span class="private-message-glyph"><svg class="fa d-icon d-icon-envelope svg-icon svg-string" xmlns="http://www.w3.org/2000/svg"><use xlink:href="#envelope"></use></svg></span> + </a> + + <div id="ember18" class="topic-statuses ember-view"></div> + <a href="https://ubuntu-mate.community/t/controlling-raspberry-pi-with-tv-remote-using-hdmi-cec/4250" class="fancy-title" data-ember-action="" data-ember-action-19="19"> + Controlling Raspberry PI with TV Remote, using HDMI CEC + </a> + +<!----> </h1> + + <div id="ember20" class="topic-category ember-view"> <a class="badge-wrapper bullet" href="https://ubuntu-mate.community/c/tips-tricks-and-tutorials"><span class="badge-category-bg" style="background-color: #A6748F;"></span><span data-drop-close="true" class="badge-category clear-badge" title="If you have a tutorial, how to or other useful tips to share about Ubuntu MATE, then fit them in to one of these subcategories:"><span class="category-name">Tips, Tricks and Tutorials</span></span></a> + <a class="badge-wrapper bullet" href="https://ubuntu-mate.community/c/tips-tricks-and-tutorials/raspberry-pi-tips"><span class="badge-category-bg" style="background-color: #C6043C;"></span><span data-drop-close="true" class="badge-category clear-badge" title="Topics sharing tips and tricks specifically for the Raspberry Pi port."><span class="category-name">Raspberry Pi</span></span></a> +<div class="topic-header-extra"> + <div class="list-tags"> + <!----> + </div> + <!----> +</div> + +<span id="ember21" class="ember-view"><!----></span> +</div> + + </div> + <span id="ember22" class="ember-view"><!----></span> +</div> +</div> + + <div class="container posts"> + <div class="selected-posts hidden"> + <p><span id="ember23" class="ember-view">You have selected <b>0</b> posts.</span></p> + + <p><a class="select-all" href="" data-ember-action="" data-ember-action-24="24">select all</a></p> + +<!----> +<!----> +<!----> +<!----> +<!----> +<p class="cancel"><a href="" data-ember-action="" data-ember-action-25="25">cancel selecting</a></p> + + </div> + +<div id="ember26" class="ember-view"><!----> + <div id="ember66" class="ember-view"><div class="timeline-container" style="top: 90px"><div class="topic-timeline"><div class="timeline-controls"></div><div class="timeline-scrollarea-wrapper"><div class="timeline-date-wrapper"><a class="widget-link start-date" title="Mar 2016"><span class="d-label">Mar 2016</span></a></div><div style="height: 300px" class="timeline-scrollarea"><div style="height: 210.6779814401748px" class="timeline-padding"></div><div style="height: 50px" class="timeline-scroller"><div class="timeline-handle"></div><div class="timeline-scroller-content"><div class="timeline-replies">4 / 4</div><div class="timeline-ago">Apr 2018</div></div></div><div style="height: 39.32201855982521px" class="timeline-padding"></div></div><div class="timeline-date-wrapper"><a class="widget-link now-date" title="Apr 2018"><span class="d-label">Apr 2018</span></a></div></div><div class="timeline-footer-controls"></div></div></div></div> + +</div> + <div class="row"> + <section class="topic-area" id="topic" data-topic-id="4250"> + + <div class="posts-wrapper"> + <div id="ember27" class="loading-container ember-view"> +</div> + + <span id="ember28" class="ember-view"><!----></span> + + <div id="ember29" class="ember-view"><div class="post-stream"><div class="topic-post clearfix topic-owner wiki regular"><article id="post_1" data-post-id="15031" data-topic-id="4250" data-user-id="2055" class="boxed onscreen-post" style=""><a href="" class="tabLoc"></a><div class="row"><div class="topic-avatar"><a class="trigger-user-card main-avatar" href="https://ubuntu-mate.community/u/GizmoXomziG" data-user-card="GizmoXomziG"><img alt="" src="RaspberryPITVHDMI_archivos/2566_2_002.jpg" title="Simon Murgelj" class="avatar" width="45" height="45"></a><div class="poster-avatar-extra"></div></div><div class="topic-body clearfix"><div class="topic-meta-data"><div class="names trigger-user-card"><span class="first username"><a href="https://ubuntu-mate.community/u/GizmoXomziG" data-user-card="GizmoXomziG">GizmoXomziG</a></span></div><div class="post-infos"><div class="post-info edits"><a class="wiki" title="post last edited on 10 Aug 2016 21:40" href="#">3 <svg class="fa d-icon d-icon-pencil-square-o svg-icon svg-node" aria-hidden="true"><use xlink:href="#far-edit"></use></svg></a></div><div class="post-info post-date"><a class="post-date last-wiki-edit" href="https://ubuntu-mate.community/t/controlling-raspberry-pi-with-tv-remote-using-hdmi-cec/4250" data-share-url="/t/controlling-raspberry-pi-with-tv-remote-using-hdmi-cec/4250" data-post-number="1"><span title="10 Aug 2016 21:40" data-time="1470879652037" data-format="tiny" class="relative-date">Aug '16</span></a></div><div class="read-state read" title="Post is unread"><svg class="fa d-icon d-icon-circle svg-icon svg-node" aria-hidden="true"><use xlink:href="#circle"></use></svg></div></div></div><div class="regular contents"><div class="cooked"><p>Hello everyone.</p> +<p><strong>Description:</strong><br> +I wrote a script that connects to HDMI CEC ( cec-client needed ) and +listens for TV Remote key presses. Based on the keys pressed / released +(or auto-released; holding down certain keys for too long makes them +auto-release) different actions are executed. Some examples:</p> +<ul> +<li>write letters and numbers using 0-9 keys (simulating 3x4 keypad +phones - key "2" switches between a-b-c-2, key 9 switches between +w-x-y-z-9) ( xdotool needed )</li> +<li>move mouse cursor using up/down/left/right (the longer you hold the +key down, the faster it goes) and click (enter = left click; channels +list = right click) ( xdotool needed )</li> +<li>opening web sites in chomium (red key for YouTube, green for Google, blue for incognito window)</li> +</ul> +<p>If you want to use firefox instead of chromium, replace "chromium" with "firefox" in the script below.<br> +Alternatively, you can just install chromium:</p> +<pre><code class="hljs">sudo apt-get install chromium-browser +</code></pre> +<p>See all the available keys below:</p> +<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://ubuntu-mate.community/uploads/default/original/2X/e/e00e46bb720d634bb6a2ba84cad84c05078fd391.png" data-download-href="https://ubuntu-mate.community/uploads/default/e00e46bb720d634bb6a2ba84cad84c05078fd391" title="TVRemoteCECpng.png"><img src="RaspberryPITVHDMI_archivos/e00e46bb720d634bb6a2ba84cad84c05078fd391_2_401x500.png" class="d-lazyload" srcset="https://ubuntu-mate.community/uploads/default/optimized/2X/e/e00e46bb720d634bb6a2ba84cad84c05078fd391_2_401x500.png, https://ubuntu-mate.community/uploads/default/optimized/2X/e/e00e46bb720d634bb6a2ba84cad84c05078fd391_2_601x750.png 1.5x, https://ubuntu-mate.community/uploads/default/optimized/2X/e/e00e46bb720d634bb6a2ba84cad84c05078fd391_2_802x1000.png 2x" width="401" height="500"><div class="meta"> +<svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use xlink:href="#far-image"></use></svg><span class="filename">TVRemoteCECpng.png</span><span class="informations">828×1030 101 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use xlink:href="#discourse-expand"></use></svg> +</div></a></div><p></p> +<p>These are the keys supported by my TV Remote. You can modify the script for your TV Remote, see Modification below.</p> +<p><strong>Installation:</strong><br> +First you need to install cec-client and xdotool; using terminal:</p> +<pre><code class="hljs">sudo apt-get install cec-client xdotool +</code></pre> +<p>Test if you can receive TV Remote button presses with cec-client; using terminal:</p> +<pre><code class="hljs">cec-client +</code></pre> +<p>You should see some diagnostic messages. Press numeric keys (as they +are most likely to be supported) on your TV Remote. Watch out for new +lines, especially of this form:</p> +<pre><code class="hljs markdown">something something <span class="hljs-strong">**key pressed: 8**</span> something something +</code></pre> +<p>If you see this kind of messages, then this should work for you.<br> +If not, make sure you've got CEC enabled on your TV (see this <a href="http://kodi.wiki/view/CEC#Trade_names" rel="nofollow noopener">WIKI <span class="badge badge-notification clicks" title="99 clicks">99</span></a> for more info).<br> +For my TV, pressing the Source button a couple of times helped (so it +kind-of flips trough all the sources and circles back to the Raspberry +Pi, detects CEC and connects to it).</p> +<p>So, on to the script / installation:<br> +Create the file cecremote.sh and mark it as executable; using terminal:</p> +<pre><code class="hljs css"><span class="hljs-selector-tag">touch</span> <span class="hljs-selector-tag">cecremote</span><span class="hljs-selector-class">.sh</span> +<span class="hljs-selector-tag">chmod</span> +<span class="hljs-selector-tag">x</span> <span class="hljs-selector-tag">cecremote</span><span class="hljs-selector-class">.sh</span> +</code></pre> +<p>Then open it; using terminal:</p> +<pre><code class="hljs css"><span class="hljs-selector-tag">nano</span> <span class="hljs-selector-tag">cecremote</span><span class="hljs-selector-class">.sh</span> +</code></pre> +<p>Copy - paste this in the file:</p> +<pre><code class="hljs bash"><span class="hljs-meta">#!/bin/bash</span> +<span class="hljs-keyword">function</span> keychar { + parin1=<span class="hljs-variable">$1</span> <span class="hljs-comment">#first param; abc1</span> + parin2=<span class="hljs-variable">$2</span> <span class="hljs-comment">#second param; 0=a, 1=b, 2=c, 3=1, 4=a, ...</span> + parin2=$((parin2)) <span class="hljs-comment">#convert to numeric</span> + parin1len=<span class="hljs-variable">${#parin1}</span> <span class="hljs-comment">#length of parin1</span> + parin2pos=$((parin2 % parin1len)) <span class="hljs-comment">#position mod</span> + char=<span class="hljs-variable">${parin1:parin2pos:1}</span> <span class="hljs-comment">#char key to simulate</span> + <span class="hljs-keyword">if</span> [ <span class="hljs-string">"<span class="hljs-variable">$parin2</span>"</span> -gt 0 ]; <span class="hljs-keyword">then</span> <span class="hljs-comment">#if same key pressed multiple times, delete previous char; write a, delete a write b, delete b write c, ...</span> + xdotool key <span class="hljs-string">"BackSpace"</span> + <span class="hljs-keyword">fi</span> + <span class="hljs-comment">#special cases for xdotool ( X Keysyms )</span> + <span class="hljs-keyword">if</span> [ <span class="hljs-string">"<span class="hljs-variable">$char</span>"</span> = <span class="hljs-string">" "</span> ]; <span class="hljs-keyword">then</span> char=<span class="hljs-string">"space"</span>; <span class="hljs-keyword">fi</span> + <span class="hljs-keyword">if</span> [ <span class="hljs-string">"<span class="hljs-variable">$char</span>"</span> = <span class="hljs-string">"."</span> ]; <span class="hljs-keyword">then</span> char=<span class="hljs-string">"period"</span>; <span class="hljs-keyword">fi</span> + <span class="hljs-keyword">if</span> [ <span class="hljs-string">"<span class="hljs-variable">$char</span>"</span> = <span class="hljs-string">"-"</span> ]; <span class="hljs-keyword">then</span> char=<span class="hljs-string">"minus"</span>; <span class="hljs-keyword">fi</span> + xdotool key <span class="hljs-variable">$char</span> +} +datlastkey=$(date +%s%N) +strlastkey=<span class="hljs-string">""</span> +intkeychar=0 +intmsbetweenkeys=2000 <span class="hljs-comment">#two presses of a key sooner that this makes it delete previous key and write the next one (a->b->c->1->a->...)</span> +intmousestartspeed=10 <span class="hljs-comment">#mouse starts moving at this speed (pixels per key press)</span> +intmouseacc=10 <span class="hljs-comment">#added to the mouse speed for each key press (while holding down key, more key presses are sent from the remote)</span> +intmousespeed=10 + +<span class="hljs-keyword">while</span> <span class="hljs-built_in">read</span> oneline +<span class="hljs-keyword">do</span> + keyline=$(<span class="hljs-built_in">echo</span> <span class="hljs-variable">$oneline</span> | grep <span class="hljs-string">" key "</span>) + <span class="hljs-comment">#echo $keyline --- debugAllLines</span> + <span class="hljs-keyword">if</span> [ -n <span class="hljs-string">"<span class="hljs-variable">$keyline</span>"</span> ]; <span class="hljs-keyword">then</span> + datnow=$(date +%s%N) + datdiff=$(((<span class="hljs-variable">$datnow</span> - <span class="hljs-variable">$datlastkey</span>) / 1000000)) <span class="hljs-comment">#bla bla key pressed: previous channel (123)</span> + strkey=$(grep -oP <span class="hljs-string">'(?<=sed: ).*?(?= \()'</span> <<< <span class="hljs-string">"<span class="hljs-variable">$keyline</span>"</span>) <span class="hljs-comment">#bla bla key pres-->sed: >>previous channel<< (<--123)</span> + strstat=$(grep -oP <span class="hljs-string">'(?<=key ).*?(?=:)'</span> <<< <span class="hljs-string">"<span class="hljs-variable">$keyline</span>"</span>) <span class="hljs-comment">#bla bla -->key >>pressed<<:<-- previous channel (123)</span> + strpressed=$(<span class="hljs-built_in">echo</span> <span class="hljs-variable">$strstat</span> | grep <span class="hljs-string">"pressed"</span>) + strreleased=$(<span class="hljs-built_in">echo</span> <span class="hljs-variable">$strstat</span> | grep <span class="hljs-string">"released"</span>) + <span class="hljs-keyword">if</span> [ -n <span class="hljs-string">"<span class="hljs-variable">$strpressed</span>"</span> ]; <span class="hljs-keyword">then</span> + <span class="hljs-comment">#echo $keyline --- debug</span> + <span class="hljs-keyword">if</span> [ <span class="hljs-string">"<span class="hljs-variable">$strkey</span>"</span> = <span class="hljs-string">"<span class="hljs-variable">$strlastkey</span>"</span> ] && [ <span class="hljs-string">"<span class="hljs-variable">$datdiff</span>"</span> -lt <span class="hljs-string">"<span class="hljs-variable">$intmsbetweenkeys</span>"</span> ]; <span class="hljs-keyword">then</span> + intkeychar=$((intkeychar + 1)) <span class="hljs-comment">#same key pressed for a different char</span> + <span class="hljs-keyword">else</span> + intkeychar=0 <span class="hljs-comment">#different key / too far apart</span> + <span class="hljs-keyword">fi</span> + datlastkey=<span class="hljs-variable">$datnow</span> + strlastkey=<span class="hljs-variable">$strkey</span> + <span class="hljs-keyword">case</span> <span class="hljs-string">"<span class="hljs-variable">$strkey</span>"</span> <span class="hljs-keyword">in</span> + <span class="hljs-string">"1"</span>) + xdotool key <span class="hljs-string">"BackSpace"</span> + ;; + <span class="hljs-string">"2"</span>) + keychar <span class="hljs-string">"abc2"</span> intkeychar + ;; + <span class="hljs-string">"3"</span>) + keychar <span class="hljs-string">"def3"</span> intkeychar + ;; + <span class="hljs-string">"4"</span>) + keychar <span class="hljs-string">"ghi4"</span> intkeychar + ;; + <span class="hljs-string">"5"</span>) + keychar <span class="hljs-string">"jkl5"</span> intkeychar + ;; + <span class="hljs-string">"6"</span>) + keychar <span class="hljs-string">"mno6"</span> intkeychar + ;; + <span class="hljs-string">"7"</span>) + keychar <span class="hljs-string">"pqrs7"</span> intkeychar + ;; + <span class="hljs-string">"8"</span>) + keychar <span class="hljs-string">"tuv8"</span> intkeychar + ;; + <span class="hljs-string">"9"</span>) + keychar <span class="hljs-string">"wxyz9"</span> intkeychar + ;; + <span class="hljs-string">"0"</span>) + keychar <span class="hljs-string">" 0.-"</span> intkeychar + ;; + <span class="hljs-string">"previous channel"</span>) + xdotool key <span class="hljs-string">"Return"</span> <span class="hljs-comment">#Enter</span> + ;; + <span class="hljs-string">"channel up"</span>) + xdotool click 4 <span class="hljs-comment">#mouse scroll up</span> + ;; + <span class="hljs-string">"channel down"</span>) + xdotool click 5 <span class="hljs-comment">#mouse scroll down</span> + ;; + <span class="hljs-string">"channels list"</span>) + xdotool click 3 <span class="hljs-comment">#right mouse button click"</span> + ;; + <span class="hljs-string">"up"</span>) + intpixels=$((-1 * intmousespeed)) + xdotool mousemove_relative -- 0 <span class="hljs-variable">$intpixels</span> <span class="hljs-comment">#move mouse up</span> + intmousespeed=$((intmousespeed + intmouseacc)) <span class="hljs-comment">#speed up</span> + ;; + <span class="hljs-string">"down"</span>) + intpixels=$(( 1 * intmousespeed)) + xdotool mousemove_relative -- 0 <span class="hljs-variable">$intpixels</span> <span class="hljs-comment">#move mouse down</span> + intmousespeed=$((intmousespeed + intmouseacc)) <span class="hljs-comment">#speed up</span> + ;; + <span class="hljs-string">"left"</span>) + intpixels=$((-1 * intmousespeed)) + xdotool mousemove_relative -- <span class="hljs-variable">$intpixels</span> 0 <span class="hljs-comment">#move mouse left</span> + intmousespeed=$((intmousespeed + intmouseacc)) <span class="hljs-comment">#speed up</span> + ;; + <span class="hljs-string">"right"</span>) + intpixels=$(( 1 * intmousespeed)) + xdotool mousemove_relative -- <span class="hljs-variable">$intpixels</span> 0 <span class="hljs-comment">#move mouse right</span> + intmousespeed=$((intmousespeed + intmouseacc)) <span class="hljs-comment">#speed up</span> + ;; + <span class="hljs-string">"select"</span>) + xdotool click 1 <span class="hljs-comment">#left mouse button click</span> + ;; + <span class="hljs-string">"return"</span>) + xdotool key <span class="hljs-string">"Alt_L+Left"</span> <span class="hljs-comment">#WWW-Back</span> + ;; + <span class="hljs-string">"exit"</span>) |