yavdr-ansible/Manual.html

6948 lines
677 KiB
HTML

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<!-- 2018-06-02 Sa 20:04 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Ansible Playbooks for yaVDR 0.7</title>
<meta name="generator" content="Org mode" />
<meta name="author" content="Alexander Grothe &lt;seahawk1986@gmx.de&gt;" />
<style type="text/css">
<!--/*--><![CDATA[/*><!--*/
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #ccc;
box-shadow: 3px 3px 3px #eee;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: visible;
padding-top: 1.2em;
}
pre.src:before {
display: none;
position: absolute;
background-color: white;
top: -10px;
right: 10px;
padding: 3px;
border: 1px solid black;
}
pre.src:hover:before { display: inline;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'Javascript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { width: 90%; }
/*]]>*/-->
</style>
<link rel="stylesheet" type="text/css" href="http://www.pirilampo.org/styles/readtheorg/css/htmlize.css"/>
<link rel="stylesheet" type="text/css" href="http://www.pirilampo.org/styles/readtheorg/css/readtheorg.css"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<script type="text/javascript" src="http://www.pirilampo.org/styles/lib/js/jquery.stickytableheaders.min.js"></script>
<script type="text/javascript" src="http://www.pirilampo.org/styles/readtheorg/js/readtheorg.js"></script>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2018 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
</script>
</head>
<body>
<div id="content">
<h1 class="title">Ansible Playbooks for yaVDR 0.7</h1>
<div id="table-of-contents">
<h2>Inhaltsverzeichnis</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org0887da0">1. User Stories</a>
<ul>
<li><a href="#org53f9794">1.1. yavdr-full</a>
<ul>
<li><a href="#org19a1a2e">1.1.1. Using vdr, pulseaudio and xorg together</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#org0c5070c">2. Introduction</a></li>
<li><a href="#org280d68f">3. Installing and configuring yaVDR with Ansible</a>
<ul>
<li><a href="#org4c18caa">3.1. Install script for local usage</a></li>
</ul>
</li>
<li><a href="#orgec41076">4. Playbooks</a>
<ul>
<li><a href="#org7f6f826">4.1. yavdr07.yml</a></li>
<li><a href="#org10acfbd">4.2. yavdr07-headless.yml</a></li>
</ul>
</li>
<li><a href="#orgf1ba5e3">5. Hosts</a></li>
<li><a href="#orgb56d9db">6. Group Variables</a>
<ul>
<li><a href="#org67d96a9">6.1. PPAs</a></li>
<li><a href="#org877308c">6.2. VDR user, directories, special configuration and plugins</a></li>
<li><a href="#org5bdade0">6.3. Media directories</a></li>
<li><a href="#orgaccf77b">6.4. NFS</a></li>
<li><a href="#org79c805a">6.5. Samba</a></li>
<li><a href="#orga2cb2e7">6.6. Additional packages</a></li>
<li><a href="#orga69dd57">6.7. System pre-configuration</a></li>
</ul>
</li>
<li><a href="#org1e25abc">7. Roles</a>
<ul>
<li><a href="#orgd7864a0">7.1. install-dependencies</a>
<ul>
<li><a href="#org7c636ac">7.1.1. tasks</a></li>
</ul>
</li>
<li><a href="#org5a79ae7">7.2. nvidia experimental drivers</a>
<ul>
<li><a href="#org734492d">7.2.1. tasks</a></li>
</ul>
</li>
<li><a href="#orgb72820d">7.3. yavdr-common</a>
<ul>
<li><a href="#org22669a7">7.3.1. default variables</a></li>
<li><a href="#org4557aa0">7.3.2. tasks</a></li>
<li><a href="#org4d6b40b">7.3.3. templates</a></li>
</ul>
</li>
<li><a href="#orgbd347e3">7.4. collect facts about the system with custom modules</a>
<ul>
<li><a href="#orgf76c0a2">7.4.1. variables</a></li>
<li><a href="#orga0ccd0f">7.4.2. tasks</a></li>
</ul>
</li>
<li><a href="#orgaa6a904">7.5. vdr</a>
<ul>
<li><a href="#orgae2853f">7.5.1. tasks</a></li>
<li><a href="#org85c59da">7.5.2. templates</a></li>
<li><a href="#org3a61a90">7.5.3. files</a></li>
</ul>
</li>
<li><a href="#org2302fa3">7.6. <span class="todo STARTED">STARTED</span> yavdr-network</a>
<ul>
<li><a href="#orgf532316">7.6.1. default variables</a></li>
<li><a href="#orgd66b246">7.6.2. tasks</a></li>
</ul>
</li>
<li><a href="#orgc085d72">7.7. nfs-server</a>
<ul>
<li><a href="#org1791205">7.7.1. <span class="todo TODO">TODO</span> avahi-services für NFS beim Stoppen des nfs-kernel-servers depublizieren, beim Start wieder announcen</a></li>
<li><a href="#org0b15936">7.7.2. tasks</a></li>
<li><a href="#org3fcf00a">7.7.3. templates</a></li>
</ul>
</li>
<li><a href="#org45821d2">7.8. <span class="todo STARTED">STARTED</span> yavdr-remote</a>
<ul>
<li><a href="#orgfb4acdd">7.8.1. default variables</a></li>
<li><a href="#orgfe9103d">7.8.2. tasks</a></li>
<li><a href="#org2115f47">7.8.3. templates</a></li>
<li><a href="#orgb92cdd7">7.8.4. files</a></li>
</ul>
</li>
<li><a href="#orgf729143">7.9. pulseaudio</a>
<ul>
<li><a href="#org84adf88">7.9.1. tasks</a></li>
<li><a href="#orgd0611f1">7.9.2. templates</a></li>
</ul>
</li>
<li><a href="#orgf44e66d">7.10. yavdr-xorg</a>
<ul>
<li><a href="#org0a32e1e">7.10.1. About the GUI session</a></li>
<li><a href="#orgdc62148">7.10.2. default variables</a></li>
<li><a href="#orga44a556">7.10.3. tasks</a></li>
<li><a href="#orga64e1c1">7.10.4. templates</a></li>
</ul>
</li>
<li><a href="#orge7e8c5c">7.11. yavdr-desktop</a>
<ul>
<li><a href="#org6d57b99">7.11.1. Tasks</a></li>
<li><a href="#org9b0ad75">7.11.2. Templates</a></li>
</ul>
</li>
<li><a href="#orge6a9a80">7.12. samba-install</a>
<ul>
<li><a href="#orgc5300af">7.12.1. tasks</a></li>
</ul>
</li>
<li><a href="#org7e6c508">7.13. samba-config</a>
<ul>
<li><a href="#org679a8b0">7.13.1. tasks</a></li>
<li><a href="#orgb5ad4c3">7.13.2. templates</a></li>
</ul>
</li>
<li><a href="#org972c477">7.14. <span class="todo STARTED">STARTED</span> autoinstall-drivers</a>
<ul>
<li><a href="#orgce82d47">7.14.1. <span class="todo TODO">TODO</span> sundtek for Sundtek devices (local or network connection)</a></li>
<li><a href="#orga4adbf3">7.14.2. <span class="todo TODO">TODO</span> drivers for TT S2-6400 FF</a></li>
</ul>
</li>
<li><a href="#orge5f95a4">7.15. autoinstall-ubuntu-drivers</a>
<ul>
<li><a href="#org6b121ab">7.15.1. tasks</a></li>
</ul>
</li>
<li><a href="#orgb7eed58">7.16. autoinstall-virtualbox-guest</a></li>
<li><a href="#org7d58e04">7.17. autoinstall-atric-usb</a>
<ul>
<li><a href="#org70807bb">7.17.1. dependencies</a></li>
<li><a href="#org4af8e96">7.17.2. tasks</a></li>
<li><a href="#org3f9c119">7.17.3. templates</a></li>
</ul>
</li>
<li><a href="#org7216a1b">7.18. autoinstall-yausbir</a>
<ul>
<li><a href="#org8c524e6">7.18.1. dependencies</a></li>
<li><a href="#org174926f">7.18.2. tasks</a></li>
<li><a href="#org16f1c05">7.18.3. templates</a></li>
</ul>
</li>
<li><a href="#org3b5dcd8">7.19. autoinstall-satip</a>
<ul>
<li><a href="#orgb0c7933">7.19.1. tasks</a></li>
</ul>
</li>
<li><a href="#org38f05df">7.20. autoinstall-targavfd</a>
<ul>
<li><a href="#org5f9fd3a">7.20.1. tasks</a></li>
</ul>
</li>
<li><a href="#org8c3a46b">7.21. autoinstall-imonlcd</a>
<ul>
<li><a href="#org1acb75d">7.21.1. tasks</a></li>
</ul>
</li>
<li><a href="#org1dbeafb">7.22. autoinstall-libcecdaemon</a>
<ul>
<li><a href="#org5af8ff7">7.22.1. tasks</a></li>
</ul>
</li>
<li><a href="#org47190b2">7.23. autoinstall-pvr350</a>
<ul>
<li><a href="#orgc808272">7.23.1. tasks</a></li>
</ul>
</li>
<li><a href="#org08cb143">7.24. autoinstall-hauppauge-pvr</a></li>
<li><a href="#orgf4681f1">7.25. autoinstall-firmware</a>
<ul>
<li><a href="#org2738eca">7.25.1. dependencies</a></li>
<li><a href="#orgb03807f">7.25.2. tasks</a></li>
</ul>
</li>
<li><a href="#orgd2e9e2f">7.26. autoinstall-dvbsky-firmware</a>
<ul>
<li><a href="#org0708e70">7.26.1. dependencies</a></li>
<li><a href="#org471facf">7.26.2. defaults</a></li>
<li><a href="#org5c8eeb9">7.26.3. tasks</a></li>
</ul>
</li>
<li><a href="#orgef103c4">7.27. <span class="todo TODO">TODO</span> autoinstall-dvbhddevice</a>
<ul>
<li><a href="#orgc6aff16">7.27.1. dependencies</a></li>
<li><a href="#org98d15df">7.27.2. tasks</a></li>
</ul>
</li>
<li><a href="#org502fe50">7.28. autoinstall-dvbsddevice</a>
<ul>
<li><a href="#org93b6e2f">7.28.1. dependencies</a></li>
<li><a href="#org5f8df25">7.28.2. tasks</a></li>
</ul>
</li>
<li><a href="#orgea5b798">7.29. autoinstall-hardware-irmp</a>
<ul>
<li><a href="#org8ac5e57">7.29.1. dependencies</a></li>
<li><a href="#orgf0d9998">7.29.2. tasks</a></li>
</ul>
</li>
<li><a href="#org38cdaa8">7.30. kodi</a>
<ul>
<li><a href="#org02a1df8">7.30.1. tasks</a></li>
<li><a href="#org96a0df6">7.30.2. templates</a></li>
<li><a href="#org7c77b6b">7.30.3. files</a></li>
</ul>
</li>
<li><a href="#orgdab1652">7.31. dvd</a>
<ul>
<li><a href="#org6df3cc0">7.31.1. tasks</a></li>
</ul>
</li>
<li><a href="#orgb868e32">7.32. install-sundtek</a>
<ul>
<li><a href="#orgd53cb22">7.32.1. variables</a></li>
<li><a href="#org3fecae1">7.32.2. tasks</a></li>
<li><a href="#org4ad1076">7.32.3. templates</a></li>
</ul>
</li>
<li><a href="#org12f1432">7.33. template-test</a></li>
<li><a href="#org9e2ffa8">7.34. wakeup</a>
<ul>
<li><a href="#org2ecd6ef">7.34.1. defaults</a></li>
<li><a href="#org0dcbbad">7.34.2. tasks</a></li>
<li><a href="#org1572d7a">7.34.3. templates</a></li>
</ul>
</li>
<li><a href="#org8e11808">7.35. grub-config</a>
<ul>
<li><a href="#org8381a74">7.35.1. default variables</a></li>
<li><a href="#orgc0702e2">7.35.2. tasks</a></li>
<li><a href="#orgb6eeaf8">7.35.3. templates</a></li>
<li><a href="#orgb0d3898">7.35.4. handlers</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#org1be3934">8. Modules</a>
<ul>
<li><a href="#orgeb30525">8.1. hardware_facts.py</a></li>
<li><a href="#org5b778e8">8.2. satip_facts.py</a></li>
<li><a href="#org8269686">8.3. xrandr_facts.py</a></li>
</ul>
</li>
<li><a href="#org6684575">9. Handlers</a></li>
</ul>
</div>
</div>
<div id="outline-container-org0887da0" class="outline-2">
<h2 id="org0887da0"><span class="section-number-2">1</span> User Stories</h2>
<div class="outline-text-2" id="text-1">
</div>
<div id="outline-container-org53f9794" class="outline-3">
<h3 id="org53f9794"><span class="section-number-3">1.1</span> yavdr-full</h3>
<div class="outline-text-3" id="text-1-1">
<p>
A User wants to install yaVDR without customization and relies on full automation.
</p>
<p>
After installing a supported Ubuntu Server version and (if needed) setting up the network connection, the install script is downloaded and started.
</p>
<p>
The install script adds the ansible PPA, installs ansible and other basic dependencies and runs the automated installation process.
</p>
<p>
Several roles are used to tie everything together:
</p>
<dl class="org-dl">
<dt>yavdr-common</dt><dd>installs the basic set of packages needed and preconfigures the system (package sources, package manager settings, entires for network ports, directory structure etc.). Also collects information about the system</dd>
<dt>autoinstall-ubuntu-drivers</dt><dd>uses Ubuntu&rsquo;s automatic detection for additional drivers (e.g. proprietary nvidia driver, microcode updates, VirtualBox guest additions)</dd>
<dt>vdr</dt><dd>install the vdr package and required plugins</dd>
<dt>pulseaudio</dt><dd>install and preconfigure pulseaudio</dd>
<dt>yavdr-network</dt><dd>configure WOL, add nfs client capabilites, install avahi-linker</dd>
<dt>samba-server</dt><dd>install and preconfigure a samba server</dd>
<dt>nfs-server</dt><dd>install nfs-kernelserver and preconfigure nfs exports (and avahi-announcements)</dd>
<dt>autoinstall-satip</dt><dd>install vdr-plugin-satip if a Sat&gt;IP server has been found</dd>
<dt>autoinstall-targavfd</dt><dd>install vdr-plugin-targavfd if display is connected</dd>
<dt>autoinstall-imonlcd</dt><dd>install vdr-plugin-imonlcd if a matchind display is connected</dd>
<dt>yavdr-xorg</dt><dd>install and configure a systemd user session with a running X-server. A frontend script will manage VDR&rsquo;s frontend and other applications like KODI. Also choose the best possible output plugin.</dd>
<dt>grub-config</dt><dd>update grub configuration based on executed roles</dd>
</dl>
</div>
<div id="outline-container-org19a1a2e" class="outline-4">
<h4 id="org19a1a2e"><span class="section-number-4">1.1.1</span> Using vdr, pulseaudio and xorg together</h4>
</div>
</div>
</div>
<div id="outline-container-org0c5070c" class="outline-2">
<h2 id="org0c5070c"><span class="section-number-2">2</span> Introduction</h2>
<div class="outline-text-2" id="text-2">
<p>
One of the major problems we faced with customized Ubuntu ISO files as installation media for prior yaVDR versions has been the limited hardware support and the time consuming process to create and update them. An interesting alternative to this approach is to enable the user to choose the installation medium by himself, so point releases, kernel versions and additional drivers can be chosen deliberately. After the basic setup is complete (and a working internet connection is available), a fully customizable install script completes the yaVDR installation.
</p>
</div>
</div>
<div id="outline-container-org280d68f" class="outline-2">
<h2 id="org280d68f"><span class="section-number-2">3</span> Installing and configuring yaVDR with Ansible</h2>
<div class="outline-text-2" id="text-3">
<p>
This is an experimental feature which allows to set up a yaVDR installation based on a normal Ubuntu Server 16.04.x installation using <a href="http://ansible.com">Ansible</a>.
</p>
<p>
This Manual is written in org-mode for Emacs and can rewrite the complete ansible configuration if you call <code>org-babel-tangle</code> from within emacs.
</p>
<p>
To use this playbook on a Ubuntu Server Installation you need to run the following commands:
</p>
<div class="org-src-container">
<pre class="src src-shell">sudo apt-get install git
git clone https://github.com/yavdr/yavdr-ansible.git
<span class="org-builtin">cd</span> yavdr-ansible
git checkout bionic
sudo ./install-yavdr.sh
</pre>
</div>
<p>
We use a callback to generate tags for all roles autmatically:
</p>
<div class="org-src-container">
<pre class="src src-conf">[<span class="org-type">defaults</span>]
<span class="org-variable-name">callback_plugins</span> = plugins/callbacks
<span class="org-variable-name">callback_whitelist</span> = auto_tags
<span class="org-variable-name">ansible_managed</span> = *** ANSIBLE MANAGED FILE ***
template: {file}
</pre>
</div>
</div>
<div id="outline-container-org4c18caa" class="outline-3">
<h3 id="org4c18caa"><span class="section-number-3">3.1</span> Install script for local usage</h3>
<div class="outline-text-3" id="text-3-1">
<div class="org-src-container">
<pre class="src src-shell"><span class="org-keyword">if</span> (( $<span class="org-variable-name">EUID</span> != 0 )); <span class="org-keyword">then</span>
<span class="org-builtin">echo</span> <span class="org-string">"This script must be run using sudo -H or as root"</span>
<span class="org-keyword">exit</span>
<span class="org-keyword">fi</span>
apt-get -y install software-properties-common
<span class="org-comment-delimiter"># </span><span class="org-comment">update packages</span>
apt-get update
<span class="org-comment-delimiter"># </span><span class="org-comment">install required packages</span>
apt-get -y install --no-install-recommends ansible
<span class="org-comment-delimiter"># </span><span class="org-comment">TODO: run ansible on local host</span>
ansible-playbook yavdr07.yml -b -i <span class="org-string">'localhost_inventory'</span> --connection=local --tags=<span class="org-string">"all"</span> --extra-vars <span class="org-string">"first_run=True"</span>
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgec41076" class="outline-2">
<h2 id="orgec41076"><span class="section-number-2">4</span> Playbooks</h2>
<div class="outline-text-2" id="text-4">
</div>
<div id="outline-container-org7f6f826" class="outline-3">
<h3 id="org7f6f826"><span class="section-number-3">4.1</span> yavdr07.yml</h3>
<div class="outline-text-3" id="text-4-1">
<p>
The <code>yavdr07.yml</code> playbook sets up a fully-featured yaVDR installation:
</p>
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file: yavdr07.yml</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">this playbook sets up a complete yaVDR 0.7 installation</span>
- <span class="org-variable-name">name</span>: set up yaVDR
<span class="org-variable-name">hosts</span>: all
<span class="org-variable-name">become</span>: <span class="org-constant">true</span>
<span class="org-variable-name">roles</span>:
- yavdr-common <span class="org-comment-delimiter"># </span><span class="org-comment">install and configure the basic system</span>
- collect-facts <span class="org-comment-delimiter"># </span><span class="org-comment">query system facts</span>
- autoinstall-ubuntu-drivers <span class="org-comment-delimiter"># </span><span class="org-comment">use ubuntu-drivers to install proprietary dirvers</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">(e.g. nvidia, virtualbox)</span>
- autoinstall-virtualbox-guest
<span class="org-comment-delimiter"># </span><span class="org-comment">- nvidia-experimental # install very recent nvidia dirver from ppa:graphics-drivers/ppa</span>
- vdr <span class="org-comment-delimiter"># </span><span class="org-comment">install vdr and related packages</span>
- yavdr-network <span class="org-comment-delimiter"># </span><span class="org-comment">enable network client capabilities</span>
- samba-install <span class="org-comment-delimiter"># </span><span class="org-comment">install samba server</span>
- samba-config <span class="org-comment-delimiter"># </span><span class="org-comment">configure samba server</span>
- nfs-server <span class="org-comment-delimiter"># </span><span class="org-comment">install nfs server</span>
- pulseaudio <span class="org-comment-delimiter"># </span><span class="org-comment">install pulseaudio</span>
- yavdr-xorg <span class="org-comment-delimiter"># </span><span class="org-comment">graphical session</span>
- yavdr-remote <span class="org-comment-delimiter"># </span><span class="org-comment">remote configuration files, services and scripts</span>
- yavdr-desktop <span class="org-comment-delimiter"># </span><span class="org-comment">openbox session with yavdr frontend script</span>
- autoinstall-satip <span class="org-comment-delimiter"># </span><span class="org-comment">install vdr-plugin-satip if a Sat&gt;IP server has been found</span>
- autoinstall-targavfd <span class="org-comment-delimiter"># </span><span class="org-comment">install vdr-plugin-targavfd if display is connected</span>
- autoinstall-imonlcd <span class="org-comment-delimiter"># </span><span class="org-comment">install vdr-plugin-imonlcd if a matchind display is connected</span>
- autoinstall-pvr350 <span class="org-comment-delimiter"># </span><span class="org-comment">install vdr-plugin-pgvr350 if a matching card is detected</span>
- autoinstall-hauppauge-pvr <span class="org-comment-delimiter"># </span><span class="org-comment">install vdr-plugin-pvrinput if a matching card is found</span>
- autoinstall-dvbsddevice <span class="org-comment-delimiter"># </span><span class="org-comment">install vdr-plugin-dvbsddevice if a matching card is detected</span>
- autoinstall-hardware-irmp <span class="org-comment-delimiter"># </span><span class="org-comment">install yavdr-hardware-irmp if a matching usb device is detected</span>
- autoinstall-atric-usb <span class="org-comment-delimiter"># </span><span class="org-comment">preconfigure lircd for Atric IR-WakeupUSB receiver</span>
- autoinstall-yausbir <span class="org-comment-delimiter"># </span><span class="org-comment">preconfigure lircd for yaUsbIR receiver</span>
- autoinstall-dvbsky-firmware <span class="org-comment-delimiter"># </span><span class="org-comment">download an install required firmware files for dvbsky cards</span>
- kodi
- dvd <span class="org-comment-delimiter"># </span><span class="org-comment">set up packages and a udev rule to allow kodi and other players</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">to play and eject optical media</span>
- wakeup <span class="org-comment-delimiter"># </span><span class="org-comment">set up wakeup methods for rtc etc.</span>
- grub-config <span class="org-comment-delimiter"># </span><span class="org-comment">configure grub</span>
<span class="org-variable-name">handlers</span>:
- <span class="org-variable-name">import_tasks</span>: handlers/main.yml
</pre>
</div>
</div>
</div>
<div id="outline-container-org10acfbd" class="outline-3">
<h3 id="org10acfbd"><span class="section-number-3">4.2</span> yavdr07-headless.yml</h3>
<div class="outline-text-3" id="text-4-2">
<p>
For a headless server installation <code>yavdr07-headless.yml</code> is a good choice
</p>
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file: yavdr07-headless.yml</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">this playbook set up a headless yaVDR 0.7 installation</span>
- <span class="org-variable-name">name</span>: set up a headless yaVDR server
<span class="org-variable-name">hosts</span>: all
<span class="org-variable-name">become</span>: <span class="org-constant">true</span>
<span class="org-variable-name">roles</span>:
- yavdr-common
- collect-facts <span class="org-comment-delimiter"># </span><span class="org-comment">query system facts</span>
- vdr
- yavdr-network
- samba-install
- samba-config
- nfs-server
- grub-config
- autoinstall-satip
- wakeup
<span class="org-variable-name">tags</span>:
- always
<span class="org-variable-name">handlers</span>:
- <span class="org-variable-name">import_tasks</span>: handlers/main.yml
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgf1ba5e3" class="outline-2">
<h2 id="orgf1ba5e3"><span class="section-number-2">5</span> Hosts</h2>
<div class="outline-text-2" id="text-5">
<p>
This playbook can either be used to run the installation on the localhost or any other PC in the network that can be accessed via ssh. Simply add the host names or IP addresses to the hosts file in the respective section:
</p>
<div class="org-src-container">
<pre class="src src-conf">[<span class="org-type">local</span>]
<span class="org-variable-name">localhost connection</span>=local
</pre>
</div>
</div>
</div>
<div id="outline-container-orgb56d9db" class="outline-2">
<h2 id="orgb56d9db"><span class="section-number-2">6</span> Group Variables</h2>
<div class="outline-text-2" id="text-6">
</div>
<div id="outline-container-org67d96a9" class="outline-3">
<h3 id="org67d96a9"><span class="section-number-3">6.1</span> PPAs</h3>
<div class="outline-text-3" id="text-6-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file: group_vars/all</span>
<span class="org-variable-name">branch</span>: experimental
<span class="org-variable-name">ppa_owner</span>: <span class="org-string">'ppa:yavdr'</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">add the following PPAs</span>
<span class="org-variable-name">repositories</span>:
- <span class="org-string">'{{ ppa_owner }}/{{branch}}-main'</span>
- <span class="org-string">'{{ ppa_owner }}/{{branch}}-vdr'</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">- '{{ ppa_owner }}/{{branch}}-yavdr'</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">- '{{ ppa_owner }}/{{branch}}-kodi'</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org877308c" class="outline-3">
<h3 id="org877308c"><span class="section-number-3">6.2</span> VDR user, directories, special configuration and plugins</h3>
<div class="outline-text-3" id="text-6-2">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment-delimiter"># </span><span class="org-comment">properties of the user vdr and vdr-related options</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">NOTE: user name, uid and confdir must match the values set by the vdr package</span>
<span class="org-variable-name">vdr</span>:
<span class="org-variable-name">user</span>: vdr
<span class="org-variable-name">group</span>: vdr
<span class="org-variable-name">uid</span>: 666
<span class="org-variable-name">gid</span>: 666
<span class="org-variable-name">home</span>: /var/lib/vdr
<span class="org-variable-name">confdir</span>: /var/lib/vdr
<span class="org-variable-name">recdir</span>: /srv/vdr/video
<span class="org-variable-name">hide_first_recording_level</span>: <span class="org-constant">false</span>
<span class="org-variable-name">safe_dirnames</span>: true <span class="org-comment-delimiter"># </span><span class="org-comment">escape characters (useful for windows clients and FAT/NTFS file systems)</span>
<span class="org-variable-name">override_vdr_charset</span>: <span class="org-constant">false</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">add the vdr plugins you want to install</span>
<span class="org-variable-name">vdr_plugins</span>:
- vdr-plugin-devstatus
- vdr-plugin-markad
- vdr-plugin-restfulapi
- vdr-plugin-softhddevice-vpp
</pre>
</div>
</div>
</div>
<div id="outline-container-org5bdade0" class="outline-3">
<h3 id="org5bdade0"><span class="section-number-3">6.3</span> Media directories</h3>
<div class="outline-text-3" id="text-6-3">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment-delimiter"># </span><span class="org-comment">dictionary of directories for (shared) files. Automatically exported via NFS and Samba if those roles are enabled</span>
<span class="org-variable-name">media_dirs</span>:
<span class="org-variable-name">audio</span>: /srv/audio
<span class="org-variable-name">video</span>: /srv/video
<span class="org-variable-name">pictures</span>: /srv/picture
<span class="org-variable-name">files</span>: /srv/files
<span class="org-variable-name">backups</span>: /srv/backups
<span class="org-variable-name">recordings</span>: <span class="org-string">'{{ vdr.recdir }}'</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orgaccf77b" class="outline-3">
<h3 id="orgaccf77b"><span class="section-number-3">6.4</span> NFS</h3>
<div class="outline-text-3" id="text-6-4">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-variable-name">nfs</span>:
<span class="org-variable-name">insecure</span>: false <span class="org-comment-delimiter"># </span><span class="org-comment">set to true for OS X clients or if you plan to use libnfs as unprivileged user (e.g. KODI)</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org79c805a" class="outline-3">
<h3 id="org79c805a"><span class="section-number-3">6.5</span> Samba</h3>
<div class="outline-text-3" id="text-6-5">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-variable-name">samba</span>:
<span class="org-variable-name">workgroup</span>: YAVDR
<span class="org-variable-name">windows_compatible</span>: <span class="org-string">'{{ vdr.safe_dirnames }}'</span> <span class="org-comment-delimiter"># </span><span class="org-comment">set to true to disable unix extensions, enable follow symlinks and wide links</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orga2cb2e7" class="outline-3">
<h3 id="orga2cb2e7"><span class="section-number-3">6.6</span> Additional packages</h3>
<div class="outline-text-3" id="text-6-6">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment-delimiter"># </span><span class="org-comment">additional packages you want to install</span>
<span class="org-variable-name">extra_packages</span>:
- bpython
- bpython3
- htop
- tree
- vim
- w-scan
- plymouth-theme-yavdr-logo
</pre>
</div>
</div>
</div>
<div id="outline-container-orga69dd57" class="outline-3">
<h3 id="orga69dd57"><span class="section-number-3">6.7</span> System pre-configuration</h3>
<div class="outline-text-3" id="text-6-7">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-variable-name">frontend</span>: vdr
<span class="org-comment-delimiter">#</span><span class="org-comment">system:</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">shutdown: poweroff</span>
<span class="org-variable-name">wakeup_method</span>: acpiwakeup
<span class="org-variable-name">grub</span>:
<span class="org-variable-name">timeout</span>: 0
<span class="org-variable-name">boot_options</span>: quiet splash
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org1e25abc" class="outline-2">
<h2 id="org1e25abc"><span class="section-number-2">7</span> Roles</h2>
<div class="outline-text-2" id="text-7">
</div>
<div id="outline-container-orgd7864a0" class="outline-3">
<h3 id="orgd7864a0"><span class="section-number-3">7.1</span> install-dependencies</h3>
<div class="outline-text-3" id="text-7-1">
</div>
<div id="outline-container-org7c636ac" class="outline-4">
<h4 id="org7c636ac"><span class="section-number-4">7.1.1</span> tasks</h4>
<div class="outline-text-4" id="text-7-1-1">
</div>
<ol class="org-ol">
<li><a id="orgcd1d47c"></a>main.yml<br />
<div class="outline-text-5" id="text-7-1-1-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
- <span class="org-variable-name">name</span>: apt | install packages
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">install_recommends</span>: <span class="org-constant">no</span>
<span class="org-variable-name">cache_valid_time</span>: 60
<span class="org-variable-name">with_items</span>:
<span class="org-string">'{{ packages }}'</span>
</pre>
</div>
</div>
</li>
</ol>
</div>
</div>
<div id="outline-container-org5a79ae7" class="outline-3">
<h3 id="org5a79ae7"><span class="section-number-3">7.2</span> nvidia experimental drivers</h3>
<div class="outline-text-3" id="text-7-2">
<p>
install nvidia-396 from ppa:graphics-drivers/ppa
</p>
</div>
<div id="outline-container-org734492d" class="outline-4">
<h4 id="org734492d"><span class="section-number-4">7.2.1</span> tasks</h4>
<div class="outline-text-4" id="text-7-2-1">
</div>
<ol class="org-ol">
<li><a id="orga607b03"></a>main.yml<br />
<div class="outline-text-5" id="text-7-2-1-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
- <span class="org-variable-name">name</span>: add ppa:graphics-drivers/ppa
<span class="org-variable-name">apt_repository</span>:
<span class="org-variable-name">repo</span>: <span class="org-string">'ppa:graphics-drivers/ppa'</span>
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">update_cache</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">tags</span>:
- ppa
- <span class="org-variable-name">name</span>: install nvidia-396 and other required packages
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">install_recommends</span>: <span class="org-constant">no</span>
<span class="org-variable-name">with_items</span>:
- nvidia-396
- nvidia-settings
<span class="org-variable-name">tags</span>:
- packages
</pre>
</div>
</div>
</li>
</ol>
</div>
</div>
<div id="outline-container-orgb72820d" class="outline-3">
<h3 id="orgb72820d"><span class="section-number-3">7.3</span> yavdr-common</h3>
<div class="outline-text-3" id="text-7-3">
<p>
This role is used to set up a basic yaVDR installation. It creates the directories, installs the vdr and other useful packages.
</p>
</div>
<div id="outline-container-org22669a7" class="outline-4">
<h4 id="org22669a7"><span class="section-number-4">7.3.1</span> default variables</h4>
<div class="outline-text-4" id="text-7-3-1">
<p>
This section is for reference only, please use the files in <code>global_vars</code> for customizations.
</p>
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file: roles/yavdr-common/defaults/main.yml</span>
</pre>
</div>
</div>
<ol class="org-ol">
<li><a id="org3b3909a"></a>Repositories<br />
<div class="outline-text-5" id="text-7-3-1-1">
<p>
You can set a list of package repositories which provide the necessary packages. Feel free to use own PPAs if you need special customization to the VDR and it&rsquo;s plugins.
</p>
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-variable-name">branch</span>: unstable
<span class="org-variable-name">repositories</span>:
- <span class="org-string">'ppa:yavdr/main'</span>
- <span class="org-string">'ppa:yavdr/unstable-main'</span>
- <span class="org-string">'ppa:yavdr/{{branch}}-vdr'</span>
- <span class="org-string">'ppa:yavdr/{{branch}}-kodi'</span>
- <span class="org-string">'ppa:yavdr/{{branch}}-yavdr'</span>
</pre>
</div>
</div>
</li>
<li><a id="org2b6c046"></a>Drivers<br />
<div class="outline-text-5" id="text-7-3-1-2">
<p>
Automatically installed drivers can be very useful, but if you know you need a certain driver, you can simply set it&rsquo;s value to <b>true</b>. If you don&rsquo;t want a driver to be installed, set it&rsquo;s value to <b>false</b>.
</p>
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-variable-name">drivers</span>:
<span class="org-variable-name">sundtek</span>: auto
<span class="org-variable-name">ddvb-dkms</span>: auto
</pre>
</div>
</div>
</li>
<li><a id="org8554487"></a>Additional Packages<br />
<div class="outline-text-5" id="text-7-3-1-3">
<p>
Add additional packages you would like to have on your installation to this list
</p>
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-variable-name">extra_packages</span>:
- vim
- tree
- w-scan
</pre>
</div>
</div>
</li>
<li><a id="org1eef911"></a>VDR<br />
<div class="outline-text-5" id="text-7-3-1-4">
<p>
This section allows you to set the recording directory, the user and group that runs the vdr and it&rsquo;s home directory.
</p>
<dl class="org-dl">
<dt>user</dt><dd>the vdr user name</dd>
<dt>group</dt><dd>the main group for the user vdr</dd>
<dt>uid</dt><dd>the user id for the user vdr</dd>
<dt>gid</dt><dd>the group id for the group vdr</dd>
<dt>home</dt><dd>the home directory for the user vdr</dd>
<dt>recdir</dt><dd>the recording directory used by VDR</dd>
<dt>hide_first_recording_level</dt><dd>let vdr hide the first directory level of it&rsquo;s recording directory so the content of multiple directories is shown merged together</dd>
<dt>safe_dirnames</dt><dd>replace special characters which are not compatible with Windows file systems and Samba shares</dd>
<dt>override_vdr_charset</dt><dd>workaround for channels with weird EPG encodings, e.g. Sky</dd>
</dl>
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-variable-name">vdr</span>:
<span class="org-variable-name">user</span>: vdr
<span class="org-variable-name">group</span>: vdr
<span class="org-variable-name">uid</span>: 666
<span class="org-variable-name">gid</span>: 666
<span class="org-variable-name">home</span>: /var/lib/vdr
<span class="org-variable-name">recdir</span>: /srv/vdr/video
<span class="org-variable-name">hide_first_recording_level</span>: <span class="org-constant">false</span>
<span class="org-variable-name">safe_dirnames</span>: <span class="org-constant">true</span>
<span class="org-variable-name">override_vdr_charset</span>: <span class="org-constant">false</span>
</pre>
</div>
</div>
</li>
</ol>
</div>
<div id="outline-container-org4557aa0" class="outline-4">
<h4 id="org4557aa0"><span class="section-number-4">7.3.2</span> tasks</h4>
<div class="outline-text-4" id="text-7-3-2">
<p>
yavdr-common executes the following tasks:
</p>
</div>
<ol class="org-ol">
<li><a id="org29b6733"></a>main.yml<br />
<div class="outline-text-5" id="text-7-3-2-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file: roles/yavdr-common/tasks/main.yml </span>
- <span class="org-variable-name">name</span>: basic installation
<span class="org-variable-name">block</span>:
- <span class="org-variable-name">import_tasks</span>: configure_apt.yml
- <span class="org-variable-name">import_tasks</span>: configure_system.yml
- <span class="org-variable-name">import_tasks</span>: create_directories.yml
- <span class="org-variable-name">import_tasks</span>: create_sudoers.yml
<span class="org-variable-name">tags</span>: [install]
</pre>
</div>
</div>
<ol class="org-ol">
<li><a id="orgff1e8f4"></a>Disable default installation of recommended packages<br />
<div class="outline-text-6" id="text-7-3-2-1-1">
<p>
This task prevents apt to automatically install all recommended dependencies for packages:
</p>
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
- <span class="org-variable-name">name</span>: apt | prevent automatic installation of recommended packages
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/90-norecommends.j2
<span class="org-variable-name">dest</span>: /etc/apt/apt.conf.d/90norecommends
</pre>
</div>
</div>
</li>
<li><a id="orgfc44f10"></a>Set up package repositories<br />
<div class="outline-text-6" id="text-7-3-2-1-2">
<div class="org-src-container">
<pre class="src src-yaml">- <span class="org-variable-name">name</span>: add PPAs
<span class="org-variable-name">apt_repository</span>:
<span class="org-variable-name">repo</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">update_cache</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">with_items</span>: <span class="org-string">'{{ repositories }}'</span>
<span class="org-variable-name">tags</span>:
- ppa
- <span class="org-variable-name">name</span>: run apt-get dist-upgrade
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">upgrade</span>: dist
<span class="org-variable-name">update_cache</span>: <span class="org-constant">yes</span>
</pre>
</div>
</div>
</li>
<li><a id="org9050204"></a>Use bash instead of dash<br />
<div class="outline-text-6" id="text-7-3-2-1-3">
<div class="org-src-container">
<pre class="src src-yaml">- <span class="org-variable-name">name</span>: use bash instead of dash
<span class="org-variable-name">shell</span>: |
echo <span class="org-string">"set dash/sh false"</span> | debconf-communicate
<span class="org-string"> dpkg-reconfigure -f noninteractive dash</span>
</pre>
</div>
</div>
</li>
<li><a id="org0668508"></a>create user vdr<br /></li>
<li><a id="org6aac6c6"></a>Disable release-upgrade notifications<br />
<ol class="org-ol">
<li><a id="org0f7aed7"></a><span class="todo SOMEDAY">SOMEDAY</span> move from lineinfile to template<br />
<div class="outline-text-7" id="text-7-3-2-1-5-1">
<div class="org-src-container">
<pre class="src src-yaml">- <span class="org-variable-name">name</span>: disable release-upgrade notifications
<span class="org-variable-name">lineinfile</span>:
<span class="org-variable-name">dest</span>: /etc/update-manager/release-upgrades
<span class="org-variable-name">backrefs</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">regexp</span>: <span class="org-string">'^(Prompt=).*$'</span>
<span class="org-variable-name">line</span>: <span class="org-string">'\1never'</span>
<span class="org-variable-name">ignore_errors</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">with_first_found</span>:
- <span class="org-variable-name">files</span>:
- /etc/update-manager/release-upgrades
<span class="org-variable-name">skip</span>: <span class="org-constant">true</span>
</pre>
</div>
</div>
</li>
</ol>
</li>
<li><a id="orgce22fbd"></a>Install essential packages<br />
<div class="outline-text-6" id="text-7-3-2-1-6">
<div class="org-src-container">
<pre class="src src-yaml">- <span class="org-variable-name">name</span>: apt | install basic packages
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">install_recommends</span>: <span class="org-constant">no</span>
<span class="org-variable-name">with_items</span>:
- anacron
- acl
- at
- bash-completion
<span class="org-comment-delimiter">#</span><span class="org-comment">- biosdevname # caution: may change device names after a minimal installation!</span>
- debconf-utils
- linux-firmware
- psmisc
- python-kmodpy
- python-requests
- python-usb
- python3-usb
- software-properties-common
- ssh
- wget
- wpasupplicant
- usbutils
- xfsprogs
</pre>
</div>
</div>
</li>
<li><a id="org48c9b96"></a>Install additional packages (user defined)<br />
<div class="outline-text-6" id="text-7-3-2-1-7">
<div class="org-src-container">
<pre class="src src-yaml">- <span class="org-variable-name">name</span>: apt | install extra packages
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">install_recommends</span>: <span class="org-constant">no</span>
<span class="org-variable-name">with_items</span>:
<span class="org-string">'{{ extra_packages }}'</span>
</pre>
</div>
</div>
</li>
<li><a id="org58e48f3"></a>create directories<br /></li>
<li><a id="org9e22821"></a>create sudoers drop-in for vdr<br /></li>
</ol>
</li>
</ol>
</div>
<div id="outline-container-org4d6b40b" class="outline-4">
<h4 id="org4d6b40b"><span class="section-number-4">7.3.3</span> templates</h4>
<div class="outline-text-4" id="text-7-3-3">
<div class="org-src-container">
<pre class="src src-c">{{ ansible_managed | comment(<span class="org-string">'c'</span>) }}
<span class="org-comment-delimiter">// </span><span class="org-comment">Recommends are as of now still abused in many packages</span>
APT::Install-Recommends <span class="org-string">"0"</span>;
APT::Install-Suggests <span class="org-string">"0"</span>;
</pre>
</div>
</div>
<ol class="org-ol">
<li><a id="org3313d3a"></a>yavdr sudoers drop-in<br />
<div class="outline-text-5" id="text-7-3-3-1">
<p>
Allow the vdr user to restart <code>vdr.service</code> and reboot the system
</p>
<div class="org-src-container">
<pre class="src src-shell">{{ vdr.user }} <span class="org-variable-name">ALL</span>=NOPASSWD: /bin/systemctl --no-block restart vdr.service
{{ vdr.user }} <span class="org-variable-name">ALL</span>=NOPASSWD: /bin/systemctl --no-block reboot
</pre>
</div>
</div>
</li>
</ol>
</div>
</div>
<div id="outline-container-orgbd347e3" class="outline-3">
<h3 id="orgbd347e3"><span class="section-number-3">7.4</span> collect facts about the system with custom modules</h3>
<div class="outline-text-3" id="text-7-4">
</div>
<div id="outline-container-orgf76c0a2" class="outline-4">
<h4 id="orgf76c0a2"><span class="section-number-4">7.4.1</span> variables</h4>
<div class="outline-text-4" id="text-7-4-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-variable-name">first_run</span>: <span class="org-constant">False</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orga0ccd0f" class="outline-4">
<h4 id="orga0ccd0f"><span class="section-number-4">7.4.2</span> tasks</h4>
<div class="outline-text-4" id="text-7-4-2">
</div>
<ol class="org-ol">
<li><a id="org13716c8"></a>main.yml<br />
<div class="outline-text-6" id="text-7-4-2-0-1">
<div class="org-src-container">
<pre class="src src-yaml">- <span class="org-variable-name">name</span>: get information about usb and pci hardware and loaded kernel modules
<span class="org-variable-name">hardware_facts</span>:
<span class="org-variable-name">usb</span>: <span class="org-constant">True</span>
<span class="org-variable-name">pci</span>: <span class="org-constant">True</span>
<span class="org-variable-name">modules</span>: <span class="org-constant">True</span>
<span class="org-variable-name">gpus</span>: <span class="org-constant">True</span>
<span class="org-variable-name">acpi_power_modes</span>: <span class="org-constant">True</span>
<span class="org-variable-name">tags</span>:
- always
- <span class="org-variable-name">debug</span>:
<span class="org-variable-name">var</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">verbosity</span>: 1
<span class="org-variable-name">with_items</span>:
- usb
- pci
- gpus
- modules
- acpi_power_modes
- nvidia_detected
- intel_detected
- amd_detected
- virtualbox_detected
- <span class="org-variable-name">name</span>: known vdr output plugins
<span class="org-variable-name">set_fact</span>:
<span class="org-variable-name">vdr_output_plugins</span>:
- softhddevice
- xineliboutput
- xine
</pre>
</div>
</div>
</li>
</ol>
</div>
</div>
<div id="outline-container-orgaa6a904" class="outline-3">
<h3 id="orgaa6a904"><span class="section-number-3">7.5</span> vdr</h3>
<div class="outline-text-3" id="text-7-5">
</div>
<div id="outline-container-orgae2853f" class="outline-4">
<h4 id="orgae2853f"><span class="section-number-4">7.5.1</span> tasks</h4>
<div class="outline-text-4" id="text-7-5-1">
</div>
<ol class="org-ol">
<li><a id="org7046ca0"></a>install the basic vdr packages<br />
<div class="outline-text-5" id="text-7-5-1-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file: roles/vdr/tasks/main.yml</span>
- <span class="org-variable-name">name</span>: apt | install basic vdr packages
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">install_recommends</span>: <span class="org-constant">no</span>
<span class="org-variable-name">with_items</span>:
- vdr
- vdrctl
- vdr-plugin-dbus2vdr
</pre>
</div>
</div>
</li>
<li><a id="orgc1ec9ea"></a>Add svdrp/svdrp-disc to /etc/services<br />
<div class="outline-text-5" id="text-7-5-1-2">
<div class="org-src-container">
<pre class="src src-yaml">- <span class="org-variable-name">name</span>: add svdrp and svdrp-disc to /etc/services
<span class="org-variable-name">lineinfile</span>:
<span class="org-variable-name">dest</span>: /etc/services
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">line</span>: <span class="org-string">"{{ item }}"</span>
<span class="org-variable-name">with_items</span>:
- <span class="org-string">"svdrp 6419/tcp"</span>
- <span class="org-string">"svdrp-disc 6419/udp"</span>
</pre>
</div>
</div>
</li>
<li><a id="org4440852"></a>Set up the recording directory for the vdr user<br />
<div class="outline-text-5" id="text-7-5-1-3">
<div class="org-src-container">
<pre class="src src-yaml">- <span class="org-variable-name">name</span>: create vdr recdir
<span class="org-variable-name">file</span>:
<span class="org-variable-name">state</span>: directory
<span class="org-variable-name">owner</span>: <span class="org-string">'{{ vdr.user }}'</span>
<span class="org-variable-name">group</span>: <span class="org-string">'{{ vdr.group }}'</span>
<span class="org-variable-name">mode</span>: 0775
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.recdir }}'</span>
- <span class="org-variable-name">name</span>: set option to use hide-first-recording-level patch
<span class="org-variable-name">blockinfile</span>:
<span class="org-variable-name">dest</span>: /etc/vdr/conf.d/04-vdr-hide-first-recordinglevel.conf
<span class="org-variable-name">create</span>: <span class="org-constant">true</span>
<span class="org-variable-name">state</span>: <span class="org-string">"{{ 'present' if vdr.hide_first_recording_level else 'absent' }}"</span>
<span class="org-variable-name">block</span>: |
<span class="org-string">[vdr]</span>
<span class="org-string"> --hide-first-recording-level</span>
- <span class="org-variable-name">name</span>: create local dir in recdir
<span class="org-variable-name">file</span>:
<span class="org-variable-name">state</span>: directory
<span class="org-variable-name">owner</span>: <span class="org-string">'{{ vdr.user }}'</span>
<span class="org-variable-name">group</span>: <span class="org-string">'{{ vdr.group }}'</span>
<span class="org-variable-name">mode</span>: <span class="org-string">'0775'</span>
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.recdir }}/local'</span>
<span class="org-variable-name">when</span>:
vdr.hide_first_recording_level
<span class="org-comment-delimiter"># </span><span class="org-comment">TODO: set recdir, user etc. in /etc/vdr/conf.d/</span>
</pre>
</div>
</div>
</li>
<li><a id="org6562dad"></a>Install additional vdr plugins<br />
<div class="outline-text-5" id="text-7-5-1-4">
<p>
The additional plugins to install can be set in the variable <code>{{vdr_plugins}}</code> in the group variables
</p>
<div class="org-src-container">
<pre class="src src-yaml">- <span class="org-variable-name">name</span>: apt | install additional vdr plugins
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">install_recommends</span>: <span class="org-constant">no</span>
<span class="org-variable-name">with_items</span>:
<span class="org-string">'{{ vdr_plugins | default({}) }}'</span>
<span class="org-variable-name">notify</span>: [ <span class="org-string">'Restart VDR'</span> ]
</pre>
</div>
</div>
</li>
<li><a id="org4d23cf5"></a>copy vdr configuration files (if they don&rsquo;t exist yet)<br />
<div class="outline-text-5" id="text-7-5-1-5">
<div class="org-src-container">
<pre class="src src-yaml">- <span class="org-variable-name">name</span>: ensure vdr is stopped
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: vdr.service
<span class="org-variable-name">state</span>: stopped
<span class="org-variable-name">notify</span>: [ <span class="org-string">'Start VDR'</span> ]
- <span class="org-variable-name">name</span>: <span class="org-string">"vdr configuration | copy remote.conf if it doesn't exist yet"</span>
<span class="org-variable-name">copy</span>:
<span class="org-variable-name">src</span>: files/remote.conf
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.confdir }}/remote.conf'</span>
<span class="org-variable-name">owner</span>: <span class="org-string">'{{ vdr.user }}'</span>
<span class="org-variable-name">group</span>: <span class="org-string">'{{ vdr.group }}'</span>
<span class="org-variable-name">mode</span>: 0644
<span class="org-variable-name">force</span>: <span class="org-constant">no</span>
- <span class="org-variable-name">name</span>: <span class="org-string">"vdr configuration | copy keymacros.conf if it doesn't exist yet"</span>
<span class="org-variable-name">copy</span>:
<span class="org-variable-name">src</span>: files/keymacros.conf
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.confdir }}/keymacros.conf'</span>
<span class="org-variable-name">owner</span>: <span class="org-string">'{{ vdr.user }}'</span>
<span class="org-variable-name">group</span>: <span class="org-string">'{{ vdr.group }}'</span>
<span class="org-variable-name">mode</span>: 0644
<span class="org-variable-name">force</span>: <span class="org-constant">no</span>
</pre>
</div>
</div>
</li>
<li><a id="org28ef02f"></a>start vdr after network-online.target<br />
<div class="outline-text-5" id="text-7-5-1-6">
<div class="org-src-container">
<pre class="src src-yaml">- <span class="org-variable-name">name</span>: create directory for vdr.service systemd drop-in files
<span class="org-variable-name">file</span>:
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">state</span>: directory
<span class="org-variable-name">with_items</span>:
- <span class="org-string">"/etc/systemd/system/vdr.service.d/"</span>
- <span class="org-variable-name">name</span>: systemd-drop-in | start vdr.service after network-online.target
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/systemd/network-online.j2
<span class="org-variable-name">dest</span>: /etc/systemd/system/vdr.service.d/network-online.conf
</pre>
</div>
</div>
</li>
</ol>
</div>
<div id="outline-container-org85c59da" class="outline-4">
<h4 id="org85c59da"><span class="section-number-4">7.5.2</span> templates</h4>
<div class="outline-text-4" id="text-7-5-2">
<p>
Start after network-online.target
</p>
<div class="org-src-container">
<pre class="src src-conf">[<span class="org-type">Unit</span>]
<span class="org-variable-name">After</span>=network-online.target
</pre>
</div>
</div>
</div>
<div id="outline-container-org3a61a90" class="outline-4">
<h4 id="org3a61a90"><span class="section-number-4">7.5.3</span> files</h4>
<div class="outline-text-4" id="text-7-5-3">
</div>
<ol class="org-ol">
<li><a id="org454aeff"></a>remote.conf<br />
<div class="outline-text-5" id="text-7-5-3-1">
<div class="org-src-container">
<pre class="src src-conf">LIRC.Up KEY_UP
LIRC.Down KEY_DOWN
LIRC.Menu KEY_MENU
LIRC.Ok KEY_OK
LIRC.Back KEY_ESC
LIRC.Left KEY_LEFT
LIRC.Right KEY_RIGHT
LIRC.Red KEY_RED
LIRC.Green KEY_GREEN
LIRC.Yellow KEY_YELLOW
LIRC.Blue KEY_BLUE
LIRC.0 KEY_0
LIRC.1 KEY_1
LIRC.2 KEY_2
LIRC.3 KEY_3
LIRC.4 KEY_4
LIRC.5 KEY_5
LIRC.6 KEY_6
LIRC.7 KEY_7
LIRC.8 KEY_8
LIRC.9 KEY_9
LIRC.Info KEY_INFO
LIRC.Play KEY_PLAY
LIRC.Pause KEY_PAUSE
LIRC.Play/Pause KEY_PLAYPAUSE
LIRC.Stop KEY_STOP
LIRC.Record KEY_RECORD
LIRC.FastFwd KEY_FASTFORWARD
LIRC.FastRew KEY_REWIND
LIRC.Next KEY_NEXT
LIRC.Prev KEY_BACK
LIRC.Power KEY_POWER2
LIRC.Channel+ KEY_CHANNELUP
LIRC.Channel- KEY_CHANNELDOWN
LIRC.PrevChannel KEY_PREVIOUS
LIRC.Volume+ KEY_VOLUMEUP
LIRC.Volume- KEY_VOLUMEDOWN
LIRC.Mute KEY_MUTE
LIRC.Subtitles KEY_SUBTITLE
LIRC.Schedule KEY_EPG
LIRC.Channels KEY_CHANNEL
LIRC.Commands KEY_FAVORITES
LIRC.Audio KEY_MODE
LIRC.Timers KEY_TIME
LIRC.Recordings KEY_PVR
LIRC.Setup KEY_SETUP
LIRC.User0 KEY_TEXT
LIRC.User1 KEY_PROG1
LIRC.User2 KEY_PROG2
LIRC.User3 KEY_PROG3
LIRC.User4 KEY_PROG4
LIRC.User5 KEY_AUDIO
LIRC.User6 KEY_VIDEO
LIRC.User7 KEY_IMAGES
LIRC.User8 KEY_FN
LIRC.User9 KEY_SCREEN
XKeySym.Up Up
XKeySym.Down Down
XKeySym.Menu Home
XKeySym.Menu Tab
XKeySym.Menu KP_Home
XKeySym.Ok Return
XKeySym.Ok KP_Enter
XKeySym.Back BackSpace
XKeySym.Back KP_Separator
XKeySym.Left Left
XKeySym.Right Right
XKeySym.Up KP_Up
XKeySym.Down KP_Down
XKeySym.Left KP_Left
XKeySym.Right KP_Right
XKeySym.Red F1
XKeySym.Green F2
XKeySym.Yellow F3
XKeySym.Blue F4
XKeySym.0 0
XKeySym.1 1
XKeySym.2 2
XKeySym.3 3
XKeySym.4 4
XKeySym.5 5
XKeySym.6 6
XKeySym.7 7
XKeySym.8 8
XKeySym.9 9
XKeySym.0 KP_0
XKeySym.1 KP_1
XKeySym.2 KP_2
XKeySym.3 KP_3
XKeySym.4 KP_4
XKeySym.5 KP_5
XKeySym.6 KP_6
XKeySym.7 KP_7
XKeySym.8 KP_8
XKeySym.9 KP_9
XKeySym.Info End
XKeySym.Info KP_End
XKeySym.Pause F9
XKeySym.FastFwd F6
XKeySym.FastRew F5
XKeySym.Power Pause
XKeySym.Volume+ F12
XKeySym.Volume- F11
XKeySym.Volume+ KP_Add
XKeySym.Volume- KP_Subtract
XKeySym.Mute F10
XKeySym.User1 F5
XKeySym.User2 F6
XKeySym.User3 F7
XKeySym.User4 F8
XKeySym.User5 Print
XKeySym.User6 Scroll_Lock
XKeySym.User7 Insert
XKeySym.User8 KP_Divide
XKeySym.User9 KP_Multiply
XKeySym.Audio Menu
XKeySym.Channel+ Prior
XKeySym.Channel- Next
XKeySym.Channel+ KP_Prior
XKeySym.Channel- KP_Next
XKeySym.Volume+ XF86AudioRaiseVolume
XKeySym.Volume- XF86AudioLowerVolume
XKeySym.Mute XF86AudioMute
XKeySym.Stop XF86AudioStop
XKeySym.Play/Pause XF86AudioPlay
XKeySym.Prev XF86AudioPrev
XKeySym.Next XF86AudioNext
</pre>
</div>
</div>
</li>
<li><a id="orgeb49489"></a>keymacros.conf<br />
<div class="outline-text-5" id="text-7-5-3-2">
<div class="org-src-container">
<pre class="src src-conf"><span class="org-comment-delimiter"># </span><span class="org-comment">Remote control key macros for VDR</span>
<span class="org-comment-delimiter">#</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Format:</span>
<span class="org-comment-delimiter">#</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">macrokey key1 key2 key3...</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">macrokey @plugin key1 key2 key3...</span>
<span class="org-comment-delimiter">#</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">See man vdr(5)</span>
Red Recordings
Green Schedule
Yellow Info
Blue Timers
User0 @osdteletext
</pre>
</div>
</div>
</li>
</ol>
</div>
</div>
<div id="outline-container-org2302fa3" class="outline-3">
<h3 id="org2302fa3"><span class="section-number-3">7.6</span> <span class="todo STARTED">STARTED</span> yavdr-network</h3>
<div class="outline-text-3" id="text-7-6">
</div>
<div id="outline-container-orgf532316" class="outline-4">
<h4 id="orgf532316"><span class="section-number-4">7.6.1</span> default variables</h4>
<div class="outline-text-4" id="text-7-6-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-variable-name">install_avahi</span>: <span class="org-constant">true</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orgd66b246" class="outline-4">
<h4 id="orgd66b246"><span class="section-number-4">7.6.2</span> tasks</h4>
<div class="outline-text-4" id="text-7-6-2">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">this playbook sets up network services for a yaVDR installation</span>
- <span class="org-variable-name">name</span>: apt | install packages for network services
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">install_recommends</span>: <span class="org-constant">no</span>
<span class="org-variable-name">with_items</span>:
- avahi-daemon
- avahi-utils
<span class="org-comment-delimiter">#</span><span class="org-comment">- biosdevname # caution: this may change device names after a minimal installation!</span>
- ethtool
- nfs-common
- vdr-addon-avahi-linker
- wakeonlan
<span class="org-comment-delimiter"># </span><span class="org-comment">Does this really work? We need a way to check if an interface supports WOL - Python Skript?</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">- name: check WOL capabilities of network interfaces</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">shell: 'ethtool {{ item }} | grep -Po "(?&lt;=Supports\sWake-on:\s).*$"'</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">register: wol</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">with_items: '{% for interface in ansible_interfaces if interface != 'lo' and interface != 'bond0' %}'</span>
- <span class="org-variable-name">name</span>: restart autofs if running
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: autofs
<span class="org-variable-name">state</span>: restarted
<span class="org-variable-name">enabled</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">masked</span>: <span class="org-constant">no</span>
- <span class="org-variable-name">name</span>: ensure autofs is running
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: autofs
<span class="org-variable-name">state</span>: started
<span class="org-variable-name">enabled</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">masked</span>: <span class="org-constant">no</span>
- <span class="org-variable-name">name</span>: restart avahi-linker if running
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: avahi-linker
<span class="org-variable-name">state</span>: restarted
<span class="org-variable-name">enabled</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">masked</span>: <span class="org-constant">no</span>
- <span class="org-variable-name">name</span>: start avahi-linker
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: avahi-linker
<span class="org-variable-name">state</span>: started
<span class="org-variable-name">enabled</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">masked</span>: <span class="org-constant">no</span>
- <span class="org-variable-name">name</span>: enable and start additional services for avahi-linker
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">state</span>: started
<span class="org-variable-name">enabled</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">masked</span>: <span class="org-constant">no</span>
<span class="org-variable-name">with_items</span>:
- vdr-net-monitor
- vdr-update-monitor
- prevent-umount-on-pause
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgc085d72" class="outline-3">
<h3 id="orgc085d72"><span class="section-number-3">7.7</span> nfs-server</h3>
<div class="outline-text-3" id="text-7-7">
</div>
<div id="outline-container-org1791205" class="outline-4">
<h4 id="org1791205"><span class="section-number-4">7.7.1</span> <span class="todo TODO">TODO</span> avahi-services für NFS beim Stoppen des nfs-kernel-servers depublizieren, beim Start wieder announcen</h4>
</div>
<div id="outline-container-org0b15936" class="outline-4">
<h4 id="org0b15936"><span class="section-number-4">7.7.2</span> tasks</h4>
<div class="outline-text-4" id="text-7-7-2">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
- <span class="org-variable-name">name</span>: install nfs server packages
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">install_recommends</span>: <span class="org-constant">no</span>
<span class="org-variable-name">with_items</span>:
- nfs-kernel-server
- nfs-common
- <span class="org-variable-name">name</span>: create /etc/exports
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/nfs-exports.j2
<span class="org-variable-name">dest</span>: /etc/exports
<span class="org-variable-name">notify</span>: [ <span class="org-string">'Restart NFS Kernel Server'</span> ]
- <span class="org-variable-name">name</span>: populate /etc/avahi/services
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/avahi/service.j2
<span class="org-variable-name">dest</span>: <span class="org-string">'/etc/avahi/services/yavdr-{{ item.key }}.service'</span>
<span class="org-variable-name">with_dict</span>: <span class="org-string">'{{ media_dirs }}'</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org3fcf00a" class="outline-4">
<h4 id="org3fcf00a"><span class="section-number-4">7.7.3</span> templates</h4>
<div class="outline-text-4" id="text-7-7-3">
</div>
<ol class="org-ol">
<li><a id="org07dbbe2"></a>/etc/exports<br />
<div class="outline-text-5" id="text-7-7-3-1">
<div class="org-src-container">
<pre class="src src-conf"><span class="org-variable-name">/srv *(rw,fsid</span>=0,sync,no_subtree_check,all_squash,anongid={{ vdr.gid }},anonuid={{ vdr.uid }})
{% for name, path in media_dirs.iteritems() %}
<span class="org-variable-name">{{ path }} *(rw,fsid</span>={{ loop.index }},sync,no_subtree_check,all_squash,anongid={{ vdr.gid }},anonuid={{ vdr.uid }}{{ <span class="org-string">',insecure'</span> if nfs.insecure else <span class="org-string">''</span> }})
{% endfor %}
</pre>
</div>
</div>
</li>
<li><a id="orgeb0893e"></a>avahi services<br />
<div class="outline-text-5" id="text-7-7-3-2">
<div class="org-src-container">
<pre class="src src-xml"><span class="org-string"><span class="org-nxml-processing-instruction-delimiter">&lt;?</span></span><span class="org-string"><span class="org-nxml-processing-instruction-target">xml</span></span><span class="org-string"> </span><span class="org-string"><span class="org-nxml-processing-instruction-content">version="1.0" standalone='no'</span></span><span class="org-string"><span class="org-nxml-processing-instruction-delimiter">?&gt;</span></span>
<span class="org-string">&lt;!</span><span class="org-string"><span class="org-nxml-text">DOCTYPE service-group SYSTEM "avahi-service.dtd"&gt;</span></span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">service-group</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">name</span> <span class="org-nxml-attribute-local-name">replace-wildcards</span>=<span class="org-string">"yes"</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">{{ item.key|capitalize }} on %h</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">name</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text"> ## Name</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">service</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">type</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">_nfs._tcp</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">type</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">port</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">2049</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">port</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">txt-record</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">path={{ item.value }}</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">txt-record</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text"> ## path to shared Folder</span>
<span class="org-nxml-text"> </span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">txt-record</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">subtype={{ 'vdr' if item.key == 'recordings' else item.key }}</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">txt-record</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text"> ## subtype</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">service</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">service-group</span><span class="org-nxml-tag-delimiter">&gt;</span>
</pre>
</div>
</div>
</li>
</ol>
</div>
</div>
<div id="outline-container-org45821d2" class="outline-3">
<h3 id="org45821d2"><span class="section-number-3">7.8</span> <span class="todo STARTED">STARTED</span> yavdr-remote</h3>
<div class="outline-text-3" id="text-7-8">
</div>
<div id="outline-container-orgfb4acdd" class="outline-4">
<h4 id="orgfb4acdd"><span class="section-number-4">7.8.1</span> default variables</h4>
<div class="outline-text-4" id="text-7-8-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-variable-name">lircd0_socket</span>: /var/run/lirc/lircd0
</pre>
</div>
</div>
</div>
<div id="outline-container-orgfe9103d" class="outline-4">
<h4 id="orgfe9103d"><span class="section-number-4">7.8.2</span> tasks</h4>
<div class="outline-text-4" id="text-7-8-2">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">This role is used to set up the yaVDR remote control configuration.</span>
- <span class="org-variable-name">name</span>: apt | install packages for remote support
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">with_items</span>:
- yavdr-remote
- lirc
<span class="org-variable-name">tags</span>:
- packages
- <span class="org-variable-name">name</span>: add systemd drop-in for lircd to use lircd2uinput
<span class="org-variable-name">block</span>:
- <span class="org-variable-name">name</span>: create directory /etc/systemd/system/lircd.service.d/
<span class="org-variable-name">file</span>:
<span class="org-variable-name">path</span>: /etc/systemd/system/lircd.service.d/
<span class="org-variable-name">state</span>: directory
- <span class="org-variable-name">name</span>: expand template for /etc/systemd/system/lircd.service.d/lircd2uinput.conf
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/lircd.service.d/lircd2uinput.conf.j2
<span class="org-variable-name">dest</span>: /etc/systemd/system/lircd.service.d/lircd2uinput.conf
<span class="org-variable-name">tags</span>:
- config
- <span class="org-variable-name">name</span>: stop, mask and disable lircd.socket, lircd.service, lircmd.service and lircd-uinput.service <span class="org-comment-delimiter"># </span><span class="org-comment">(the default lirc configuration conflicts with eventlircd)</span>
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">enabled</span>: <span class="org-constant">no</span>
<span class="org-variable-name">state</span>: stopped
<span class="org-variable-name">masked</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">with_items</span>:
- lircd.service
- lircd.socket
- lircmd.service
- lircd-uinput.service
<span class="org-variable-name">ignore_errors</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">tags</span>:
- systemd
- <span class="org-variable-name">name</span>: apt | install eventlircd and lircd2uinput
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">with_items</span>:
- eventlircd
- lircd2uinput
<span class="org-variable-name">tags</span>:
- packages
- <span class="org-variable-name">name</span>: configure vdr to read from a lircd-compatible socket
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/03-vdr-lirc.conf.j2
<span class="org-variable-name">dest</span>: /etc/vdr/conf.d/03-vdr-lirc.conf
<span class="org-variable-name">notify</span>: [<span class="org-string">'Restart VDR'</span>]
<span class="org-variable-name">tags</span>:
- config
- <span class="org-variable-name">name</span>: expand template for /etc/rc_maps.cfg
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/rc_maps.cfg.j2
<span class="org-variable-name">dest</span>: /etc/rc_maps.cfg
<span class="org-variable-name">notify</span>: [<span class="org-string">'Trigger Udev'</span>]
<span class="org-variable-name">tags</span>:
- config
</pre>
</div>
</div>
</div>
<div id="outline-container-org2115f47" class="outline-4">
<h4 id="org2115f47"><span class="section-number-4">7.8.3</span> templates</h4>
<div class="outline-text-4" id="text-7-8-3">
</div>
<ol class="org-ol">
<li><a id="org853934e"></a>Systemd Drop-in to start vdr with lirc support<br />
<div class="outline-text-5" id="text-7-8-3-1">
<div class="org-src-container">
<pre class="src src-conf"><span class="org-variable-name">{% if frontend !</span>= <span class="org-string">'kodi'</span> %}
[<span class="org-type">vdr</span>]
<span class="org-variable-name">--lirc</span>=/var/run/lirc/lircd
{% endif %}
</pre>
</div>
</div>
</li>
<li><a id="org92a82a1"></a>Systemd Drop-in to start lircd2uinput with lircd<br />
<div class="outline-text-5" id="text-7-8-3-2">
<div class="org-src-container">
<pre class="src src-conf">[<span class="org-type">Service</span>]
<span class="org-variable-name">ExecStartPost</span>=/usr/bin/lircd2uinput-add /var/run/lirc/lircd0
<span class="org-variable-name">ExecStopPost</span>=/usr/bin/lircd2uinput-remove /var/run/lirc/lircd0
</pre>
</div>
</div>
</li>
<li><a id="org0510acd"></a>create /etc/rc_maps.cfg<br />
<div class="outline-text-5" id="text-7-8-3-3">
<div class="org-src-container">
<pre class="src src-conf"><span class="org-comment-delimiter">#</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Keymaps table</span>
<span class="org-comment-delimiter">#</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">This table creates an association between a keycode file and a kernel</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">driver. It can be used to automatically override a keycode definition.</span>
<span class="org-comment-delimiter">#</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Although not yet tested, it is mented to be added at udev.</span>
<span class="org-comment-delimiter">#</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">To use, you just need to run:</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">./ir-keytable -a</span>
<span class="org-comment-delimiter">#</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Or, if the remote is not the first device:</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">./ir-keytable -a -s rc1 # for RC at rc1</span>
<span class="org-comment-delimiter">#</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Format:</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">driver - name of the driver provided via uevent - use * for any driver</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">table - RC keymap table, provided via uevent - use * for any table</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file - file name. If directory is not specified, it will default to</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">/etc/rc_keymaps.</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">For example:</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">driver table file</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">cx8800 * ./keycodes/rc5_hauppauge_new</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">* rc-avermedia-m135a-rm-jx ./keycodes/kworld_315u</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">saa7134 rc-avermedia-m135a-rm-jx ./keycodes/keycodes/nec_terratec_cinergy_xs</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">em28xx * ./keycodes/kworld_315u</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">* * ./keycodes/rc5_hauppauge_new</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Table to automatically load the rc maps for the bundled IR's provided with the</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">devices supported by the linux kernel</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">driver table file</span>
* rc-adstech-dvb-t-pci adstech_dvb_t_pci
* rc-alink-dtu-m alink_dtu_m
* rc-anysee anysee
* rc-apac-viewcomp apac_viewcomp
* rc-asus-pc39 asus_pc39
* rc-asus-ps3-100 asus_ps3_100
* rc-ati-tv-wonder-hd-600 ati_tv_wonder_hd_600
* rc-ati-x10 ati_x10
* rc-avermedia-a16d avermedia_a16d
* rc-avermedia-cardbus avermedia_cardbus
* rc-avermedia-dvbt avermedia_dvbt
* rc-avermedia-m135a avermedia_m135a
* rc-avermedia-m733a-rm-k6 avermedia_m733a_rm_k6
* rc-avermedia-rm-ks avermedia_rm_ks
* rc-avermedia avermedia
* rc-avertv-303 avertv_303
* rc-azurewave-ad-tu700 azurewave_ad_tu700
* rc-behold-columbus behold_columbus
* rc-behold behold
* rc-budget-ci-old budget_ci_old
* rc-cec cec
* rc-cinergy-1400 cinergy_1400
* rc-cinergy cinergy
* rc-delock-61959 delock_61959
* rc-dib0700-nec dib0700_nec
* rc-dib0700-rc5 dib0700_rc5
* rc-digitalnow-tinytwin digitalnow_tinytwin
* rc-digittrade digittrade
* rc-dm1105-nec dm1105_nec
* rc-dntv-live-dvb-t dntv_live_dvb_t
* rc-dntv-live-dvbt-pro dntv_live_dvbt_pro
* rc-dtt200u dtt200u
* rc-dvbsky dvbsky
* rc-em-terratec em_terratec
* rc-encore-enltv-fm53 encore_enltv_fm53
* rc-encore-enltv encore_enltv
* rc-encore-enltv2 encore_enltv2
* rc-evga-indtube evga_indtube
* rc-eztv eztv
* rc-flydvb flydvb
* rc-flyvideo flyvideo
* rc-fusionhdtv-mce fusionhdtv_mce
* rc-gadmei-rm008z gadmei_rm008z
* rc-genius-tvgo-a11mce genius_tvgo_a11mce
* rc-gotview7135 gotview7135
* rc-hauppauge hauppauge
<span class="org-comment-delimiter">#</span><span class="org-comment">* rc-imon-mce imon_mce</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">* rc-imon-pad imon_pad</span>
* rc-iodata-bctv7e iodata_bctv7e
* rc-it913x-v1 it913x_v1
* rc-it913x-v2 it913x_v2
* rc-kaiomy kaiomy
* rc-kworld-315u kworld_315u
* rc-kworld-pc150u kworld_pc150u
* rc-kworld-plus-tv-analog kworld_plus_tv_analog
* rc-leadtek-y04g0051 leadtek_y04g0051
* rc-lme2510 lme2510
* rc-manli manli
* rc-medion-x10-digitainer medion_x10_digitainer
* rc-medion-x10-or2x medion_x10_or2x
* rc-medion-x10 medion_x10
* rc-msi-digivox-ii msi_digivox_ii
* rc-msi-digivox-iii msi_digivox_iii
* rc-msi-tvanywhere-plus msi_tvanywhere_plus
* rc-msi-tvanywhere msi_tvanywhere
* rc-nebula nebula
* rc-nec-terratec-cinergy-xs nec_terratec_cinergy_xs
* rc-norwood norwood
* rc-npgtech npgtech
* rc-pctv-sedna pctv_sedna
* rc-pinnacle-color pinnacle_color
* rc-pinnacle-grey pinnacle_grey
* rc-pinnacle-pctv-hd pinnacle_pctv_hd
* rc-pixelview-002t pixelview_002t
* rc-pixelview-mk12 pixelview_mk12
* rc-pixelview-new pixelview_new
* rc-pixelview pixelview
* rc-powercolor-real-angel powercolor_real_angel
* rc-proteus-2309 proteus_2309
* rc-purpletv purpletv
* rc-pv951 pv951
* rc-real-audio-220-32-keys real_audio_220_32_keys
* rc-reddo reddo
* rc-snapstream-firefly snapstream_firefly
* rc-streamzap streamzap
* rc-su3000 su3000
* rc-tbs-nec tbs_nec
* rc-technisat-ts35 technisat_ts35
* rc-technisat-usb2 technisat_usb2
* rc-terratec-cinergy-c-pci terratec_cinergy_c_pci
* rc-terratec-cinergy-s2-hd terratec_cinergy_s2_hd
* rc-terratec-cinergy-xs terratec_cinergy_xs
* rc-terratec-slim-2 terratec_slim_2
* rc-terratec-slim terratec_slim
* rc-tevii-nec tevii_nec
* rc-tivo tivo
* rc-total-media-in-hand-02 total_media_in_hand_02
* rc-total-media-in-hand total_media_in_hand
* rc-trekstor trekstor
* rc-tt-1500 tt_1500
* rc-twinhan-dtv-cab-ci twinhan_dtv_cab_ci
* rc-twinhan1027 twinhan_vp1027_dvbs
* rc-videomate-k100 videomate_k100
* rc-videomate-s350 videomate_s350
* rc-videomate-tv-pvr videomate_tv_pvr
* rc-winfast-usbii-deluxe winfast_usbii_deluxe
* rc-winfast winfast
<span class="org-comment-delimiter"># </span><span class="org-comment">* * a800 # found in a800.c</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">* * af9005 # found in af9005-remote.c</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">* * cinergyt2 # found in cinergyT2-core.c</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">* * dvico_mce # found in cxusb.c</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">* * dvico_portable # found in cxusb.c</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">* * d680_dmb # found in cxusb.c</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">* * dibusb # found in dibusb-common.c</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">* * digitv # found in digitv.c</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">* * megasky # found in m920x.c</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">* * tvwalkerir-kbd-i2c rc-hauppauge /lib/udev/rc_keymaps/rc-hauppaugetwin # found in m920x.c</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">* * pinnacle310e # found in m920x.c</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">* * haupp # found in nova-t-usb2.c</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">* * opera1 # found in opera1.c</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">* * vp702x # found in vp702x.c</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">* * vp7045 # found in vp7045.c</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Hauppauge PVR 350</span>
ir-kbd-i2c rc-hauppauge /lib/udev/rc_keymaps/rc-hauppauge
<span class="org-comment-delimiter"># </span><span class="org-comment">imon-pad</span>
imon rc-imon-pad /lib/udev/rc_keymaps/rc-imon-pad
imon rc-imon-mce /lib/udev/rc_keymaps/rc-imon-mce
<span class="org-comment-delimiter"># </span><span class="org-comment">TT-1500/1501</span>
* rc-tt-1500 /lib/udev/rc_keymaps/rc-tt-1500
budget_ci rc-tt-1500 /lib/udev/rc_keymaps/rc-tt-1501
<span class="org-comment-delimiter"># </span><span class="org-comment">rc-rc6-mce</span>
* rc-rc6-mce /lib/udev/rc_keymaps/rc-rc6-mce
<span class="org-comment-delimiter"># </span><span class="org-comment">CIR</span>
ite-cir rc-rc6-mce /lib/udev/rc_keymaps/rc-rc6-mce
nuvoton-cir rc-rc6-mce /lib/udev/rc_keymaps/rc-rc6-mce
<span class="org-comment-delimiter"># </span><span class="org-comment">mceusb</span>
mceusb rc-rc6-mce /lib/udev/rc_keymaps/HOPLOrc6
<span class="org-comment-delimiter"># </span><span class="org-comment">Skystarhd2</span>
mantis_core * /lib/udev/rc_keymaps/skystarhd2
<span class="org-comment-delimiter"># </span><span class="org-comment">Medion X10</span>
ati_remote rc-medion-x10 /lib/udev/rc_keymaps/rc-medion-x10
ati_remote rc-medion-x10-or2x /lib/udev/rc_keymaps/rc-medion-x10-or2x
ati_remote rc-medion-x10-digitainer /lib/udev/rc_keymaps/rc-medion-x10-digitainer
</pre>
</div>
</div>
</li>
</ol>
</div>
<div id="outline-container-orgb92cdd7" class="outline-4">
<h4 id="orgb92cdd7"><span class="section-number-4">7.8.4</span> files</h4>
</div>
</div>
<div id="outline-container-orgf729143" class="outline-3">
<h3 id="orgf729143"><span class="section-number-3">7.9</span> pulseaudio</h3>
<div class="outline-text-3" id="text-7-9">
</div>
<div id="outline-container-org84adf88" class="outline-4">
<h4 id="org84adf88"><span class="section-number-4">7.9.1</span> tasks</h4>
<div class="outline-text-4" id="text-7-9-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
- <span class="org-variable-name">name</span>: apt | install pulseaudio, pavucontrol and vdr-plugin-pulsecontrol
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">install_recommends</span>: <span class="org-constant">no</span>
<span class="org-variable-name">with_items</span>:
- pulseaudio
- pavucontrol
- vdr-plugin-pulsecontrol
- <span class="org-variable-name">name</span>: create /etc/asound.conf with pulseaudio as default device
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/alsa/asound.conf.j2
<span class="org-variable-name">dest</span>: /etc/asound.conf
</pre>
</div>
</div>
</div>
<div id="outline-container-orgd0611f1" class="outline-4">
<h4 id="orgd0611f1"><span class="section-number-4">7.9.2</span> templates</h4>
<div class="outline-text-4" id="text-7-9-2">
<div class="org-src-container">
<pre class="src src-conf"><span class="org-comment-delimiter"># </span><span class="org-comment">Use PulseAudio by default</span>
<span class="org-type">pcm.!default</span> {
type pulse
fallback <span class="org-string">"sysdefault"</span>
<span class="org-type">hint</span> {
show on
description <span class="org-string">"Default ALSA Output (currently PulseAudio Sound Server)"</span>
}
}
<span class="org-type">ctl.!default</span> {
type pulse
fallback <span class="org-string">"sysdefault"</span>
}
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgf44e66d" class="outline-3">
<h3 id="orgf44e66d"><span class="section-number-3">7.10</span> yavdr-xorg</h3>
<div class="outline-text-3" id="text-7-10">
</div>
<div id="outline-container-org0a32e1e" class="outline-4">
<h4 id="org0a32e1e"><span class="section-number-4">7.10.1</span> About the GUI session</h4>
<div class="outline-text-4" id="text-7-10-1">
<p>
The X-Server is started by using the two systemd units <code>xlogin@.service</code> and <code>x@.service</code> provided by the package <b>xlogin</b>. The former is enabled (and started) for the vdr user - which results (using the default settings for the user <b>vdr</b> with the uid <b>666</b>) in the activation of <code>xlogin@vdr.service</code> when reaching the graphical.target. To simplify starting and stopping the X-server and the desktop session a <code>yavdr-xorg.service</code> is provided by the package <code>yavdr-xorg</code>, which depends on the two units mentioned before.
</p>
<p>
<code>x@vt7.service</code> is started automatically as a dependency of <code>xlogin@vdr.service</code> and starts the X-server. <code>xlogin@vdr.service</code> also starts a systemd user session using <code>user@666.service</code>.
In order to use the keyboard layout configured during installation for the X-Server the script <code>write-x11-keyboard-config</code> reads the keyboard configuration from <code>/etc/default/keyboard</code> when starting <code>x@.service</code> and writes the file <code>/etc/X11/xorg.conf.d/00-keyboard.conf</code> (because systemd for Ubuntu (and Debian) has been patched not to create <code>/etc/X11/xorg.conf.d/00-keyboard.conf</code> according to the <code>localectl</code> settings).
</p>
<p>
To prevent stopping the X-server when vdr is running, additional dependencies are set up - see the drop-in rules created in <code>/etc/systemd/system/vdr.service.d/</code>.
</p>
<p>
Basic Services like the session DBus, pulseaudio etc. are started for the <code>default.target</code> of the session.
The openbox autostart script is used to update the systemd session with the needed session variables. It creates a file <code>~/.session-env</code> which is used as an environment file by <code>vdr.service</code> (so the vdr knows the <b>DISPLAY</b> and can access pulseaudio).
</p>
<p>
The autostart script then enables all services to be pulled in by yavdr-desktop.target. As the last step <code>yavdr-desktop.target</code> is startet, which results in staring <code>yavdr-frontend.service</code> and additional Units for a second display (openbox and a browser for osd2eb, if available).
</p>
<p>
In order to achive a clean shutdown of the session, <code>x@t7.service</code> is set as a dependency of the systemd unit instance <code>user@666.service</code> and all processes within the session must be shutdown properly when stopping <code>xlogin@vdr.service</code>. If systemd units are used within the user session, they must stop their process(es) successfully (you should set them up to accept expected exit codes appropriately). The window manager <i>openbox</i> is started using the <code>~/.xinitrc</code> and stopped using the systemd unit <code>exit-wm.service</code> (which runs on stopping the jobs pulled in by the <code>default.target</code> of the session).
</p>
</div>
</div>
<div id="outline-container-orgdc62148" class="outline-4">
<h4 id="orgdc62148"><span class="section-number-4">7.10.2</span> default variables</h4>
<div class="outline-text-4" id="text-7-10-2">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-variable-name">first_run</span>: <span class="org-constant">False</span>
<span class="org-variable-name">preferred_outputs</span>:
- HDMI
- DP
- DVI
- VGA
- TV
<span class="org-variable-name">preferred_resolutions</span>:
- 7680x4320
- 3840x2160
- 1920x1080
- 1280x720
- 720x576
<span class="org-variable-name">preferred_refreshrates</span>:
- 50
- 60
</pre>
</div>
</div>
</div>
<div id="outline-container-orga44a556" class="outline-4">
<h4 id="orga44a556"><span class="section-number-4">7.10.3</span> tasks</h4>
<div class="outline-text-4" id="text-7-10-3">
</div>
<ol class="org-ol">
<li><a id="org7b94a4c"></a>main.yml<br />
<div class="outline-text-5" id="text-7-10-3-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file: roles/yavdr-xorg/tasks/main.yml</span>
- <span class="org-variable-name">import_tasks</span>: setup-xorg.yml
<span class="org-variable-name">tags</span>: [install,update]
- <span class="org-variable-name">import_tasks</span>: detect-xorg.yml
<span class="org-variable-name">tags</span>: [xorg.detect,install]
</pre>
</div>
</div>
</li>
<li><a id="orgf583a7a"></a>setup-xorg.yml<br />
<div class="outline-text-5" id="text-7-10-3-2">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file: roles/yavdr-xorg/tasks/setup-xorg.yml</span>
- <span class="org-variable-name">name</span>: create directories for systemd drop-in files
<span class="org-variable-name">file</span>:
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">state</span>: directory
<span class="org-variable-name">with_items</span>:
- <span class="org-string">"/etc/systemd/system/x@.service.d/"</span>
- <span class="org-string">"/etc/systemd/system/vdr.service.d/"</span>
- <span class="org-string">"/etc/systemd/system/user@{{ vdr.uid }}.service.d/"</span>
- <span class="org-string">"/etc/X11/xorg.conf.d/"</span>
- <span class="org-variable-name">name</span>: systemd-drop-in | add dependency to X-server for vdr.service
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/vdr-xorg.conf
<span class="org-variable-name">dest</span>: /etc/systemd/system/vdr.service.d/vdr-xorg.conf
- <span class="org-variable-name">name</span>: systemd-drop-in | start x@.service after plymouth.service
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/x@service.d/plymouth.conf.j2
<span class="org-variable-name">dest</span>: /etc/systemd/system/x@.service.d/plymouth.conf
- <span class="org-variable-name">name</span>: systemd-drop-in | start x@.service before xlogin@.service
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/x@service.d/xlogin.conf.j2
<span class="org-variable-name">dest</span>: /etc/systemd/system/x@.service.d/xlogin.conf
- <span class="org-variable-name">name</span>: systemd-drop-in | load environment file for vdr.service
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/systemd/vdr-environ.j2
<span class="org-variable-name">dest</span>: /etc/systemd/system/vdr.service.d/load-environ.conf
- <span class="org-variable-name">name</span>: systemd-drop-in | user@{{ vdr.uid }}.service depends on x@vt7.service
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/user@666.service.d/x-dependency.conf.j2
<span class="org-variable-name">dest</span>: <span class="org-string">'/etc/systemd/system/user@{{ vdr.uid }}.service.d/x-dependency.conf'</span>
- <span class="org-variable-name">name</span>: vdr-config | start softhddevice detached and set audio to pulseaudio
<span class="org-variable-name">lineinfile</span>:
<span class="org-variable-name">path</span>: /etc/vdr/conf.avail/softhddevice.conf
<span class="org-variable-name">line</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">with_items</span>:
- <span class="org-string">'-D'</span>
- <span class="org-string">'-w alsa-driver-broken'</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">- '-a pulse' # do we need this with our existing asound.conf?</span>
- <span class="org-variable-name">name</span>: add a login shell for the user vdr
<span class="org-variable-name">user</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ vdr.user }}'</span>
<span class="org-variable-name">shell</span>: <span class="org-string">'/bin/bash'</span>
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">uid</span>: <span class="org-string">'{{ vdr.uid }}'</span>
<span class="org-variable-name">groups</span>: <span class="org-string">'{{ vdr.group }}'</span>
<span class="org-variable-name">append</span>: <span class="org-constant">yes</span>
- <span class="org-variable-name">name</span>: apt | install packages for xorg
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">with_items</span>:
- xlogin
- yavdr-xorg
- xorg
- xserver-xorg-input-all
- xserver-xorg-video-all
- openbox
- python3-dbus2vdr
- python3-yavdrfrontend
- read-edid
- tmux
- vdr-plugin-desktop
- vdr-plugin-osd2web
- feh
<span class="org-comment-delimiter">#</span><span class="org-comment">- yavdr-xorg</span>
- <span class="org-variable-name">name</span>: apt | install packages for Intel IGP
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">with_items</span>:
- xserver-xorg-video-intel
- i965-va-driver-shaders
<span class="org-variable-name">when</span>: intel_detected
- <span class="org-variable-name">name</span>: download yavdr logo
<span class="org-variable-name">block</span>:
- <span class="org-variable-name">file</span>:
<span class="org-variable-name">dest</span>: <span class="org-string">'/usr/share/yavdr/images'</span>
<span class="org-variable-name">state</span>: directory
- <span class="org-variable-name">get_url</span>:
<span class="org-variable-name">url</span>: <span class="org-string">'https://github.com/yavdr/yavdr-base/raw/master/images/yavdr_logo.png'</span>
<span class="org-variable-name">dest</span>: <span class="org-string">'/usr/share/yavdr/images/yavdr_logo.png'</span>
- <span class="org-variable-name">name</span>: command | write keyboard configuration to /etc/X11/xorg.conf.d/00-keyboard.conf
<span class="org-variable-name">command</span>: write-x11-keyboard-config
<span class="org-variable-name">args</span>:
<span class="org-variable-name">creates</span>: /etc/X11/xorg.conf.d/00-keyboard.conf
<span class="org-comment-delimiter"># </span><span class="org-comment">NOTE: write-x11-keyboard-config is in the xlogin package</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Ubuntu's systemd is patched, so it does not create the file automatically</span>
- <span class="org-variable-name">name</span>: add snippet to ignore eventlircd devices in xorg
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/xorg-ignore-eventlircd.conf.j2
<span class="org-variable-name">dest</span>: /etc/X11/xorg.conf.d/40-ignore-eventlircd.conf
- <span class="org-variable-name">name</span>: apt | install desktop programs
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">with_items</span>:
- xterm
- firefox
- kiosk-browser
</pre>
</div>
</div>
</li>
<li><a id="orgb761578"></a>detect-xorg.yml<br />
<div class="outline-text-5" id="text-7-10-3-3">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file: roles/yavdr-xorg/tasks/detect-xorg.yml</span>
- <span class="org-variable-name">name</span>: <span class="org-string">"expand template for x-verbose@.service"</span>
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: <span class="org-string">"templates/systemd/system/x-verbose@.service.j2"</span>
<span class="org-variable-name">dest</span>: <span class="org-string">"/etc/systemd/system/x-verbose@.service"</span>
- <span class="org-variable-name">name</span>: <span class="org-string">"expand template for xorg-verbose.conf"</span>
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: <span class="org-string">"templates/xorg-verbose.conf.j2"</span>
<span class="org-variable-name">dest</span>: <span class="org-string">"/etc/X11/xorg-verbose.conf"</span>
- <span class="org-variable-name">name</span>: Stop VDR
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: vdr.service
<span class="org-variable-name">state</span>: stopped
<span class="org-variable-name">enabled</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">notify</span>: [<span class="org-string">'Start VDR'</span>]
- <span class="org-variable-name">name</span>: Stop yavdr-xorg
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'yavdr-xorg'</span>
<span class="org-variable-name">state</span>: stopped
<span class="org-variable-name">enabled</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">notify</span>: [<span class="org-string">'Start yavdr-xorg'</span>]
- <span class="org-variable-name">name</span>: Stop xlogin
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'xlogin@{{ vdr.user }}.service'</span>
<span class="org-variable-name">state</span>: stopped
<span class="org-variable-name">notify</span>: [<span class="org-string">'Start xlogin'</span>]
- <span class="org-variable-name">name</span>: Stop x
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: x@vt7.service
<span class="org-variable-name">state</span>: stopped
- <span class="org-variable-name">name</span>: Workaround for wrong connector names on first run
<span class="org-variable-name">block</span>:
- <span class="org-variable-name">name</span>: <span class="org-string">"wait a little bit before starting x-verbose@vt7.service (needed?)"</span>
<span class="org-variable-name">wait_for</span>:
<span class="org-variable-name">timeout</span>: 10
- <span class="org-variable-name">name</span>: <span class="org-string">"start x-verbose@.service"</span>
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: <span class="org-string">"x-verbose@vt7.service"</span>
<span class="org-variable-name">state</span>: started
<span class="org-variable-name">enabled</span>: <span class="org-constant">false</span>
<span class="org-variable-name">masked</span>: <span class="org-constant">false</span>
<span class="org-variable-name">daemon_reload</span>: <span class="org-constant">true</span>
- <span class="org-variable-name">name</span>: <span class="org-string">"wait a little bit, so X has some time to start up (needed?)"</span>
<span class="org-variable-name">wait_for</span>:
<span class="org-variable-name">timeout</span>: 3
- <span class="org-variable-name">name</span>: <span class="org-string">"stop x-verbose@vt7.service"</span>
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: <span class="org-string">"x-verbose@vt7.service"</span>
<span class="org-variable-name">state</span>: stopped
<span class="org-variable-name">enabled</span>: <span class="org-constant">false</span>
<span class="org-variable-name">masked</span>: <span class="org-constant">true</span>
<span class="org-variable-name">when</span>: first_run
- <span class="org-variable-name">name</span>: <span class="org-string">"wait a little bit, so X has some time to shut down (needed?)"</span>
<span class="org-variable-name">wait_for</span>:
<span class="org-variable-name">timeout</span>: 3
- <span class="org-variable-name">name</span>: <span class="org-string">"trigger udevadm reload"</span>
<span class="org-variable-name">command</span>: <span class="org-string">'udevadm trigger '</span>
- <span class="org-variable-name">name</span>: <span class="org-string">"wait a little bit, so udev has some time to reapply rules (needed?)"</span>
<span class="org-variable-name">wait_for</span>:
<span class="org-variable-name">timeout</span>: 3
- <span class="org-variable-name">name</span>: <span class="org-string">"start x-verbose@.service"</span>
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: <span class="org-string">"x-verbose@vt7.service"</span>
<span class="org-variable-name">state</span>: started
<span class="org-variable-name">enabled</span>: <span class="org-constant">false</span>
<span class="org-variable-name">masked</span>: <span class="org-constant">false</span>
<span class="org-variable-name">daemon_reload</span>: <span class="org-constant">true</span>
- <span class="org-variable-name">name</span>: <span class="org-string">"wait a little bit, so X has some time to start up (needed?)"</span>
<span class="org-variable-name">wait_for</span>:
<span class="org-variable-name">timeout</span>: 3
- <span class="org-variable-name">name</span>: <span class="org-string">"detect xorg configuration"</span>
<span class="org-variable-name">xrandr_facts</span>:
<span class="org-variable-name">preferred_refreshrates</span>: <span class="org-string">'{{ preferred_refreshrates }}'</span>
<span class="org-variable-name">preferred_resolutions</span>: <span class="org-string">'{{ preferred_resolutions }}'</span>
<span class="org-variable-name">preferred_outputs</span>: <span class="org-string">'{{ preferred_outputs }}'</span>
- <span class="org-variable-name">debug</span>:
<span class="org-variable-name">var</span>: xorg.primary
- <span class="org-variable-name">debug</span>:
<span class="org-variable-name">var</span>: xorg.secondary
<span class="org-variable-name">when</span>: xorg.secondary is defined
- <span class="org-variable-name">name</span>: <span class="org-string">"stop x-verbose@vt7.service"</span>
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: <span class="org-string">"x-verbose@vt7.service"</span>
<span class="org-variable-name">state</span>: stopped
<span class="org-variable-name">enabled</span>: <span class="org-constant">false</span>
<span class="org-variable-name">masked</span>: <span class="org-constant">true</span>
- <span class="org-variable-name">name</span>: <span class="org-string">"wait a little bit, so X has some time to shut down (needed?)"</span>
<span class="org-variable-name">wait_for</span>:
<span class="org-variable-name">timeout</span>: 3
- <span class="org-variable-name">name</span>: save results
<span class="org-variable-name">block</span>:
- <span class="org-variable-name">name</span>: ensure facts.d directory exists
<span class="org-variable-name">file</span>:
<span class="org-variable-name">state</span>: directory
<span class="org-variable-name">path</span>: /etc/ansible/facts.d
- <span class="org-variable-name">name</span>: write xorg variable as local fact
<span class="org-variable-name">copy</span>:
<span class="org-variable-name">content</span>: <span class="org-string">'{{ {"xorg": xorg} | to_nice_json }}'</span>
<span class="org-variable-name">dest</span>: /etc/ansible/facts.d/xorg.fact
- <span class="org-variable-name">name</span>: write xrandr variable as local fact
<span class="org-variable-name">copy</span>:
<span class="org-variable-name">content</span>: <span class="org-string">'{{ {"xrandr": xrandr} | to_nice_json }}'</span>
<span class="org-variable-name">dest</span>: /etc/ansible/facts.d/xrandr.fact
<span class="org-variable-name">when</span>:
- xrandr is defined
- xorg is defined
- <span class="org-variable-name">name</span>: update xorg and xrandr variable with values from local facts if needed
<span class="org-variable-name">set_fact</span>:
<span class="org-variable-name">xorg</span>: <span class="org-string">'{{ ansible_local.xorg }}'</span>
<span class="org-variable-name">xrandr</span>: <span class="org-string">'{{ ansible_local.xrandr }}'</span>
<span class="org-variable-name">when</span>:
- xrandr is undefined
- xorg is undefined
<span class="org-comment-delimiter"># </span><span class="org-comment">TODO: expand template for xorg.conf (or snippets)</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">with respect for the available graphics card driver</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">nvidia, noveau, intel, radeon</span>
- <span class="org-variable-name">name</span>: nvidia related config
<span class="org-variable-name">block</span>:
- <span class="org-variable-name">name</span>: create xorg.conf (for nvidia driver)
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/xorg.conf.j2
<span class="org-variable-name">dest</span>: /etc/X11/xorg.conf
<span class="org-variable-name">backup</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">when</span>:
- nvidia_detected
</pre>
</div>
</div>
</li>
</ol>
</div>
<div id="outline-container-orga64e1c1" class="outline-4">
<h4 id="orga64e1c1"><span class="section-number-4">7.10.4</span> templates</h4>
<div class="outline-text-4" id="text-7-10-4">
</div>
<ol class="org-ol">
<li><a id="orgb791e7e"></a>xorg<br />
<ol class="org-ol">
<li><a id="org1273eb1"></a>x-verbose@.service<br />
<div class="outline-text-6" id="text-7-10-4-1-1">
<div class="org-src-container">
<pre class="src src-conf"><span class="org-comment-delimiter"># </span><span class="org-comment">file: roles/yavdr-xorg/templates/systemd/system/x-verbose@.service.j2</span>
[<span class="org-type">Unit</span>]
<span class="org-variable-name">Description</span>=X with verbose logging on %I
<span class="org-variable-name">Wants</span>=graphical.target
<span class="org-variable-name">Before</span>=graphical.target
[<span class="org-type">Service</span>]
<span class="org-variable-name">Type</span>=forking
<span class="org-variable-name">ExecStart</span>=/usr/bin/x-daemon -logverbose 6 -noreset %I -config /etc/X11/xorg-verbose.conf
</pre>
</div>
</div>
</li>
<li><a id="org1934190"></a>Drop-in snippet for x@.service<br />
<div class="outline-text-6" id="text-7-10-4-1-2">
<div class="org-src-container">
<pre class="src src-conf">[<span class="org-type">Unit</span>]
<span class="org-variable-name">After</span>=plymouth.service
</pre>
</div>
<div class="org-src-container">
<pre class="src src-conf">[<span class="org-type">Unit</span>]
<span class="org-variable-name">Before</span>=xlogin@{{ vdr.user }}.service
</pre>
</div>
<div class="org-src-container">
<pre class="src src-conf">[<span class="org-type">Unit</span>]
<span class="org-variable-name">Wants</span>=x@vt7.service
<span class="org-variable-name">After</span>=x@vt7.service
[<span class="org-type">Service</span>]
<span class="org-variable-name">TimeoutStopSec</span>=20
<span class="org-variable-name">KillMode</span>=mixed
</pre>
</div>
</div>
</li>
<li><a id="orgb9bd6fa"></a>Drop-in snippet for vdr.service<br />
<div class="outline-text-6" id="text-7-10-4-1-3">
<div class="org-src-container">
<pre class="src src-conf">{{ ansible_managed | comment }}
[<span class="org-type">Unit</span>]
<span class="org-variable-name">After</span>=x@vt7.service
<span class="org-variable-name">Wants</span>=x@vt7.service
<span class="org-comment-delimiter">#</span><span class="org-comment">BindsTo=x@vt7.service</span>
</pre>
</div>
</div>
</li>
<li><a id="orgebb3039"></a>xorg.conf snippets<br />
<div class="outline-text-6" id="text-7-10-4-1-4">
<div class="org-src-container">
<pre class="src src-conf">{{ ansible_managed | comment }}
Section <span class="org-string">"InputClass"</span>
Identifier <span class="org-string">"exclude eventlircd devices"</span>
MatchTag <span class="org-string">"eventlircd"</span>
Option <span class="org-string">"Ignore"</span> <span class="org-string">"True"</span>
EndSection
</pre>
</div>
</div>
</li>
<li><a id="org919c9c7"></a>xorg.conf<br />
<div class="outline-text-6" id="text-7-10-4-1-5">
<div class="org-src-container">
<pre class="src src-conf">Section <span class="org-string">"Device"</span>
Identifier <span class="org-string">"nvidia"</span>
Driver <span class="org-string">"nvidia"</span>
Option <span class="org-string">"DynamicTwinView"</span> <span class="org-string">"true"</span>
Option <span class="org-string">"NoFlip"</span> <span class="org-string">"false"</span>
EndSection
Section <span class="org-string">"Screen"</span>
Identifier <span class="org-string">"screen"</span>
Device <span class="org-string">"nvidia"</span>
EndSection
</pre>
</div>
<div class="org-src-container">
<pre class="src src-conf">{{ ansible_managed | comment }}
Section <span class="org-string">"ServerLayout"</span>
Identifier <span class="org-string">"Layout0"</span>
Screen 0 <span class="org-string">"Screen0"</span> 0 0
{% if xorg.secondary is defined %}
Screen 1 <span class="org-string">"Screen1"</span> RightOf <span class="org-string">"Screen0"</span>
{% endif %}
<span class="org-comment-delimiter">#</span><span class="org-comment">InputDevice "Keyboard0" "CoreKeyboard"</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">InputDevice "Mouse0" "CorePointer"</span>
Option <span class="org-string">"Xinerama"</span> <span class="org-string">"0"</span>
EndSection
Section <span class="org-string">"InputClass"</span>
Identifier <span class="org-string">"exclude eventlircd devices"</span>
MatchTag <span class="org-string">"eventlircd"</span>
Option <span class="org-string">"Ignore"</span> <span class="org-string">"True"</span>
EndSection
Section <span class="org-string">"Monitor"</span>
Identifier <span class="org-string">"Monitor0"</span>
VendorName <span class="org-string">"{{ xorg.primary.vendor }}"</span>
ModelName <span class="org-string">"{{ xorg.primary.model }}"</span>
Option <span class="org-string">"DPMS"</span>
Option <span class="org-string">"ExactModeTimingsDVI"</span> <span class="org-string">"True"</span>
EndSection
Section <span class="org-string">"Device"</span>
Identifier <span class="org-string">"Device0"</span>
Driver <span class="org-string">"nvidia"</span>
VendorName <span class="org-string">"NVIDIA Corporation"</span>
Option <span class="org-string">"NoLogo"</span> <span class="org-string">"true"</span>
{% if xorg.primary.bus_id is defined %}
BoardName <span class="org-string">"{{ xorg.primary.gpu_name }}"</span>
BusID <span class="org-string">"{{ xorg.primary.bus_id }}"</span>
{% else %}
BoardName <span class="org-string">"Unknown"</span>
{% endif %}
Screen 0
Option <span class="org-string">"ConnectedMonitor"</span> <span class="org-string">"{{ xorg.primary.connector }}{% if xorg.secondary is defined %}, {{ xorg.secondary.connector }}{% endif %}"</span>
Option <span class="org-string">"CustomEDID"</span> <span class="org-string">"{{ xorg.primary.connector }}:/etc/X11/edid.{{ xorg.primary.connector }}.bin{% if xorg.secondary is defined %};{{ xorg.secondary.connector }}:/etc/X11/edid.{{ xorg.secondary.connector }}.bin{% endif %}"</span>
EndSection
Section <span class="org-string">"Screen"</span>
Identifier <span class="org-string">"Screen0"</span>
Device <span class="org-string">"Device0"</span>
Monitor <span class="org-string">"Monitor0"</span>
DefaultDepth 24
Option <span class="org-string">"nvidiaXineramaInfoOrder"</span> <span class="org-string">"{{ xorg.primary.connector }}"</span>
Option <span class="org-string">"UseDisplayDevice"</span> <span class="org-string">"{{ xorg.primary.connector }}"</span>
Option <span class="org-string">"metamodes"</span> <span class="org-string">"{{ xorg.primary.connector }}: {{ xorg.primary.mode }} +0+0 {ForceCompositionPipeline=Off, ForceFullCompositionPipeline=Off}"</span>
Option <span class="org-string">"AllowIndirectGLXProtocol"</span> <span class="org-string">"off"</span>
Option <span class="org-string">"TripleBuffer"</span> <span class="org-string">"on"</span>
Option <span class="org-string">"SLI"</span> <span class="org-string">"Off"</span>
Option <span class="org-string">"MultiGPU"</span> <span class="org-string">"Off"</span>
Option <span class="org-string">"BaseMosaic"</span> <span class="org-string">"off"</span>
SubSection <span class="org-string">"Display"</span>
Depth 24
EndSubSection
EndSection
{% if xorg.secondary is defined %}
Section <span class="org-string">"Device"</span>
Identifier <span class="org-string">"Device1"</span>
Driver <span class="org-string">"nvidia"</span>
VendorName <span class="org-string">"NVIDIA Corporation"</span>
Option <span class="org-string">"NoLogo"</span> <span class="org-string">"true"</span>
{% if xorg.secondary.bus_id is defined %}
BoardName <span class="org-string">"{{ xorg.primary.gpu_name }}"</span>
BusID <span class="org-string">"{{ xorg.primary.bus_id }}"</span>
{% else %}
BoardName <span class="org-string">"Unknown"</span>
{% endif %}
Screen 1
EndSection
Section <span class="org-string">"Monitor"</span>
Identifier <span class="org-string">"Monitor1"</span>
VendorName <span class="org-string">"{{ xorg.secondary.vendor }}"</span>
ModelName <span class="org-string">"{{ xorg.secondary.model }}"</span>
EndSection
Section <span class="org-string">"Screen"</span>
Identifier <span class="org-string">"Screen1"</span>
Device <span class="org-string">"Device1"</span>
Monitor <span class="org-string">"Monitor1"</span>
DefaultDepth 24
Option <span class="org-string">"nvidiaXineramaInfoOrder"</span> <span class="org-string">"{{ xorg.secondary.connector }}"</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">Option "ConnectedMonitor" "{{ xorg.secondary.connector }}"</span>
Option <span class="org-string">"UseDisplayDevice"</span> <span class="org-string">"{{ xorg.secondary.connector }}"</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">Option "CustomEDID" "{{ xorg.secondary.connector }}:/etc/X11/edid.{{ xorg.secondary.connector }}.bin"</span>
Option <span class="org-string">"metamodes"</span> <span class="org-string">"{{ xorg.secondary.connector }}: {{ xorg.secondary.mode }} +0+0 {ForceCompositionPipeline=Off, ForceFullCompositionPipeline=Off}"</span>
Option <span class="org-string">"AllowIndirectGLXProtocol"</span> <span class="org-string">"off"</span>
Option <span class="org-string">"TripleBuffer"</span> <span class="org-string">"on"</span>
Option <span class="org-string">"SLI"</span> <span class="org-string">"Off"</span>
Option <span class="org-string">"MultiGPU"</span> <span class="org-string">"Off"</span>
Option <span class="org-string">"BaseMosaic"</span> <span class="org-string">"off"</span>
SubSection <span class="org-string">"Display"</span>
Depth 24
EndSubSection
EndSection
{% endif %}
Section <span class="org-string">"Extensions"</span>
Option <span class="org-string">"Composite"</span> <span class="org-string">"Disable"</span>
EndSection
</pre>
</div>
<div class="org-src-container">
<pre class="src src-shell">{{ ansible_managed | comment }}
Section <span class="org-string">"ServerLayout"</span>
Identifier <span class="org-string">"Layout0"</span>
Screen 0 <span class="org-string">"Screen0"</span>
{% if xorg.best_tv_mode.secondary is defined %}
Screen 1 <span class="org-string">"Screen1"</span> RightOf <span class="org-string">"Screen0"</span>
{% endif %}
InputDevice <span class="org-string">"Keyboard0"</span> <span class="org-string">"CoreKeyboard"</span>
InputDevice <span class="org-string">"Mouse0"</span> <span class="org-string">"CorePointer"</span>
EndSection
Section <span class="org-string">"InputDevice"</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">generated from default</span>
Identifier <span class="org-string">"Mouse0"</span>
Driver <span class="org-string">"mouse"</span>
Option <span class="org-string">"Protocol"</span> <span class="org-string">"auto"</span>
Option <span class="org-string">"Device"</span> <span class="org-string">"/dev/psaux"</span>
Option <span class="org-string">"Emulate3Buttons"</span> <span class="org-string">"no"</span>
Option <span class="org-string">"ZAxisMapping"</span> <span class="org-string">"4 5"</span>
EndSection
<span class="org-comment-delimiter"># </span><span class="org-comment">ignore devices with eventlircd tag </span>
<span class="org-comment-delimiter"># </span><span class="org-comment">ENV{ID_INPUT.tags}+="eventlircd"</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">must be set by an udev rule</span>
Section <span class="org-string">"InputClass"</span>
Identifier <span class="org-string">"ignore eventlircd devices"</span>
MatchTag <span class="org-string">"eventlircd"</span>
Option <span class="org-string">"Ignore"</span> <span class="org-string">"True"</span>
EndSection
Section <span class="org-string">"InputDevice"</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">generated from default</span>
Identifier <span class="org-string">"Keyboard0"</span>
Driver <span class="org-string">"kbd"</span>
EndSection
Section <span class="org-string">"Monitor"</span>
Identifier <span class="org-string">"Monitor0"</span>
VendorName <span class="org-string">"Unknown"</span>
ModelName <span class="org-string">"Unknown"</span>
{# TODO: VGA2SCART support (<span class="org-keyword">if</span> needed)
{% if system.x11.display.0.default == <span class="org-string">"VGA2Scart_4_3"</span> or system.x11.display.0.default == <span class="org-string">"VGA2Scart_16_9"</span> %}
HorizSync 14-17
VertRefresh 49-61
{% if system.x11.display.0.default == <span class="org-string">"VGA2Scart_4_3"</span> %}
Modeline <span class="org-string">"VGA2Scart_4_3"</span> 13.875 720 744 808 888 576 580 585 625 -HSync -Vsync interlace
{% elif system.x11.display.0.default == <span class="org-string">"VGA2Scart_16_9"</span> %}
Modeline <span class="org-string">"VGA2Scart_16_9"</span> 19 1024 1032 1120 1216 576 581 586 625 -Hsync -Vsync interlace
{% endif %}
{% endif %}
<span class="org-comment-delimiter">#</span><span class="org-comment">}</span>
Option <span class="org-string">"DPMS"</span>
Option <span class="org-string">"ExactModeTimingsDVI"</span> <span class="org-string">"True"</span>
EndSection
{% if xrandr.best_tv_mode.secondary is defined %}
Section <span class="org-string">"Monitor"</span>
Identifier <span class="org-string">"Monitor1"</span>
VendorName <span class="org-string">"Unknown"</span>
ModelName <span class="org-string">"Unknown"</span>
{#
{% if system.x11.display.1.default<span class="org-keyword"> in</span> (<span class="org-string">"VGA2Scart_4_3"</span>, <span class="org-string">"VGA2Scart_16_9"</span>) %}
HorizSync 14-17
VertRefresh 49-61
{% if system.x11.display.1.default == <span class="org-string">"VGA2Scart_4_3"</span> %}
Modeline <span class="org-string">"VGA2Scart_4_3"</span> 13.875 720 744 808 888 576 580 585 625 -HSync -Vsync interlace
{% elif system.x11.display.1.default == <span class="org-string">"VGA2Scart_16_9"</span> %}
Modeline <span class="org-string">"VGA2Scart_16_9"</span> 19 1024 1032 1120 1216 576 581 586 625 -Hsync -Vsync interlace
{% endif %}
Option <span class="org-string">"DPMS"</span>
Option <span class="org-string">"ExactModeTimingsDVI"</span> <span class="org-string">"True"</span>
{% endif %}
<span class="org-comment-delimiter">#</span><span class="org-comment">}</span>
EndSection
{% endif %}
Section <span class="org-string">"Device"</span>
Identifier <span class="org-string">"Device0"</span>
{% if system.hardware.nvidia.detected %}
Driver <span class="org-string">"nvidia"</span>
VendorName <span class="org-string">"NVIDIA Corporation"</span>
{% endif %}
Screen 0
Option <span class="org-string">"DPI"</span> <span class="org-string">"100x100"</span>
{% if system.hardware.nvidia.busid is defined and system.hardware.busid %}
BusID <span class="org-string">"PCI: {{ system.hardware.nvidia.busid }}"</span>
{% endif %}
Option <span class="org-string">"NoLogo"</span> <span class="org-string">"True"</span>
Option <span class="org-string">"UseEvents"</span> <span class="org-string">"True"</span>
Option <span class="org-string">"TripleBuffer"</span> <span class="org-string">"False"</span>
Option <span class="org-string">"AddARGBGLXVisuals"</span> <span class="org-string">"True"</span>
Option <span class="org-string">"TwinView"</span> <span class="org-string">"0"</span>
Option <span class="org-string">"DynamicTwinView"</span> <span class="org-string">"0"</span>
Option <span class="org-string">"OnDemandVBlankinterrupts"</span> <span class="org-string">"on"</span>
Option <span class="org-string">"FlatPanelProperties"</span> <span class="org-string">"Scaling = Native"</span>
EndSection
{% if xrandr.best_tv_mode.secondary is defined %}
Section <span class="org-string">"Device"</span>
Identifier <span class="org-string">"Device1"</span>
{% if system.hardware.nvidia.detected %}
Driver <span class="org-string">"nvidia"</span>
VendorName <span class="org-string">"NVIDIA Corporation"</span>
{% endif %}
Screen 1
{% if system.hardware.nvidia.busid is defined and system.hardware.nvidia.busid %}
BusID <span class="org-string">"PCI: {{ system.hardware.nvidia.busid }}"</span>
{% endif %}
Option <span class="org-string">"NoLogo"</span> <span class="org-string">"True"</span>
Option <span class="org-string">"UseEvents"</span> <span class="org-string">"True"</span>
Option <span class="org-string">"TripleBuffer"</span> <span class="org-string">"False"</span>
Option <span class="org-string">"AddARGBGLXVisuals"</span> <span class="org-string">"True"</span>
Option <span class="org-string">"TwinView"</span> <span class="org-string">"0"</span>
Option <span class="org-string">"DynamicTwinView"</span> <span class="org-string">"0"</span>
EndSection
{% endif %}
Section <span class="org-string">"Screen"</span>
Identifier <span class="org-string">"Screen0"</span>
Device <span class="org-string">"Device0"</span>
Monitor <span class="org-string">"Monitor0"</span>
DefaultDepth 24
SubSection <span class="org-string">"Display"</span>
Depth 24
{% if xrandr.best_tv_mode.primary is defined %}
Modes <span class="org-string">"{{ xrandr.best_tv_mode.primary.mode }}"</span>{#{% for mode<span class="org-keyword"> in</span> xrandr %}{% if mode != system.x11.display.0.default %} <span class="org-string">"{{ mode }}"</span>{% endif %}{% endfor %}#} nvidia-auto-select
{% elif system.hardware.nvidia.detected == 1 %}
Modes <span class="org-string">"nvidia-auto-select"</span>
{% endif %}
EndSubSection
{% if system.x11.display.0.default or system.x11.default %}
{% if system.x11.display.0.device is definded and system.x11.display.0.device %}
Option <span class="org-string">"ConnectedMonitor"</span> {{ system.x11.display.0.device }}
{% else %}
Option <span class="org-string">"ConnectedMonitor"</span> {{ system.x11.default }}
{% endif %}
<span class="org-comment-delimiter"># </span><span class="org-comment">Option "ConnectedMonitor" "&lt;?cs if:(?system.x11.display.0.device) ?&gt;&lt;?cs call:fix_display_name(system.x11.display.0.device) ?&gt;&lt;?cs else ?&gt;&lt;?cs var:system.x11.default ?&gt;&lt;?cs /if ?&gt;&lt;?cs if:(?system.x11.dualhead.enabled &amp;&amp; system.x11.dualhead.enabled == 1) ?&gt;, &lt;?cs call:fix_display_name(system.x11.display.1.device) ?&gt;&lt;?cs /if ?&gt;"</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">Option "ConnectedMonitor"</span>
<span class="org-string">"&lt;?cs if:(?system.x11.display.0.device) ?&gt;</span>
<span class="org-string"> &lt;?cs call:fix_display_name(system.x11.display.0.device) ?&gt;</span>
<span class="org-string"> &lt;?cs else ?&gt;</span>
<span class="org-string"> &lt;?cs var:system.x11.default ?&gt;</span>
<span class="org-string"> &lt;?cs /if ?&gt;</span>
<span class="org-string"> &lt;?cs if:(?system.x11.dualhead.enabled &amp;&amp; system.x11.dualhead.enabled == 1) ?&gt;, &lt;?cs call:fix_display_name(system.x11.display.1.device) ?&gt;&lt;?cs /if ?&gt;"</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Option "UseDisplayDevice" "&lt;?cs if:(?system.x11.display.0.device) ?&gt;&lt;?cs call:fix_display_name(system.x11.display.0.device) ?&gt;&lt;?cs else ?&gt;&lt;?cs var:system.x11.default ?&gt;&lt;?cs /if ?&gt;"</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">&lt;?cs /if ?&gt;</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">&lt;?cs if:(?system.hardware.nvidia.0.edid &amp;&amp; system.hardware.nvidia.0.edid == "1") ?&gt;</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Option "CustomEDID" "&lt;?cs call:fix_display_name(system.x11.display.0.device) ?&gt;:/etc/X11/edid.0.yavdr"</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">&lt;?cs /if ?&gt;</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">&lt;?cs if:(system.hardware.nvidia.detected == 1 &amp;&amp; ?system.x11.display.0.device) ?&gt;</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Option "MetaModes" "&lt;?cs call:fix_display_name(system.x11.display.0.device) ?&gt;: &lt;?cs var:system.x11.display.0.default ?&gt; { ViewPortIn=&lt;?cs var:system.x11.display.0.viewport.in.x ?&gt;x&lt;?cs var:system.x11.display.0.viewport.in.y ?&gt;, ViewPortOut=&lt;?cs var:system.x11.display.0.viewport.out.x ?&gt;x&lt;?cs var:system.x11.display.0.viewport.out.y ?&gt;+&lt;?cs var:system.x11.display.0.viewport.out.plusx ?&gt;+&lt;?cs var:system.x11.display.0.viewport.out.plusy ?&gt; }"</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">&lt;?cs each:mode = system.x11.display.0.mode ?&gt;&lt;?cs if:(mode != system.x11.display.0.default) ?&gt;</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Option "MetaModes" "&lt;?cs call:fix_display_name(system.x11.display.0.device) ?&gt;: &lt;?cs var:mode ?&gt; { ViewPortIn=&lt;?cs var:system.x11.display.0.viewport.in.x ?&gt;x&lt;?cs var:system.x11.display.0.viewport.in.y ?&gt;, ViewPortOut=&lt;?cs var:system.x11.display.0.viewport.out.x ?&gt;x&lt;?cs var:system.x11.display.0.viewport.out.y ?&gt;+&lt;?cs var:system.x11.display.0.viewport.out.plusx ?&gt;+&lt;?cs var:system.x11.display.0.viewport.out.plusy ?&gt; }"&lt;?cs /if ?&gt;&lt;?cs /each ?&gt; </span>
{% endif %}
EndSection
{% if system.x11.dualhead.enabled == <span class="org-string">"1"</span> %}
Section <span class="org-string">"Screen"</span>
Identifier <span class="org-string">"Screen1"</span>
Device <span class="org-string">"Device1"</span>
Monitor <span class="org-string">"Monitor1"</span>
DefaultDepth 24
SubSection <span class="org-string">"Display"</span>
Depth 24
{% if system.x11.display.0.default is defined and system.x11.display.0.default %}
Modes <span class="org-string">"{{ system.x11.display.1.default }}"</span>{% for mode<span class="org-keyword"> in</span> system.x11.display.1.mode %}{% if mode != system.x11.display.1.default %} <span class="org-string">"{{ mode }}"</span>{% endif %}{% endfor %}
{% elif system.hardware.nvidia.detected == <span class="org-string">"1"</span> %}
Modes <span class="org-string">"nvidia-auto-select"</span>
{% endif %}
EndSubSection
<span class="org-comment-delimiter"># </span><span class="org-comment">&lt;?cs if:(?system.x11.display.1.default &amp;&amp; system.x11.display.1.default != "" &amp;&amp; system.x11.display.1.default != "disabled") ?&gt;</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Option "UseDisplayDevice" "&lt;?cs call:fix_display_name(system.x11.display.1.device) ?&gt;"</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">&lt;?cs /if ?&gt;</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">&lt;?cs if:(?system.hardware.nvidia.1.edid &amp;&amp; system.hardware.nvidia.1.edid == "1") ?&gt;</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Option "CustomEDID" "&lt;?cs call:fix_display_name(system.x11.display.1.device) ?&gt;:/etc/X11/edid.1.yavdr"</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">&lt;?cs /if ?&gt;</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">&lt;?cs if:(system.hardware.nvidia.detected == 1 &amp;&amp; ?system.x11.display.1.device) ?&gt;</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Option "MetaModes" "&lt;?cs call:fix_display_name(system.x11.display.1.device) ?&gt;: &lt;?cs var:system.x11.display.1.default ?&gt; { ViewPortIn=&lt;?cs var:system.x11.display.1.viewport.in.x ?&gt;x&lt;?cs var:system.x11.display.1.viewport.in.y ?&gt;, ViewPortOut=&lt;?cs var:system.x11.display.1.viewport.out.x ?&gt;x&lt;?cs var:system.x11.display.1.viewport.out.y ?&gt;+&lt;?cs var:system.x11.display.1.viewport.out.plusx ?&gt;+&lt;?cs var:system.x11.display.1.viewport.out.plusy ?&gt; }"</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">&lt;?cs each:mode = system.x11.display.1.mode ?&gt;&lt;?cs if:(mode != system.x11.display.1.default) ?&gt;</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Option "MetaModes" "&lt;?cs call:fix_display_name(system.x11.display.1.device) ?&gt;: &lt;?cs var:mode ?&gt; { ViewPortIn=&lt;?cs var:system.x11.display.1.viewport.in.x ?&gt;x&lt;?cs var:system.x11.display.1.viewport.in.y ?&gt;, ViewPortOut=&lt;?cs var:system.x11.display.1.viewport.out.x ?&gt;x&lt;?cs var:system.x11.display.1.viewport.out.y ?&gt;+&lt;?cs var:system.x11.display.1.viewport.out.plusx ?&gt;+&lt;?cs var:system.x11.display.1.viewport.out.plusy ?&gt; }"&lt;?cs /if ?&gt;&lt;?cs /each ?&gt;</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">&lt;?cs /if ?&gt;</span>
EndSection
{% endif %}
</pre>
</div>
</div>
</li>
</ol>
</li>
<li><a id="orgbe8c72a"></a>vdr<br />
<div class="outline-text-5" id="text-7-10-4-2">
<p>
Set environment variables for system locale and user session on startup
</p>
<div class="org-src-container">
<pre class="src src-conf">[<span class="org-type">Service</span>]
<span class="org-variable-name">EnvironmentFile</span>=-/etc/default/locale
<span class="org-variable-name">Environment</span>=XDG_RUNTIME_DIR=/run/user/{{ vdr.uid }}/
<span class="org-variable-name">EnvironmentFile</span>=-/var/lib/vdr/.session-env
</pre>
</div>
</div>
</li>
</ol>
</div>
</div>
<div id="outline-container-orge7e8c5c" class="outline-3">
<h3 id="orge7e8c5c"><span class="section-number-3">7.11</span> yavdr-desktop</h3>
<div class="outline-text-3" id="text-7-11">
</div>
<div id="outline-container-org6d57b99" class="outline-4">
<h4 id="org6d57b99"><span class="section-number-4">7.11.1</span> Tasks</h4>
<div class="outline-text-4" id="text-7-11-1">
</div>
<ol class="org-ol">
<li><a id="org181e44b"></a>main.yml<br />
<div class="outline-text-5" id="text-7-11-1-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file: roles/yavdr-desktop/tasks/main.yml</span>
- <span class="org-variable-name">name</span>: create folders for user configuration files
<span class="org-variable-name">file</span>:
<span class="org-variable-name">state</span>: directory
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">mode</span>: <span class="org-string">'0775'</span>
<span class="org-variable-name">owner</span>: <span class="org-string">'{{ vdr.user }}'</span>
<span class="org-variable-name">group</span>: <span class="org-string">'{{ vdr.group }}'</span>
<span class="org-variable-name">with_items</span>:
- <span class="org-string">'{{ vdr.home }}/.config/systemd/user'</span>
- <span class="org-string">'{{ vdr.home }}/.config/openbox'</span>
- <span class="org-string">'{{ vdr.home }}/.config/pulse'</span>
- <span class="org-variable-name">name</span>: expand template for .xinitrc for vdr user
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: <span class="org-string">'templates/.xinitrc.j2'</span>
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.home }}/.xinitrc'</span>
<span class="org-variable-name">mode</span>: 0755
<span class="org-variable-name">owner</span>: <span class="org-string">'{{ vdr.user }}'</span>
<span class="org-variable-name">group</span>: <span class="org-string">'{{ vdr.group }}'</span>
- <span class="org-variable-name">name</span>: <span class="org-string">"expand template for vdr's .Xresources"</span>
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: <span class="org-string">'templates/.Xresources.j2'</span>
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.home }}/.Xresources'</span>
<span class="org-variable-name">mode</span>: 0644
<span class="org-variable-name">owner</span>: <span class="org-string">'{{ vdr.user }}'</span>
<span class="org-variable-name">group</span>: <span class="org-string">'{{ vdr.group }}'</span>
- <span class="org-variable-name">name</span>: expand template for openbox autostart
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: <span class="org-string">'templates/openbox/autostart.j2'</span>
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.home }}/.config/openbox/autostart'</span>
<span class="org-variable-name">mode</span>: 0755
<span class="org-variable-name">owner</span>: <span class="org-string">'{{ vdr.user }}'</span>
<span class="org-variable-name">group</span>: <span class="org-string">'{{ vdr.group }}'</span>
- <span class="org-variable-name">name</span>: expand rc.xml for openbox
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: <span class="org-string">'templates/openbox/rc.xml.j2'</span>
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.home }}/.config/openbox/rc.xml'</span>
<span class="org-variable-name">mode</span>: 0644
<span class="org-variable-name">owner</span>: <span class="org-string">'{{ vdr.user }}'</span>
<span class="org-variable-name">group</span>: <span class="org-string">'{{ vdr.group }}'</span>
- <span class="org-variable-name">name</span>: create yavdr-desktop.target for the user session
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: <span class="org-string">'templates/systemd/user/yavdr-desktop.target.j2'</span>
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.home }}/.config/systemd/user/yavdr-desktop.target'</span>
<span class="org-variable-name">mode</span>: 0644
<span class="org-variable-name">owner</span>: <span class="org-string">'{{ vdr.user }}'</span>
<span class="org-variable-name">group</span>: <span class="org-string">'{{ vdr.group }}'</span>
- <span class="org-variable-name">name</span>: disable pulseaudio autospawning
<span class="org-variable-name">lineinfile</span>:
<span class="org-variable-name">path</span>: <span class="org-string">'{{ vdr.home }}/.config/pulse/client.conf'</span>
<span class="org-variable-name">line</span>: <span class="org-string">'autospawn = yes'</span>
<span class="org-variable-name">create</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">owner</span>: <span class="org-string">'{{ vdr.user }}'</span>
<span class="org-variable-name">group</span>: <span class="org-string">'{{ vdr.group }}'</span>
- <span class="org-variable-name">name</span>: create tmux.service for the session
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: <span class="org-string">'templates/systemd/user/tmux.service.j2'</span>
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.home }}/.config/systemd/user/tmux.service'</span>
<span class="org-variable-name">mode</span>: 0644
<span class="org-variable-name">owner</span>: <span class="org-string">'{{ vdr.user }}'</span>
<span class="org-variable-name">group</span>: <span class="org-string">'{{ vdr.group }}'</span>
- <span class="org-variable-name">name</span>: create wm-exit.service for the session
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/systemd/user/wm-exit.service.j2
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.home }}/.config/systemd/user/wm-exit.service'</span>
<span class="org-variable-name">mode</span>: 0644
<span class="org-variable-name">owner</span>: <span class="org-string">'{{ vdr.user }}'</span>
<span class="org-variable-name">group</span>: <span class="org-string">'{{ vdr.group }}'</span>
- <span class="org-variable-name">name</span>: create detect-second-display.service for the session
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/systemd/user/detect-second-display.service.j2
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.home }}/.config/systemd/user/detect-second-display.service'</span>
<span class="org-variable-name">mode</span>: 0644
<span class="org-variable-name">owner</span>: <span class="org-string">'{{ vdr.user }}'</span>
<span class="org-variable-name">group</span>: <span class="org-string">'{{ vdr.group }}'</span>
- <span class="org-variable-name">name</span>: create openbox-second.service for the session
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/systemd/user/openbox-second.service.j2
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.home }}/.config/systemd/user/openbox-second.service'</span>
<span class="org-variable-name">mode</span>: 0644
<span class="org-variable-name">owner</span>: <span class="org-string">'{{ vdr.user }}'</span>
<span class="org-variable-name">group</span>: <span class="org-string">'{{ vdr.group }}'</span>
- <span class="org-variable-name">name</span>: create osd2web.service for the session
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/systemd/user/osd2web.service.j2
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.home }}/.config/systemd/user/osd2web.service'</span>
<span class="org-variable-name">owner</span>: <span class="org-string">'{{ vdr.user }}'</span>
<span class="org-variable-name">group</span>: <span class="org-string">'{{ vdr.group }}'</span>
<span class="org-variable-name">mode</span>: 0644
- <span class="org-variable-name">name</span>: create irexec configuration for the session
<span class="org-variable-name">block</span>:
- <span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/systemd/user/irexec.service.j2
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.home }}/.config/systemd/user/irexec.service'</span>
<span class="org-variable-name">mode</span>: 0644
<span class="org-variable-name">owner</span>: <span class="org-string">'{{ vdr.user }}'</span>
<span class="org-variable-name">group</span>: <span class="org-string">'{{ vdr.group }}'</span>
- <span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/.lircrc.j2
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.home }}/.lircrc'</span>
<span class="org-variable-name">mode</span>: 0644
<span class="org-variable-name">owner</span>: <span class="org-string">'{{ vdr.user }}'</span>
<span class="org-variable-name">group</span>: <span class="org-string">'{{ vdr.group }}'</span>
- <span class="org-variable-name">name</span>: link /usr/bin/start-desktop to /var/lib/vdr/plugins/desktop/starter
<span class="org-variable-name">file</span>:
<span class="org-variable-name">src</span>: /usr/bin/start-desktop
<span class="org-variable-name">dest</span>: /var/lib/vdr/plugins/desktop/starter
<span class="org-variable-name">state</span>: link
- <span class="org-variable-name">name</span>: enable and start yavdr-xorg for the vdr user
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">daemon_reload</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">name</span>: <span class="org-string">'yavdr-xorg'</span>
<span class="org-variable-name">enabled</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">state</span>: started
</pre>
</div>
</div>
</li>
</ol>
</div>
<div id="outline-container-org9b0ad75" class="outline-4">
<h4 id="org9b0ad75"><span class="section-number-4">7.11.2</span> Templates</h4>
<div class="outline-text-4" id="text-7-11-2">
</div>
<ol class="org-ol">
<li><a id="org6575586"></a>xorg configuration<br />
<ol class="org-ol">
<li><a id="org5bc3686"></a>.Xresources<br />
<div class="outline-text-6" id="text-7-11-2-1-1">
<div class="org-src-container">
<pre class="src src-shell">xterm*background: Black
xterm*foreground: grey
XTerm*locale: true
XTerm*metaSendsEscape: true
XTerm*eightBitInput: false
XTerm*backarrowKey: false
XTerm*ttyModes: erase ^?
Xterm*saveLines: 4096
XTerm.vt100.metaSendsEscape: true
XTerm.vt100.geometry: 80x32
XTerm.vt100.renderFont: true
xterm*faceName: xft:DejaVu Sans Mono
xterm*faceSize: 14
xterm*renderFont: true
XTerm.vt100.faceName: xft:DejaVu Sans Mono:<span class="org-variable-name">size</span>=12:<span class="org-variable-name">antialias</span>=false
XTerm.vt100.font: 7x13
</pre>
</div>
</div>
</li>
<li><a id="org18bef7b"></a>.xinitrc<br />
<div class="outline-text-6" id="text-7-11-2-1-2">
<div class="org-src-container">
<pre class="src src-shell"><span class="org-comment-delimiter">#</span><span class="org-comment">!/bin/</span><span class="org-keyword">bash</span>
{{ ansible_managed | comment }}
<span class="org-keyword">exec</span> openbox-session
</pre>
</div>
</div>
</li>
</ol>
</li>
<li><a id="org8b3e2e2"></a>openbox<br />
<ol class="org-ol">
<li><a id="orgcc52049"></a>autostart<br />
<div class="outline-text-6" id="text-7-11-2-2-1">
<div class="org-src-container">
<pre class="src src-shell"><span class="org-comment-delimiter"># </span><span class="org-comment">forward environment variables to an environment file and the systemd user session</span>
env | grep <span class="org-string">"DISPLAY\|DBUS_SESSION_BUS_ADDRESS\|XDG_RUNTIME_DIR"</span> &gt; ~/.session-env
systemctl --user import-environment DISPLAY XAUTHORITY XDG_RUNTIME_DIR DBUS_SESSION_BUS_ADDRESS
feh --bg-center <span class="org-string">"/usr/share/yavdr/images/yavdr_logo.png"</span>
<span class="org-variable-name">enabled_services</span>=(
<span class="org-string">"tmux.service"</span> <span class="org-string">"detect-second-display.service"</span>
<span class="org-string">"openbox-second.service"</span> <span class="org-string">"osd2web.service"</span>
<span class="org-string">"yavdr-frontend.service"</span> <span class="org-string">"pulseaudio.socket"</span>
<span class="org-string">"pulseaudio.service"</span> <span class="org-string">"wm-exit.service"</span> <span class="org-string">"irexec.service"</span>)
<span class="org-variable-name">disabled_services</span>=()
<span class="org-comment-delimiter"># </span><span class="org-comment">enable configured services for the user session</span>
<span class="org-keyword">for</span> service<span class="org-keyword"> in</span> <span class="org-string">"${enabled_services[@]}"</span>; <span class="org-keyword">do</span>
systemctl --user enable <span class="org-string">"$service"</span>
<span class="org-keyword">done</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">disable unwanted services for the user session</span>
<span class="org-keyword">for</span> service<span class="org-keyword"> in</span> <span class="org-string">"${disabled_services[@]}"</span>; <span class="org-keyword">do</span>
systemctl --user disable <span class="org-string">"$service"</span>
<span class="org-keyword">done</span>
<span class="org-keyword">if </span><span class="org-builtin">which</span> dbus-update-activation-environment &gt;/dev/null 2&gt;&amp;1; <span class="org-keyword">then</span>
dbus-update-activation-environment DISPLAY XAUTHORITY XDG_RUNTIME_DIR
<span class="org-keyword">fi</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">start systemd units for the yavdr user session</span>
systemctl --user isolate yavdr-desktop.target
</pre>
</div>
</div>
</li>
<li><a id="org81f3f71"></a>rc.xml<br />
<div class="outline-text-6" id="text-7-11-2-2-2">
<div class="org-src-container">
<pre class="src src-xml"><span class="org-string"><span class="org-nxml-processing-instruction-delimiter">&lt;?</span></span><span class="org-string"><span class="org-nxml-processing-instruction-target">xml</span></span><span class="org-string"> </span><span class="org-string"><span class="org-nxml-processing-instruction-content">version="1.0" encoding="UTF-8"</span></span><span class="org-string"><span class="org-nxml-processing-instruction-delimiter">?&gt;</span></span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">openbox_config</span> <span class="org-nxml-namespace-attribute-xmlns">xmlns</span>=<span class="org-string">"http://openbox.org/3.4/rc"</span> <span class="org-nxml-namespace-attribute-xmlns">xmlns</span><span class="org-nxml-namespace-attribute-colon">:</span><span class="org-nxml-namespace-attribute-prefix">xi</span>=<span class="org-string">"http://www.w3.org/2001/XInclude"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">Do not edit this file, it will be overwritten on install.</span>
<span class="org-comment"> Copy the file to $HOME/.config/openbox/ instead. </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">resistance</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">strength</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">10</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">strength</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">screen_edge_strength</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">20</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">screen_edge_strength</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">resistance</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">focus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">focusNew</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">yes</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">focusNew</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">always try to focus new windows when they appear. other rules do</span>
<span class="org-comment"> apply </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">followMouse</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">followMouse</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">move focus to a window when you move the mouse into it </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">focusLast</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">yes</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">focusLast</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">focus the last used window when changing desktops, instead of the one</span>
<span class="org-comment"> under the mouse pointer. when followMouse is enabled </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">underMouse</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">underMouse</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">move focus under the mouse, even when the mouse is not moving </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">focusDelay</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">200</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">focusDelay</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">when followMouse is enabled, the mouse must be inside the window for</span>
<span class="org-comment"> this many milliseconds (1000 = 1 sec) before moving focus to it </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">raiseOnFocus</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">raiseOnFocus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">when followMouse is enabled, and a window is given focus by moving the</span>
<span class="org-comment"> mouse into it, also raise the window </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">focus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">placement</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">policy</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Smart</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">policy</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">'Smart' or 'UnderMouse' </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">center</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">yes</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">center</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">whether to place windows in the center of the free area found or</span>
<span class="org-comment"> the top left corner </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">monitor</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Active</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">monitor</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">with Smart placement on a multi-monitor system, try to place new windows</span>
<span class="org-comment"> on: 'Any' - any monitor, 'Mouse' - where the mouse is, 'Active' - where</span>
<span class="org-comment"> the active window is, 'Primary' - only on the primary monitor </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">primaryMonitor</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Active</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">primaryMonitor</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">The monitor where Openbox should place popup dialogs such as the</span>
<span class="org-comment"> focus cycling popup, or the desktop switch popup. It can be an index</span>
<span class="org-comment"> from 1, specifying a particular monitor. Or it can be one of the</span>
<span class="org-comment"> following: 'Mouse' - where the mouse is, or</span>
<span class="org-comment"> 'Active' - where the active window is </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">placement</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">theme</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">name</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Onyx</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">name</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">titleLayout</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">NLIMC</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">titleLayout</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!--</span>
<span class="org-comment-delimiter"> </span><span class="org-comment">available characters are NDSLIMC, each can occur at most once.</span>
<span class="org-comment"> N: window icon</span>
<span class="org-comment"> L: window label (AKA title).</span>
<span class="org-comment"> I: iconify</span>
<span class="org-comment"> M: maximize</span>
<span class="org-comment"> C: close</span>
<span class="org-comment"> S: shade (roll up/down)</span>
<span class="org-comment"> D: omnipresent (on all desktops).</span>
<span class="org-comment"> </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keepBorder</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keepBorder</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">animateIconify</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">yes</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">animateIconify</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">font</span> <span class="org-nxml-attribute-local-name">place</span>=<span class="org-string">"ActiveWindow"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">name</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">sans</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">name</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">size</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">8</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">size</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">font size in points </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">weight</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">bold</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">weight</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">'bold' or 'normal' </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">slant</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">normal</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">slant</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">'italic' or 'normal' </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">font</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">font</span> <span class="org-nxml-attribute-local-name">place</span>=<span class="org-string">"InactiveWindow"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">name</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">sans</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">name</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">size</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">8</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">size</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">font size in points </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">weight</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">bold</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">weight</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">'bold' or 'normal' </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">slant</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">normal</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">slant</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">'italic' or 'normal' </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">font</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">font</span> <span class="org-nxml-attribute-local-name">place</span>=<span class="org-string">"MenuHeader"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">name</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">sans</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">name</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">size</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">9</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">size</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">font size in points </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">weight</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">normal</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">weight</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">'bold' or 'normal' </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">slant</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">normal</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">slant</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">'italic' or 'normal' </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">font</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">font</span> <span class="org-nxml-attribute-local-name">place</span>=<span class="org-string">"MenuItem"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">name</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">sans</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">name</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">size</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">9</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">size</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">font size in points </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">weight</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">normal</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">weight</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">'bold' or 'normal' </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">slant</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">normal</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">slant</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">'italic' or 'normal' </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">font</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">font</span> <span class="org-nxml-attribute-local-name">place</span>=<span class="org-string">"ActiveOnScreenDisplay"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">name</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">sans</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">name</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">size</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">9</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">size</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">font size in points </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">weight</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">bold</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">weight</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">'bold' or 'normal' </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">slant</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">normal</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">slant</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">'italic' or 'normal' </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">font</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">font</span> <span class="org-nxml-attribute-local-name">place</span>=<span class="org-string">"InactiveOnScreenDisplay"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">name</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">sans</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">name</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">size</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">9</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">size</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">font size in points </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">weight</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">bold</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">weight</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">'bold' or 'normal' </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">slant</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">normal</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">slant</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">'italic' or 'normal' </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">font</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">theme</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">desktops</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">this stuff is only used at startup, pagers allow you to change them</span>
<span class="org-comment"> during a session</span>
<span class="org-comment"> these are default values to use when other ones are not already set</span>
<span class="org-comment"> by other applications, or saved in your session</span>
<span class="org-comment"> use obconf if you want to change these without having to log out</span>
<span class="org-comment"> and back in </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">number</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">2</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">number</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">firstdesk</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">1</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">firstdesk</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">names</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">set names up here if you want to, like this:</span>
<span class="org-comment"> &lt;name&gt;desktop 1&lt;/name&gt;</span>
<span class="org-comment"> &lt;name&gt;desktop 2&lt;/name&gt;</span>
<span class="org-comment"> </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">names</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">popupTime</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">875</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">popupTime</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">The number of milliseconds to show the popup for when switching</span>
<span class="org-comment"> desktops. Set this to 0 to disable the popup. </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">desktops</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">resize</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">drawContents</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">yes</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">drawContents</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">popupShow</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Nonpixel</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">popupShow</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">'Always', 'Never', or 'Nonpixel' (xterms and such) </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">popupPosition</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Center</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">popupPosition</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">'Center', 'Top', or 'Fixed' </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">popupFixedPosition</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">these are used if popupPosition is set to 'Fixed' </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">x</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">10</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">x</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">positive number for distance from left edge, negative number for</span>
<span class="org-comment"> distance from right edge, or 'Center' </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">y</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">10</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">y</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">positive number for distance from top edge, negative number for</span>
<span class="org-comment"> distance from bottom edge, or 'Center' </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">popupFixedPosition</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">resize</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">You can reserve a portion of your screen where windows will not cover when</span>
<span class="org-comment"> they are maximized, or when they are initially placed.</span>
<span class="org-comment"> Many programs reserve space automatically, but you can use this in other</span>
<span class="org-comment"> cases. </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">margins</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">top</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">0</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">top</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">bottom</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">0</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">bottom</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">left</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">0</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">left</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">right</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">0</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">right</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">margins</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">dock</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">position</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">TopLeft</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">position</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">(Top|Bottom)(Left|Right|)|Top|Bottom|Left|Right|Floating </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">floatingX</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">0</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">floatingX</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">floatingY</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">0</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">floatingY</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">noStrut</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">noStrut</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">stacking</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Above</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">stacking</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">'Above', 'Normal', or 'Below' </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">direction</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Vertical</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">direction</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">'Vertical' or 'Horizontal' </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">autoHide</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">autoHide</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">hideDelay</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">300</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">hideDelay</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">in milliseconds (1000 = 1 second) </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">showDelay</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">300</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">showDelay</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">in milliseconds (1000 = 1 second) </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">moveButton</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Middle</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">moveButton</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">'Left', 'Middle', 'Right' </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">dock</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keyboard</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">chainQuitKey</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">C-g</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">chainQuitKey</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">Keybindings for desktop switching </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keybind</span> <span class="org-nxml-attribute-local-name">key</span>=<span class="org-string">"C-A-Left"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"GoToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">left</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">wrap</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">wrap</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keybind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keybind</span> <span class="org-nxml-attribute-local-name">key</span>=<span class="org-string">"C-A-Right"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"GoToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">right</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">wrap</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">wrap</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keybind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keybind</span> <span class="org-nxml-attribute-local-name">key</span>=<span class="org-string">"C-A-Up"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"GoToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">up</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">wrap</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">wrap</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keybind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keybind</span> <span class="org-nxml-attribute-local-name">key</span>=<span class="org-string">"C-A-Down"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"GoToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">down</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">wrap</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">wrap</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keybind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keybind</span> <span class="org-nxml-attribute-local-name">key</span>=<span class="org-string">"S-A-Left"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"SendToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">left</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">wrap</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">wrap</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keybind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keybind</span> <span class="org-nxml-attribute-local-name">key</span>=<span class="org-string">"S-A-Right"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"SendToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">right</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">wrap</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">wrap</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keybind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keybind</span> <span class="org-nxml-attribute-local-name">key</span>=<span class="org-string">"S-A-Up"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"SendToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">up</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">wrap</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">wrap</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keybind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keybind</span> <span class="org-nxml-attribute-local-name">key</span>=<span class="org-string">"S-A-Down"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"SendToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">down</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">wrap</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">wrap</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keybind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keybind</span> <span class="org-nxml-attribute-local-name">key</span>=<span class="org-string">"W-F1"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"GoToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">1</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keybind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keybind</span> <span class="org-nxml-attribute-local-name">key</span>=<span class="org-string">"W-F2"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"GoToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">2</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keybind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keybind</span> <span class="org-nxml-attribute-local-name">key</span>=<span class="org-string">"W-F3"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"GoToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">3</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keybind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keybind</span> <span class="org-nxml-attribute-local-name">key</span>=<span class="org-string">"W-F4"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"GoToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">4</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keybind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keybind</span> <span class="org-nxml-attribute-local-name">key</span>=<span class="org-string">"W-d"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"ToggleShowDesktop"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keybind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">Keybindings for windows </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keybind</span> <span class="org-nxml-attribute-local-name">key</span>=<span class="org-string">"A-F4"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Close"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keybind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keybind</span> <span class="org-nxml-attribute-local-name">key</span>=<span class="org-string">"A-Escape"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Lower"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"FocusToBottom"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Unfocus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keybind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keybind</span> <span class="org-nxml-attribute-local-name">key</span>=<span class="org-string">"A-space"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"ShowMenu"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">client-menu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keybind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">Take a screenshot of the current window with scrot when Alt+Print are pressed </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keybind</span> <span class="org-nxml-attribute-local-name">key</span>=<span class="org-string">"A-Print"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Execute"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">command</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">scrot -s</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">command</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keybind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">Keybindings for window switching </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keybind</span> <span class="org-nxml-attribute-local-name">key</span>=<span class="org-string">"A-Tab"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"NextWindow"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">finalactions</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Focus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Raise"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Unshade"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">finalactions</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keybind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keybind</span> <span class="org-nxml-attribute-local-name">key</span>=<span class="org-string">"A-S-Tab"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"PreviousWindow"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">finalactions</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Focus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Raise"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Unshade"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">finalactions</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keybind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keybind</span> <span class="org-nxml-attribute-local-name">key</span>=<span class="org-string">"C-A-Tab"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"NextWindow"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">panels</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">yes</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">panels</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">desktop</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">yes</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">desktop</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">finalactions</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Focus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Raise"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Unshade"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">finalactions</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keybind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">Keybindings for window switching with the arrow keys </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keybind</span> <span class="org-nxml-attribute-local-name">key</span>=<span class="org-string">"W-S-Right"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"DirectionalCycleWindows"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">direction</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">right</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">direction</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keybind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keybind</span> <span class="org-nxml-attribute-local-name">key</span>=<span class="org-string">"W-S-Left"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"DirectionalCycleWindows"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">direction</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">left</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">direction</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keybind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keybind</span> <span class="org-nxml-attribute-local-name">key</span>=<span class="org-string">"W-S-Up"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"DirectionalCycleWindows"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">direction</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">up</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">direction</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keybind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keybind</span> <span class="org-nxml-attribute-local-name">key</span>=<span class="org-string">"W-S-Down"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"DirectionalCycleWindows"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">direction</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">down</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">direction</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keybind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keyboard</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mouse</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">dragThreshold</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">1</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">dragThreshold</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">number of pixels the mouse must move before a drag begins </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">doubleClickTime</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">500</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">doubleClickTime</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">in milliseconds (1000 = 1 second) </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">screenEdgeWarpTime</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">400</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">screenEdgeWarpTime</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">Time before changing desktops when the pointer touches the edge of the</span>
<span class="org-comment"> screen while moving a window, in milliseconds (1000 = 1 second).</span>
<span class="org-comment"> Set this to 0 to disable warping </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">screenEdgeWarpMouse</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">false</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">screenEdgeWarpMouse</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">Set this to TRUE to move the mouse pointer across the desktop when</span>
<span class="org-comment"> switching due to hitting the edge of the screen </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">context</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Frame"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"A-Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Press"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Focus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Raise"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"A-Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Unshade"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"A-Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Drag"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Move"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"A-Right"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Press"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Focus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Raise"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Unshade"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"A-Right"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Drag"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Resize"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"A-Middle"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Press"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Lower"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"FocusToBottom"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Unfocus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"A-Up"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"GoToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">previous</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"A-Down"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"GoToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">next</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"C-A-Up"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"GoToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">previous</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"C-A-Down"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"GoToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">next</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"A-S-Up"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"SendToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">previous</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"A-S-Down"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"SendToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">next</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">context</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">context</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Titlebar"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Drag"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Move"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"DoubleClick"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"ToggleMaximize"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Up"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"if"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">shaded</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">shaded</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">then</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Shade"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"FocusToBottom"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Unfocus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Lower"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">then</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Down"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"if"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">shaded</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">yes</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">shaded</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">then</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Unshade"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Raise"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">then</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">context</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">context</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Titlebar Top Right Bottom Left TLCorner TRCorner BRCorner BLCorner"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Press"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Focus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Raise"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Unshade"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Middle"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Press"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Lower"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"FocusToBottom"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Unfocus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Right"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Press"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Focus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Raise"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"ShowMenu"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">client-menu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">context</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">context</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Top"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Drag"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Resize"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">edge</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">top</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">edge</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">context</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">context</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Left"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Drag"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Resize"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">edge</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">left</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">edge</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">context</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">context</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Right"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Drag"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Resize"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">edge</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">right</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">edge</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">context</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">context</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Bottom"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Drag"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Resize"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">edge</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">bottom</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">edge</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Right"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Press"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Focus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Raise"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"ShowMenu"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">client-menu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">context</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">context</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"TRCorner BRCorner TLCorner BLCorner"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Press"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Focus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Raise"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Unshade"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Drag"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Resize"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">context</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">context</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Client"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Press"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Focus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Raise"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Middle"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Press"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Focus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Raise"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Right"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Press"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Focus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Raise"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">context</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">context</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Icon"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Press"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Focus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Raise"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Unshade"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"ShowMenu"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">client-menu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Right"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Press"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Focus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Raise"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"ShowMenu"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">client-menu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">context</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">context</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"AllDesktops"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Press"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Focus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Raise"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Unshade"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"ToggleOmnipresent"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">context</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">context</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Shade"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Press"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Focus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Raise"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"ToggleShade"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">context</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">context</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Iconify"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Press"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Focus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Raise"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Iconify"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">context</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">context</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Maximize"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Press"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Focus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Raise"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Unshade"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Middle"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Press"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Focus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Raise"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Unshade"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Right"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Press"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Focus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Raise"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Unshade"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"ToggleMaximize"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Middle"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"ToggleMaximize"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">direction</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">vertical</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">direction</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Right"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"ToggleMaximize"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">direction</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">horizontal</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">direction</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">context</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">context</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Close"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Press"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Focus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Raise"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Unshade"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Close"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">context</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">context</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Desktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Up"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"GoToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">previous</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Down"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"GoToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">next</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"A-Up"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"GoToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">previous</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"A-Down"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"GoToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">next</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"C-A-Up"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"GoToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">previous</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"C-A-Down"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"GoToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">next</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Left"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Press"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Focus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Raise"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Right"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Press"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Focus"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Raise"</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">context</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">context</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"Root"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">Menus </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Middle"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Press"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"ShowMenu"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">client-list-combined-menu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Right"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Press"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"ShowMenu"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">root-menu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">context</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">context</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"MoveResize"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Up"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"GoToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">previous</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"Down"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"GoToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">next</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"A-Up"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"GoToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">previous</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mousebind</span> <span class="org-nxml-attribute-local-name">button</span>=<span class="org-string">"A-Down"</span> <span class="org-nxml-attribute-local-name">action</span>=<span class="org-string">"Click"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">action</span> <span class="org-nxml-attribute-local-name">name</span>=<span class="org-string">"GoToDesktop"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">next</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">to</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">action</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mousebind</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">context</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mouse</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">You can specify more than one menu file in here and they are all loaded,</span>
<span class="org-comment"> just don't make menu ids clash or, well, it'll be kind of pointless </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">default menu file (or custom one in $HOME/.config/openbox/) </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">system menu files on Debian systems </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">file</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">/var/lib/openbox/debian-menu.xml</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">file</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">file</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">menu.xml</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">file</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">hideDelay</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">200</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">hideDelay</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">if a press-release lasts longer than this setting (in milliseconds), the</span>
<span class="org-comment"> menu is hidden again </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">middle</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">middle</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">center submenus vertically about the parent entry </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">submenuShowDelay</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">100</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">submenuShowDelay</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">time to delay before showing a submenu after hovering over the parent</span>
<span class="org-comment"> entry.</span>
<span class="org-comment"> if this is a negative value, then the delay is infinite and the</span>
<span class="org-comment"> submenu will not be shown until it is clicked on </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">submenuHideDelay</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">400</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">submenuHideDelay</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">time to delay before hiding a submenu when selecting another</span>
<span class="org-comment"> entry in parent menu</span>
<span class="org-comment"> if this is a negative value, then the delay is infinite and the</span>
<span class="org-comment"> submenu will not be hidden until a different submenu is opened </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">showIcons</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">yes</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">showIcons</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">controls if icons appear in the client-list-(combined-)menu </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">manageDesktops</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">yes</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">manageDesktops</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">show the manage desktops section in the client-list-(combined-)menu </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!--</span>
<span class="org-comment-delimiter"> </span><span class="org-comment"># this is an example with comments through out. use these to make your</span>
<span class="org-comment"> # own rules, but without the comments of course.</span>
<span class="org-comment"> # you may use one or more of the name/class/role/title/type rules to specify</span>
<span class="org-comment"> # windows to match</span>
<span class="org-comment"> &lt;application name="the window's _OB_APP_NAME property (see obxprop)"</span>
<span class="org-comment"> class="the window's _OB_APP_CLASS property (see obxprop)"</span>
<span class="org-comment"> groupname="the window's _OB_APP_GROUP_NAME property (see obxprop)"</span>
<span class="org-comment"> groupclass="the window's _OB_APP_GROUP_CLASS property (see obxprop)"</span>
<span class="org-comment"> role="the window's _OB_APP_ROLE property (see obxprop)"</span>
<span class="org-comment"> title="the window's _OB_APP_TITLE property (see obxprop)"</span>
<span class="org-comment"> type="the window's _OB_APP_TYPE property (see obxprob)..</span>
<span class="org-comment"> (if unspecified, then it is 'dialog' for child windows)"&gt;</span>
<span class="org-comment"> # you may set only one of name/class/role/title/type, or you may use more</span>
<span class="org-comment"> # than one together to restrict your matches.</span>
<span class="org-comment"> # the name, class, role, and title use simple wildcard matching such as those</span>
<span class="org-comment"> # used by a shell. you can use * to match any characters and ? to match</span>
<span class="org-comment"> # any single character.</span>
<span class="org-comment"> # the type is one of: normal, dialog, splash, utility, menu, toolbar, dock,</span>
<span class="org-comment"> # or desktop</span>
<span class="org-comment"> # when multiple rules match a window, they will all be applied, in the</span>
<span class="org-comment"> # order that they appear in this list</span>
<span class="org-comment"> # each rule element can be left out or set to 'default' to specify to not </span>
<span class="org-comment"> # change that attribute of the window</span>
<span class="org-comment"> &lt;decor&gt;yes&lt;/decor&gt;</span>
<span class="org-comment"> # enable or disable window decorations</span>
<span class="org-comment"> &lt;shade&gt;no&lt;/shade&gt;</span>
<span class="org-comment"> # make the window shaded when it appears, or not</span>
<span class="org-comment"> &lt;position force="no"&gt;</span>
<span class="org-comment"> # the position is only used if both an x and y coordinate are provided</span>
<span class="org-comment"> # (and not set to 'default')</span>
<span class="org-comment"> # when force is "yes", then the window will be placed here even if it</span>
<span class="org-comment"> # says you want it placed elsewhere. this is to override buggy</span>
<span class="org-comment"> # applications who refuse to behave</span>
<span class="org-comment"> &lt;x&gt;center&lt;/x&gt;</span>
<span class="org-comment"> # a number like 50, or 'center' to center on screen. use a negative number</span>
<span class="org-comment"> # to start from the right (or bottom for &lt;y&gt;), ie -50 is 50 pixels from</span>
<span class="org-comment"> # the right edge (or bottom). use 'default' to specify using value</span>
<span class="org-comment"> # provided by the application, or chosen by openbox, instead.</span>
<span class="org-comment"> &lt;y&gt;200&lt;/y&gt;</span>
<span class="org-comment"> &lt;monitor&gt;1&lt;/monitor&gt;</span>
<span class="org-comment"> # specifies the monitor in a xinerama setup.</span>
<span class="org-comment"> # 1 is the first head, or 'mouse' for wherever the mouse is</span>
<span class="org-comment"> &lt;/position&gt;</span>
<span class="org-comment"> &lt;size&gt;</span>
<span class="org-comment"> # the size to make the window.</span>
<span class="org-comment"> &lt;width&gt;20&lt;/width&gt;</span>
<span class="org-comment"> # a number like 20, or 'default' to use the size given by the application.</span>
<span class="org-comment"> # you can use fractions such as 1/2 or percentages such as 75% in which</span>
<span class="org-comment"> # case the value is relative to the size of the monitor that the window</span>
<span class="org-comment"> # appears on.</span>
<span class="org-comment"> &lt;height&gt;30%&lt;/height&gt;</span>
<span class="org-comment"> &lt;/size&gt;</span>
<span class="org-comment"> &lt;focus&gt;yes&lt;/focus&gt;</span>
<span class="org-comment"> # if the window should try be given focus when it appears. if this is set</span>
<span class="org-comment"> # to yes it doesn't guarantee the window will be given focus. some</span>
<span class="org-comment"> # restrictions may apply, but Openbox will try to</span>
<span class="org-comment"> &lt;desktop&gt;1&lt;/desktop&gt;</span>
<span class="org-comment"> # 1 is the first desktop, 'all' for all desktops</span>
<span class="org-comment"> &lt;layer&gt;normal&lt;/layer&gt;</span>
<span class="org-comment"> # 'above', 'normal', or 'below'</span>
<span class="org-comment"> &lt;iconic&gt;no&lt;/iconic&gt;</span>
<span class="org-comment"> # make the window iconified when it appears, or not</span>
<span class="org-comment"> &lt;skip_pager&gt;no&lt;/skip_pager&gt;</span>
<span class="org-comment"> # asks to not be shown in pagers</span>
<span class="org-comment"> &lt;skip_taskbar&gt;no&lt;/skip_taskbar&gt;</span>
<span class="org-comment"> # asks to not be shown in taskbars. window cycling actions will also</span>
<span class="org-comment"> # skip past such windows</span>
<span class="org-comment"> &lt;fullscreen&gt;yes&lt;/fullscreen&gt;</span>
<span class="org-comment"> # make the window in fullscreen mode when it appears</span>
<span class="org-comment"> &lt;maximized&gt;true&lt;/maximized&gt;</span>
<span class="org-comment"> # 'Horizontal', 'Vertical' or boolean (yes/no)</span>
<span class="org-comment"> &lt;/application&gt;</span>
<span class="org-comment"> # end of the example</span>
<span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">applications</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">application</span> <span class="org-nxml-attribute-local-name">title</span>=<span class="org-string">"softhddevice"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">decor</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">decor</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">maximized</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">yes</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">maximized</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!--</span><span class="org-comment">&lt;skip_pager&gt;yes&lt;/skip_pager&gt;</span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">skip_taskbar</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">skip_taskbar</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">application</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">application</span> <span class="org-nxml-attribute-local-name">title</span>=<span class="org-string">"vaapidevice"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">decor</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">decor</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">maximized</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">yes</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">maximized</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!--</span><span class="org-comment">&lt;skip_pager&gt;yes&lt;/skip_pager&gt;</span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">skip_taskbar</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">skip_taskbar</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">application</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">application</span> <span class="org-nxml-attribute-local-name">class</span>=<span class="org-string">"VDR"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">decor</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">decor</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">maximized</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">yes</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">maximized</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!--</span><span class="org-comment">&lt;skip_pager&gt;yes&lt;/skip_pager&gt;</span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">skip_taskbar</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">skip_taskbar</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">application</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">application</span> <span class="org-nxml-attribute-local-name">title</span>=<span class="org-string">"browser"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">decor</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">decor</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">maximized</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">yes</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">maximized</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!--</span><span class="org-comment">&lt;skip_pager&gt;yes&lt;/skip_pager&gt;</span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">skip_taskbar</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">skip_taskbar</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">application</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">application</span> <span class="org-nxml-attribute-local-name">title</span>=<span class="org-string">"osd2Web"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">decor</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">decor</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">maximized</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">yes</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">maximized</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!--</span><span class="org-comment">&lt;skip_pager&gt;yes&lt;/skip_pager&gt;</span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">skip_taskbar</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">no</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">skip_taskbar</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">application</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">applications</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">openbox_config</span><span class="org-nxml-tag-delimiter">&gt;</span>
</pre>
</div>
</div>
</li>
</ol>
</li>
<li><a id="orgfef3e3e"></a>Systemd User Session<br />
<ol class="org-ol">
<li><a id="orgb4be2e0"></a>yavdr-desktop.target<br />
<div class="outline-text-6" id="text-7-11-2-3-1">
<div class="org-src-container">
<pre class="src src-shell">[Unit]
<span class="org-variable-name">Description</span>=yaVDR Desktop
<span class="org-variable-name">Requires</span>=default.target
<span class="org-variable-name">After</span>=default.target pulseaudio.service
<span class="org-variable-name">Wants</span>=dbus.service pulseaudio.service
<span class="org-variable-name">AllowIsolate</span>=yes
</pre>
</div>
</div>
</li>
<li><a id="org29c8135"></a>detect-second-display<br />
<div class="outline-text-6" id="text-7-11-2-3-2">
<div class="org-src-container">
<pre class="src src-conf">[<span class="org-type">Unit</span>]
<span class="org-variable-name">Description</span>=Detect second DISPLAY using xrandr
[<span class="org-type">Service</span>]
<span class="org-variable-name">Type</span>=oneshot
<span class="org-variable-name">ExecStart</span>=/bin/bash -c <span class="org-string">'export DISPLAY=$DISPLAY.1; xrandr -q | grep "connected" &amp;&amp; echo "DISPLAY=$DISPLAY" &gt; ~/.second_display || rm -f ~/.second_display'</span>
[<span class="org-type">Install</span>]
<span class="org-variable-name">WantedBy</span>=yavdr-desktop.target
</pre>
</div>
</div>
</li>
<li><a id="org1b1c934"></a>openbox-second.service<br />
<div class="outline-text-6" id="text-7-11-2-3-3">
<div class="org-src-container">
<pre class="src src-conf">[<span class="org-type">Unit</span>]
<span class="org-variable-name">Description</span>=Start openbox on the second DISPLAY if it exists
<span class="org-variable-name">After</span>=detect-second-display.service
<span class="org-variable-name">Wants</span>=detect-second-display.service
<span class="org-variable-name">Before</span>=yavdr-frontend.service
<span class="org-variable-name">ConditionFileNotEmpty</span>=%h/.second_display
[<span class="org-type">Service</span>]
<span class="org-variable-name">EnvironmentFile</span>=%h/.second_display
<span class="org-variable-name">ExecStart</span>=/usr/bin/openbox --config-file %h/.config/openbox/rc.xml
<span class="org-variable-name">ExecStartPost</span>=/usr/bin/xset -dpms s off -display $DISPLAY
<span class="org-variable-name">ExecStartPost</span>=/bin/bash %h/.fehbg
[<span class="org-type">Install</span>]
<span class="org-variable-name">WantedBy</span>=yavdr-desktop.target
</pre>
</div>
</div>
</li>
<li><a id="org0bfb36c"></a>osd2web.service<br />
<div class="outline-text-6" id="text-7-11-2-3-4">
<div class="org-src-container">
<pre class="src src-conf">[<span class="org-type">Unit</span>]
<span class="org-variable-name">Description</span>=Start a kiosk browser on the second DISPLAY if it exists
<span class="org-variable-name">After</span>=detect-second-display.service openbox-second.service
<span class="org-variable-name">Wants</span>=detect-second-display.service openbox-second.service
<span class="org-variable-name">ConditionFileNotEmpty</span>=%h/.second_display
[<span class="org-type">Service</span>]
<span class="org-variable-name">EnvironmentFile</span>=%h/.second_display
<span class="org-variable-name">Environment</span>=url=<span class="org-string">"http://localhost:4444/skins/horchiTft/index.html?theme=anthraize&amp;onlyView=1"</span>
<span class="org-variable-name">Environment</span>=browser=<span class="org-string">"kiosk-browser"</span>
<span class="org-variable-name">EnvironmentFile</span>=-%h/.config/osd2web/config
<span class="org-variable-name">ExecStart</span>=/usr/bin/on_vdr -o -c <span class="org-string">'${browser} "${url}"'</span>
<span class="org-variable-name">KillSignal</span>=SIGINT
[<span class="org-type">Install</span>]
<span class="org-variable-name">WantedBy</span>=yavdr-desktop.target
</pre>
</div>
</div>
</li>
<li><a id="org68f73bb"></a>tmux.service<br />
<div class="outline-text-6" id="text-7-11-2-3-5">
<div class="org-src-container">
<pre class="src src-conf">[<span class="org-type">Unit</span>]
<span class="org-variable-name">Description</span>=Start tmux in detached session
[<span class="org-type">Service</span>]
<span class="org-variable-name">EnvironmentFile</span>=-%h/.session-env
<span class="org-variable-name">Type</span>=forking
<span class="org-variable-name">ExecStart</span>=/usr/bin/tmux new-session -s use-session -d
<span class="org-variable-name">ExecStop</span>=/usr/bin/tmux kill-session -t %u
<span class="org-variable-name">Restart</span>=always
[<span class="org-type">Install</span>]
<span class="org-variable-name">WantedBy</span>=default.target
</pre>
</div>
</div>
</li>
<li><a id="org49d5dc1"></a>wm-exit.service<br />
<div class="outline-text-6" id="text-7-11-2-3-6">
<div class="org-src-container">
<pre class="src src-conf">[<span class="org-type">Unit</span>]
<span class="org-variable-name">Description</span>=exit window manager gracefully
[<span class="org-type">Service</span>]
<span class="org-variable-name">ExecStart</span>=/bin/true
<span class="org-variable-name">ExecStop</span>=/usr/bin/openbox --exit
<span class="org-variable-name">RemainAfterExit</span>=True
[<span class="org-type">Install</span>]
<span class="org-variable-name">WantedBy</span>=default.target
</pre>
</div>
</div>
</li>
</ol>
</li>
<li><a id="orgc332a74"></a>irexec<br />
<div class="outline-text-5" id="text-7-11-2-4">
<p>
irexec.service starts irexec for the user session
</p>
<div class="org-src-container">
<pre class="src src-shell">[Unit]
<span class="org-variable-name">Description</span>=LIRC command handler
[Service]
<span class="org-variable-name">Type</span>=simple
<span class="org-variable-name">ExecStart</span>=/usr/bin/irexec %h/.lircrc
[Install]
<span class="org-variable-name">WantedBy</span>=yavdr-desktop.target
</pre>
</div>
<p>
~/.lircrc contains the irexec configuration
</p>
<div class="org-src-container">
<pre class="src src-shell">begin
<span class="org-variable-name">prog</span> = irexec
<span class="org-variable-name">button</span> = KEY_HOME
<span class="org-variable-name">config</span> = frontend-dbus-send switchbetween kodi vdr
end
</pre>
</div>
</div>
</li>
</ol>
</div>
</div>
<div id="outline-container-orge6a9a80" class="outline-3">
<h3 id="orge6a9a80"><span class="section-number-3">7.12</span> samba-install</h3>
<div class="outline-text-3" id="text-7-12">
</div>
<div id="outline-container-orgc5300af" class="outline-4">
<h4 id="orgc5300af"><span class="section-number-4">7.12.1</span> tasks</h4>
<div class="outline-text-4" id="text-7-12-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file: roles/samba-install/tasks/main.yml</span>
- <span class="org-variable-name">name</span>: install samba server
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">install_recommends</span>: <span class="org-constant">no</span>
<span class="org-variable-name">with_items</span>:
- samba
- samba-common
- samba-common-bin
- tdb-tools
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org7e6c508" class="outline-3">
<h3 id="org7e6c508"><span class="section-number-3">7.13</span> samba-config</h3>
<div class="outline-text-3" id="text-7-13">
</div>
<div id="outline-container-org679a8b0" class="outline-4">
<h4 id="org679a8b0"><span class="section-number-4">7.13.1</span> tasks</h4>
<div class="outline-text-4" id="text-7-13-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file: roles/samba-config/tasks/main.yml</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">TODO:</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">- name: divert original smbd.conf</span>
- <span class="org-variable-name">name</span>: touch smb.conf.custom
<span class="org-variable-name">file</span>:
<span class="org-variable-name">state</span>: touch
<span class="org-variable-name">dest</span>: <span class="org-string">'/etc/samba/smb.conf.custom'</span>
<span class="org-variable-name">notify</span>: [ <span class="org-string">'Restart Samba'</span> ]
- <span class="org-variable-name">name</span>: expand template for smb.conf
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: <span class="org-string">'templates/smb.conf.j2'</span>
<span class="org-variable-name">dest</span>: <span class="org-string">'/etc/samba/smb.conf'</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">validate: 'testparm -s %s'</span>
<span class="org-variable-name">notify</span>: [ <span class="org-string">'Restart Samba'</span> ]
</pre>
</div>
</div>
</div>
<div id="outline-container-orgb5ad4c3" class="outline-4">
<h4 id="orgb5ad4c3"><span class="section-number-4">7.13.2</span> templates</h4>
<div class="outline-text-4" id="text-7-13-2">
</div>
<ol class="org-ol">
<li><a id="org8808f4a"></a>smb.conf<br />
<ol class="org-ol">
<li><a id="orge9df13e"></a>global settings<br />
<div class="outline-text-6" id="text-7-13-2-1-1">
<div class="org-src-container">
<pre class="src src-yaml">{{ ansible_managed | comment }}
<span class="org-comment-delimiter">#</span><span class="org-comment">======================= Global Settings =======================</span>
[global]
<span class="org-comment-delimiter">## </span><span class="org-comment">Browsing/Identification ###</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Change this to the workgroup/NT-domain name your Samba server will part of</span>
workgroup = {{ samba.workgroup }}
<span class="org-comment-delimiter"># </span><span class="org-comment">server string is the equivalent of the NT Description field</span>
server string = %h server (Samba, Ubuntu)
<span class="org-comment-delimiter"># </span><span class="org-comment">This will prevent nmbd to search for NetBIOS names through DNS.</span>
dns proxy = no
<span class="org-comment-delimiter">#### </span><span class="org-comment">Debugging/Accounting ####</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">This tells Samba to use a separate log file for each machine</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">that connects</span>
log file = /var/log/samba/log.%m
<span class="org-comment-delimiter"># </span><span class="org-comment">Cap the size of the individual log files (in KiB).</span>
max log size = 1000
<span class="org-comment-delimiter"># </span><span class="org-comment">We want Samba to log a minimum amount of information to syslog. Everything</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">should go to /var/log/samba/log.{smbd,nmbd} instead. If you want to log</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">through syslog you should set the following parameter to something higher.</span>
syslog = 0
<span class="org-comment-delimiter"># </span><span class="org-comment">Do something sensible when Samba crashes: mail the admin a backtrace</span>
panic action = /usr/share/samba/panic-action %d
<span class="org-comment-delimiter">####### </span><span class="org-comment">Authentication #######</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">"security = user" is always a good idea. This will require a Unix account</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">in this server for every user accessing the server. See</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">/usr/share/doc/samba-doc/htmldocs/Samba3-HOWTO/ServerType.html</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">in the samba-doc package for details.</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">security = user</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">You may wish to use password encryption. See the section on</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">'encrypt passwords' in the smb.conf(5) manpage before enabling.</span>
encrypt passwords = true
<span class="org-comment-delimiter"># </span><span class="org-comment">If you are using encrypted passwords, Samba will need to know what</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">password database type you are using. </span>
passdb backend = tdbsam
obey pam restrictions = yes
<span class="org-comment-delimiter"># </span><span class="org-comment">This boolean parameter controls whether Samba attempts to sync the Unix</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">password with the SMB password when the encrypted SMB password in the</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">passdb is changed.</span>
unix password sync = yes
<span class="org-comment-delimiter"># </span><span class="org-comment">For Unix password sync to work on a Debian GNU/Linux system, the following</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">parameters must be set (thanks to Ian Kahan &lt;<a href="mailto:kahan%40informatik.tu-muenchen.de">&lt;kahan@informatik.tu-muenchen.de&gt;</a> for</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">sending the correct chat script for the passwd program in Debian Sarge).</span>
passwd program = /usr/bin/passwd %u
passwd chat = <span class="org-function-name">*Enter</span>\snew\s*\spassword:* %n\n <span class="org-function-name">*Retype</span>\snew\s*\spassword:* %n\n <span class="org-function-name">*password</span>\supdated\ssuccessfully* .
<span class="org-comment-delimiter"># </span><span class="org-comment">This boolean controls whether PAM will be used for password changes</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">when requested by an SMB client instead of the program listed in</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">'passwd program'. The default is 'no'.</span>
pam password change = yes
<span class="org-comment-delimiter"># </span><span class="org-comment">This option controls how unsuccessful authentication attempts are mapped </span>
<span class="org-comment-delimiter"># </span><span class="org-comment">to anonymous connections</span>
map to guest = bad user
{% if samba.windows_compatible %}
<span class="org-comment-delimiter"># </span><span class="org-comment">disable unix extensions and enable following symlinks</span>
unix extensions = no
follow symlinks= yes
wide links= yes
{% endif %}
</pre>
</div>
</div>
</li>
<li><a id="orga6aac72"></a>media directories<br />
<div class="outline-text-6" id="text-7-13-2-1-2">
<div class="org-src-container">
<pre class="src src-yaml">{% for name, path in media_dirs.iteritems() %}
[{{ name }}]
path = {{ path }}
comment = {{ name }} on %h
guest ok = yes
writeable = yes
browseable = yes
create mode = 0664
directory mode = 0775
force user = {{ vdr.user }}
force group = {{ vdr.group }}
follow symlinks = yes
wide links = yes
{% endfor %}
</pre>
</div>
</div>
</li>
<li><a id="org2377373"></a>include custom samba exports<br />
<div class="outline-text-6" id="text-7-13-2-1-3">
<div class="org-src-container">
<pre class="src src-yaml">include = /etc/samba/smb.conf.custom
</pre>
</div>
</div>
</li>
</ol>
</li>
</ol>
</div>
</div>
<div id="outline-container-org972c477" class="outline-3">
<h3 id="org972c477"><span class="section-number-3">7.14</span> <span class="todo STARTED">STARTED</span> autoinstall-drivers</h3>
<div class="outline-text-3" id="text-7-14">
<p>
It would be nice to be able to detect if it is suitable to install those drivers:
</p>
</div>
<div id="outline-container-orgce82d47" class="outline-4">
<h4 id="orgce82d47"><span class="section-number-4">7.14.1</span> <span class="todo TODO">TODO</span> sundtek for Sundtek devices (local or network connection)</h4>
<div class="outline-text-4" id="text-7-14-1">
<p>
Vendor-IDs:
</p>
<ul class="org-ul">
<li>eb1a:5[1b2] (alte Generation)</li>
<li>2659:* (neuere Sticks)</li>
</ul>
</div>
</div>
<div id="outline-container-orga4adbf3" class="outline-4">
<h4 id="orga4adbf3"><span class="section-number-4">7.14.2</span> <span class="todo TODO">TODO</span> drivers for TT S2-6400 FF</h4>
<div class="outline-text-4" id="text-7-14-2">
<p>
<a href="https://github.com/s-moch/linux-saa716x">https://github.com/s-moch/linux-saa716x</a> - kann man den relevanten Teil als dkms-Paket bauen?
</p>
</div>
</div>
</div>
<div id="outline-container-orge5f95a4" class="outline-3">
<h3 id="orge5f95a4"><span class="section-number-3">7.15</span> autoinstall-ubuntu-drivers</h3>
<div class="outline-text-3" id="text-7-15">
<p>
The tool ubuntu-drivers is used to install the matching driver version for nvidia graphics cards, virtualbox guest additions and Intel and AMD microcode updates.
</p>
</div>
<div id="outline-container-org6b121ab" class="outline-4">
<h4 id="org6b121ab"><span class="section-number-4">7.15.1</span> tasks</h4>
<div class="outline-text-4" id="text-7-15-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file roles/autoinstall-ubuntu-drivers/tasks/main.yml</span>
- <span class="org-variable-name">name</span>: autoinstall ubuntu-drivers-common
<span class="org-variable-name">block</span>:
- <span class="org-variable-name">name</span>: apt | install ubuntu-drivers-common
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: ubuntu-drivers-common
<span class="org-variable-name">state</span>: present
- <span class="org-variable-name">name</span>: use ubuntu-drivers to install additional drivers automatically
<span class="org-variable-name">command</span>: ubuntu-drivers --package-list /etc/yavdr/autoinstalled autoinstall
<span class="org-variable-name">when</span>: (ansible_virtualization_type <span class="org-type">!=</span> <span class="org-string">"virtualbox"</span> and ansible_virtualization_role <span class="org-type">!=</span> <span class="org-string">"guest"</span>)
<span class="org-comment-delimiter"># </span><span class="org-comment">ubuntu-drivers-common tries to autoinstall</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">conflicting packages for virtualbox in Ubuntu 16.04 and 18.04 :(</span>
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgb7eed58" class="outline-3">
<h3 id="orgb7eed58"><span class="section-number-3">7.16</span> autoinstall-virtualbox-guest</h3>
<div class="outline-text-3" id="text-7-16">
<p>
This role installs the guest additions for virtualbox guests on Ubuntu 16.04
</p>
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file roles/autoinstall-virtualbox-guest/tasks/main.yml</span>
- <span class="org-variable-name">name</span>: install virtualbox guest additions
<span class="org-variable-name">block</span>:
- <span class="org-variable-name">name</span>: install packages
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">name</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">with_items</span>:
- dkms
- virtualbox-guest-x11-hwe
- virtualbox-guest-dkms-hwe
- virtualbox-guest-x11-hwe
<span class="org-comment-delimiter"># </span><span class="org-comment">TODO: set xineliboutput as frontend</span>
<span class="org-variable-name">when</span>:
- ansible_virtualization_type == <span class="org-string">"virtualbox"</span>
- ansible_virtualization_role == <span class="org-string">"guest"</span>
- ansible_distribution == <span class="org-string">"Ubuntu"</span>
- <span class="org-variable-name">name</span>: set xineliboutput as frontend
<span class="org-variable-name">block</span>:
- <span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">with_items</span>:
- vdr-plugin-xineliboutput
- xineliboutput-sxfe
- <span class="org-variable-name">command</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">with_items</span>:
- vdrctl disable softhddevice
- vdrctl disable vaapidevice
- vdrctl disable xine
- vdrctl disable pvr350
- vdrctl enable xineliboutput
<span class="org-variable-name">ignore_errors</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">when</span>:
- ansible_virtualization_type == <span class="org-string">"virtualbox"</span>
- ansible_virtualization_role == <span class="org-string">"guest"</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org7d58e04" class="outline-3">
<h3 id="org7d58e04"><span class="section-number-3">7.17</span> autoinstall-atric-usb</h3>
<div class="outline-text-3" id="text-7-17">
</div>
<div id="outline-container-org70807bb" class="outline-4">
<h4 id="org70807bb"><span class="section-number-4">7.17.1</span> dependencies</h4>
<div class="outline-text-4" id="text-7-17-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-variable-name">dependencies</span>:
- { <span class="org-variable-name">role</span>: collect-facts }
- { <span class="org-variable-name">role</span>: yavdr-remote }
</pre>
</div>
</div>
</div>
<div id="outline-container-org4af8e96" class="outline-4">
<h4 id="org4af8e96"><span class="section-number-4">7.17.2</span> tasks</h4>
<div class="outline-text-4" id="text-7-17-2">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file roles/autoinstall-atric-usb/tasks/main.yml</span>
- <span class="org-variable-name">name</span>: install and configure Atric IR-WakeupUSB
<span class="org-variable-name">block</span>:
- <span class="org-variable-name">name</span>: apt | install lirc-drv-irman
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: lirc-drv-irman
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">tags</span>:
- packages
- <span class="org-variable-name">name</span>: write lirc configuration
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/lirc_options.conf.j2
<span class="org-variable-name">dest</span>: /etc/lirc/lirc_options.conf
<span class="org-variable-name">tags</span>:
- config
- systemd
- <span class="org-variable-name">name</span>: enable lircd, eventlircd, lircd2uinput
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">enabled</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">state</span>: started
<span class="org-variable-name">masked</span>: <span class="org-constant">no</span>
<span class="org-variable-name">daemon_reload</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">with_items</span>:
- eventlircd.service
- lircd2uinput.service
- lircd.service
<span class="org-variable-name">tags</span>:
- systemd
<span class="org-variable-name">when</span>: <span class="org-string">'"04d8:f844" in usb'</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org3f9c119" class="outline-4">
<h4 id="org3f9c119"><span class="section-number-4">7.17.3</span> templates</h4>
<div class="outline-text-4" id="text-7-17-3">
<div class="org-src-container">
<pre class="src src-conf">{{ ansible_managed | comment }}
[<span class="org-type">lircd</span>]
<span class="org-variable-name">nodaemon</span> = False
<span class="org-variable-name">driver</span> = irman
<span class="org-variable-name">device</span> = /dev/irman
<span class="org-variable-name">output</span> = /var/run/lirc/lircd0
<span class="org-variable-name">pidfile</span> = /var/run/lirc/lircd0.pid
<span class="org-variable-name">plugindir</span> = /usr/lib/x86_64-linux-gnu/lirc/plugins
<span class="org-variable-name">permission</span> = 666
<span class="org-variable-name">allow-simulate</span> = No
<span class="org-variable-name">repeat-max</span> = 600
<span class="org-comment-delimiter">#</span><span class="org-comment">loglevel = 6</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">release = true</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">release_suffix = _EVUP</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">logfile = ...</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">driver-options = ...</span>
[<span class="org-type">lircmd</span>]
<span class="org-variable-name">uinput</span> = False
<span class="org-variable-name">nodaemon</span> = False
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org7216a1b" class="outline-3">
<h3 id="org7216a1b"><span class="section-number-3">7.18</span> autoinstall-yausbir</h3>
<div class="outline-text-3" id="text-7-18">
</div>
<div id="outline-container-org8c524e6" class="outline-4">
<h4 id="org8c524e6"><span class="section-number-4">7.18.1</span> dependencies</h4>
<div class="outline-text-4" id="text-7-18-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-variable-name">dependencies</span>:
- { <span class="org-variable-name">role</span>: yavdr-remote }
</pre>
</div>
</div>
</div>
<div id="outline-container-org174926f" class="outline-4">
<h4 id="org174926f"><span class="section-number-4">7.18.2</span> tasks</h4>
<div class="outline-text-4" id="text-7-18-2">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file roles/autoinstall-atric-usb/tasks/main.yml</span>
- <span class="org-variable-name">name</span>: install and configure Atric IR-WakeupUSB
<span class="org-variable-name">block</span>:
- <span class="org-variable-name">name</span>: apt | install lirc-drv-yausbir
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: lirc-drv-yausbir
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">tags</span>:
- packages
- <span class="org-variable-name">name</span>: write lirc configuration
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/lirc_options.conf.j2
<span class="org-variable-name">dest</span>: /etc/lirc/lirc_options.conf
<span class="org-variable-name">tags</span>:
- config
- systemd
- <span class="org-variable-name">name</span>: enable lircd, eventlircd, lircd2uinput
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">enabled</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">state</span>: started
<span class="org-variable-name">masked</span>: <span class="org-constant">no</span>
<span class="org-variable-name">daemon_reload</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">with_items</span>:
- eventlircd.service
- lircd2uinput.service
- lircd.service
<span class="org-variable-name">tags</span>:
- systemd
<span class="org-variable-name">when</span>: <span class="org-string">'"10c4:876c" in usb'</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org16f1c05" class="outline-4">
<h4 id="org16f1c05"><span class="section-number-4">7.18.3</span> templates</h4>
<div class="outline-text-4" id="text-7-18-3">
<div class="org-src-container">
<pre class="src src-conf">{{ ansible_managed | comment }}
[<span class="org-type">lircd</span>]
<span class="org-variable-name">nodaemon</span> = False
<span class="org-variable-name">driver</span> = ya_usbir
<span class="org-variable-name">output</span> = /var/run/lirc/lircd0
<span class="org-variable-name">pidfile</span> = /var/run/lirc/lircd0.pid
<span class="org-variable-name">plugindir</span> = /usr/lib/x86_64-linux-gnu/lirc/plugins
<span class="org-variable-name">permission</span> = 666
<span class="org-variable-name">allow-simulate</span> = No
<span class="org-variable-name">repeat-max</span> = 600
<span class="org-comment-delimiter">#</span><span class="org-comment">loglevel = 6</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">release = true</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">release_suffix = _EVUP</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">logfile = ...</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">driver-options = ...</span>
[<span class="org-type">lircmd</span>]
<span class="org-variable-name">uinput</span> = False
<span class="org-variable-name">nodaemon</span> = False
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org3b5dcd8" class="outline-3">
<h3 id="org3b5dcd8"><span class="section-number-3">7.19</span> autoinstall-satip</h3>
<div class="outline-text-3" id="text-7-19">
<p>
If a Sat&gt;IP Server responds to a discovery request, the package vdr-plugin-satip is installed.
</p>
</div>
<div id="outline-container-orgb0c7933" class="outline-4">
<h4 id="orgb0c7933"><span class="section-number-4">7.19.1</span> tasks</h4>
<div class="outline-text-4" id="text-7-19-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file roles/autoinstall-satip/tasks/main.yml</span>
- <span class="org-variable-name">name</span>: <span class="org-string">"detect SAT&gt;IP Server(s) on the network"</span>
<span class="org-variable-name">action</span>: satip_facts
- <span class="org-variable-name">debug</span>:
<span class="org-variable-name">var</span>: satip_devices
<span class="org-variable-name">verbosity</span>: 1
- <span class="org-variable-name">name</span>: apt | install vdr-plugin-satip if a Sat&gt;IP server has been detected
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: vdr-plugin-satip
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">when</span>: satip_devices
<span class="org-variable-name">notify</span>: [ <span class="org-string">'Restart VDR'</span> ]
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org38f05df" class="outline-3">
<h3 id="org38f05df"><span class="section-number-3">7.20</span> autoinstall-targavfd</h3>
<div class="outline-text-3" id="text-7-20">
</div>
<div id="outline-container-org5f9fd3a" class="outline-4">
<h4 id="org5f9fd3a"><span class="section-number-4">7.20.1</span> tasks</h4>
<div class="outline-text-4" id="text-7-20-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file roles/autoinstall-targavfd/tasks/main.yml</span>
- <span class="org-variable-name">name</span>: apt | install vdr-plugin-targavfd if connected
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: vdr-plugin-targavfd
<span class="org-variable-name">when</span>: <span class="org-string">'"19c2:6a11" in usb'</span>
<span class="org-variable-name">notify</span>: [ <span class="org-string">'Restart VDR'</span> ]
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org8c3a46b" class="outline-3">
<h3 id="org8c3a46b"><span class="section-number-3">7.21</span> autoinstall-imonlcd</h3>
<div class="outline-text-3" id="text-7-21">
</div>
<div id="outline-container-org1acb75d" class="outline-4">
<h4 id="org1acb75d"><span class="section-number-4">7.21.1</span> tasks</h4>
<div class="outline-text-4" id="text-7-21-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file roles/autoinstall-imonlcd/tasks/main.yml</span>
- <span class="org-variable-name">name</span>: apt | install vdr-plugin-imonlcd if connected
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: vdr-plugin-imonlcd
<span class="org-variable-name">when</span>: <span class="org-string">'"15c2:0038" in usb or "15c2:ffdc" in usb'</span>
<span class="org-variable-name">notify</span>: [ <span class="org-string">'Restart VDR'</span> ]
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org1dbeafb" class="outline-3">
<h3 id="org1dbeafb"><span class="section-number-3">7.22</span> autoinstall-libcecdaemon</h3>
<div class="outline-text-3" id="text-7-22">
</div>
<div id="outline-container-org5af8ff7" class="outline-4">
<h4 id="org5af8ff7"><span class="section-number-4">7.22.1</span> tasks</h4>
<div class="outline-text-4" id="text-7-22-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file roles/autoinstall-libcec-daemon/tasks/main.yml</span>
- <span class="org-variable-name">name</span>: apt | install libcec-daemon if connected
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: libcec-daemon
<span class="org-variable-name">when</span>:
- <span class="org-string">"2548:1002"</span> in usb
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org47190b2" class="outline-3">
<h3 id="org47190b2"><span class="section-number-3">7.23</span> autoinstall-pvr350</h3>
<div class="outline-text-3" id="text-7-23">
</div>
<div id="outline-container-orgc808272" class="outline-4">
<h4 id="orgc808272"><span class="section-number-4">7.23.1</span> tasks</h4>
<div class="outline-text-4" id="text-7-23-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file roles/autoinstall-pvr350/tasks/main.yml</span>
- <span class="org-variable-name">name</span>: apt | install vdr-plugin-pvr350 if connected
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: vdr-plugin-pvr350
<span class="org-variable-name">when</span>: <span class="org-string">'"0070:4000" in pci'</span>
<span class="org-variable-name">notify</span>: [ <span class="org-string">'Restart VDR'</span> ]
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org08cb143" class="outline-3">
<h3 id="org08cb143"><span class="section-number-3">7.24</span> autoinstall-hauppauge-pvr</h3>
<div class="outline-text-3" id="text-7-24">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file roles/autoinstall-hauppauge-pvr/tasks/main.yml</span>
- <span class="org-variable-name">name</span>: apt | install vdr-plugin-pvrinput if a haupauge pvr card is found
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: vdr-plugin-pvrinput
<span class="org-variable-name">when</span>: <span class="org-string">'"0070:4000" in pci or "4444:0016" in pci'</span>
<span class="org-variable-name">notify</span>: [ <span class="org-string">'Restart VDR'</span> ]
</pre>
</div>
</div>
</div>
<div id="outline-container-orgf4681f1" class="outline-3">
<h3 id="orgf4681f1"><span class="section-number-3">7.25</span> autoinstall-firmware</h3>
<div class="outline-text-3" id="text-7-25">
</div>
<div id="outline-container-org2738eca" class="outline-4">
<h4 id="org2738eca"><span class="section-number-4">7.25.1</span> dependencies</h4>
<div class="outline-text-4" id="text-7-25-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-variable-name">dependencies</span>:
- { <span class="org-variable-name">role</span>: collect-facts }
</pre>
</div>
</div>
</div>
<div id="outline-container-orgb03807f" class="outline-4">
<h4 id="orgb03807f"><span class="section-number-4">7.25.2</span> tasks</h4>
<div class="outline-text-4" id="text-7-25-2">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">This role provides easyily downloadable firmware files</span>
- <span class="org-variable-name">name</span>: Firmware for Hauppauge WinTV HD Solo/Duo, PCTV 292e
<span class="org-variable-name">get_url</span>:
<span class="org-variable-name">url</span>: https://github.com/OpenELEC/dvb-firmware/raw/master/firmware/dvb-demod-si2168-b40-01.fw
<span class="org-variable-name">checksum</span>: sha256:8507536630d75a316d0719d6b95c04b90c36baa5b457ad457c9bacadafcef134
<span class="org-variable-name">dest</span>: /lib/firmware/dvb-demod-si2168-b40-01.fw
<span class="org-variable-name">when</span>: <span class="org-string">'"2040:0264" in usb or "2013:025f" in usb'</span>
- <span class="org-variable-name">name</span>: Firmware for Hauppauge WinTV-HVR-930C
<span class="org-variable-name">get_url</span>:
<span class="org-variable-name">url</span>: https://github.com/OpenELEC/dvb-firmware/raw/master/firmware/dvb-fe-xc5000-1.6.114.fw
<span class="org-variable-name">checksum</span>: sha256:7104bda8df301fe1bd4c09de1708aeb6d0d8e1f9d55505449fecfad82639235f
<span class="org-variable-name">dest</span>: /lib/firmware/dvb-fe-xc5000-1.6.114.fw
<span class="org-variable-name">when</span>: <span class="org-string">'"2040:1605" in usb'</span>
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgd2e9e2f" class="outline-3">
<h3 id="orgd2e9e2f"><span class="section-number-3">7.26</span> autoinstall-dvbsky-firmware</h3>
<div class="outline-text-3" id="text-7-26">
</div>
<div id="outline-container-org0708e70" class="outline-4">
<h4 id="org0708e70"><span class="section-number-4">7.26.1</span> dependencies</h4>
<div class="outline-text-4" id="text-7-26-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-variable-name">dependencies</span>:
- { <span class="org-variable-name">role</span>: collect-facts }
</pre>
</div>
</div>
</div>
<div id="outline-container-org471facf" class="outline-4">
<h4 id="org471facf"><span class="section-number-4">7.26.2</span> defaults</h4>
<div class="outline-text-4" id="text-7-26-2">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file roles/autoinstall-dvbsky-firmware</span>
<span class="org-variable-name">dvbsky_firmware_files</span>: []
</pre>
</div>
</div>
</div>
<div id="outline-container-org5c8eeb9" class="outline-4">
<h4 id="org5c8eeb9"><span class="section-number-4">7.26.3</span> tasks</h4>
<div class="outline-text-4" id="text-7-26-3">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file roles/autoinstall-dvbsky-firmware/tasks/main.yml</span>
- <span class="org-variable-name">name</span>: determine needed firmware files by device ids
<span class="org-variable-name">block</span>:
- <span class="org-variable-name">name</span>: add firmware files for DVBSky if a card has been detected
<span class="org-variable-name">set_fact</span>:
<span class="org-variable-name">dvbsky_firmware_files</span>: [<span class="org-string">'dvb-demod-m88ds3103.fw'</span>, <span class="org-string">'dvb-demod-m88rs6000.fw'</span>, <span class="org-string">'dvb-tuner-si2158-a20-01.fw'</span>, <span class="org-string">'dvb-demod-si2168-a20-01.fw'</span>, <span class="org-string">'dvb-demod-si2168-a30-01.fw'</span>, <span class="org-string">'dvb-demod-si2168-b40-01.fw'</span>, <span class="org-string">'dvb-fe-ds300x.fw'</span>, <span class="org-string">'dvb-fe-ds3103.fw'</span>, <span class="org-string">'dvb-fe-rs6000.fw'</span>]
<span class="org-variable-name">when</span>:
- <span class="org-string">'"1ade:3038" in pci'</span>
<span class="org-variable-name">when</span>:
- not dvbsky_firmware_files
- <span class="org-variable-name">name</span>: Download firmware for DVBSky cards and copy required files to /lib/firmware
<span class="org-variable-name">block</span>:
<span class="org-comment-delimiter"># </span><span class="org-comment">download and extract firmware</span>
- <span class="org-variable-name">unarchive</span>:
<span class="org-variable-name">src</span>: http://www.dvbsky.net/download/linux/dvbsky-firmware.tar.gz
<span class="org-variable-name">dest</span>: /tmp/
<span class="org-variable-name">remote_src</span>: <span class="org-constant">yes</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">copy firmware file</span>
- <span class="org-variable-name">copy</span>:
<span class="org-variable-name">src</span>: <span class="org-string">"/tmp/dvbsky-firmware/{{ item }}"</span>
<span class="org-variable-name">dest</span>: /lib/firmware/
<span class="org-variable-name">owner</span>: root
<span class="org-variable-name">group</span>: root
<span class="org-variable-name">mode</span>: 0644
<span class="org-variable-name">with_items</span>: <span class="org-string">'{{ dvbsky_firmware_files }}'</span>
<span class="org-variable-name">notify</span>: [<span class="org-string">'Trigger Udev'</span>]
<span class="org-comment-delimiter"># </span><span class="org-comment">Remove temporary files</span>
- <span class="org-variable-name">file</span>:
<span class="org-variable-name">path</span>: /tmp/dvbsky-firmware
<span class="org-variable-name">state</span>: absent
<span class="org-variable-name">when</span>:
- dvbsky_firmware_files is defined
- dvbsky_firmware_files
<span class="org-variable-name">tags</span>:
- install
- autodetect
- dvbsky
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgef103c4" class="outline-3">
<h3 id="orgef103c4"><span class="section-number-3">7.27</span> <span class="todo TODO">TODO</span> autoinstall-dvbhddevice</h3>
<div class="outline-text-3" id="text-7-27">
<p>
Problem: woher kommt der Treiber (AFAIK noch nicht im Kernel)? Die Firmware sollte in yavdr-firmware stecken
</p>
</div>
<div id="outline-container-orgc6aff16" class="outline-4">
<h4 id="orgc6aff16"><span class="section-number-4">7.27.1</span> dependencies</h4>
<div class="outline-text-4" id="text-7-27-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-variable-name">dependencies</span>:
- { <span class="org-variable-name">role</span>: collect-facts }
</pre>
</div>
</div>
</div>
<div id="outline-container-org98d15df" class="outline-4">
<h4 id="org98d15df"><span class="section-number-4">7.27.2</span> tasks</h4>
<div class="outline-text-4" id="text-7-27-2">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file roles/autoinstall-dvbhddevice/tasks/main.yml</span>
- <span class="org-variable-name">name</span>: apt | install vdr-plugin-dvbhddevice if connected
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: vdr-plugin-dvbhddevice
<span class="org-variable-name">when</span>: <span class="org-string">'"13c2:300a" in pci or "13c2:300b" in pci'</span>
<span class="org-variable-name">notify</span>: [ <span class="org-string">'Restart VDR'</span> ]
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org502fe50" class="outline-3">
<h3 id="org502fe50"><span class="section-number-3">7.28</span> autoinstall-dvbsddevice</h3>
<div class="outline-text-3" id="text-7-28">
</div>
<div id="outline-container-org93b6e2f" class="outline-4">
<h4 id="org93b6e2f"><span class="section-number-4">7.28.1</span> dependencies</h4>
<div class="outline-text-4" id="text-7-28-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-variable-name">dependencies</span>:
- { <span class="org-variable-name">role</span>: collect-facts }
</pre>
</div>
</div>
</div>
<div id="outline-container-org5f8df25" class="outline-4">
<h4 id="org5f8df25"><span class="section-number-4">7.28.2</span> tasks</h4>
<div class="outline-text-4" id="text-7-28-2">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file roles/autoinstall-dvbsddevice/tasks/main.yml</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">TODO: install firmware</span>
- <span class="org-variable-name">name</span>: apt | install vdr-plugin-dvbsddevice if module is loaded
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: vdr-plugin-dvbsddevice
<span class="org-variable-name">when</span>: <span class="org-string">'"dvb_ttpci" in modules'</span>
<span class="org-variable-name">notify</span>: [ <span class="org-string">'Restart VDR'</span> ]
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgea5b798" class="outline-3">
<h3 id="orgea5b798"><span class="section-number-3">7.29</span> autoinstall-hardware-irmp</h3>
<div class="outline-text-3" id="text-7-29">
</div>
<div id="outline-container-org8ac5e57" class="outline-4">
<h4 id="org8ac5e57"><span class="section-number-4">7.29.1</span> dependencies</h4>
<div class="outline-text-4" id="text-7-29-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-variable-name">dependencies</span>:
- { <span class="org-variable-name">role</span>: collect-facts }
</pre>
</div>
</div>
</div>
<div id="outline-container-orgf0d9998" class="outline-4">
<h4 id="orgf0d9998"><span class="section-number-4">7.29.2</span> tasks</h4>
<div class="outline-text-4" id="text-7-29-2">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file roles/autoinstall-hardware-irmp/tasks/main.yml</span>
- <span class="org-variable-name">name</span>: apt | install yavdr-hardware-irmp if connected
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: yavdr-hardware-irmp
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">when</span>: <span class="org-string">'"1209:4444" in usb or "16c0:27d9" in usb'</span>
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org38cdaa8" class="outline-3">
<h3 id="org38cdaa8"><span class="section-number-3">7.30</span> kodi</h3>
<div class="outline-text-3" id="text-7-30">
</div>
<div id="outline-container-org02a1df8" class="outline-4">
<h4 id="org02a1df8"><span class="section-number-4">7.30.1</span> tasks</h4>
<div class="outline-text-4" id="text-7-30-1">
</div>
<ol class="org-ol">
<li><a id="org147fe1f"></a>Install KODI<br />
<ul class="org-ul">
<li><a id="orgd774473"></a>main.yml<br />
<div class="outline-text-6" id="text-orgd774473">
<div class="org-src-container">
<pre class="src src-yaml">- <span class="org-variable-name">import_tasks</span>: install-kodi.yml tags=install,update,kodi:install
- <span class="org-variable-name">import_tasks</span>: configure-kodi.yml tags=install,update,kodi:configure
</pre>
</div>
</div>
</li>
<li><a id="org0adc63e"></a>install-kodi.yml<br />
<div class="outline-text-6" id="text-7-30-1-1-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
- <span class="org-variable-name">name</span>: apt | install kodi packages
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">install_recommends</span>: <span class="org-constant">no</span>
<span class="org-variable-name">with_items</span>:
- kodi
- kodi-pvr-vdr-vnsi
- kodi-eventclients-kodi-send <span class="org-comment-delimiter"># </span><span class="org-comment">for ubuntu packages, team-xbmc uses "kodi-eventclients-xbmc-send for some reason</span>
</pre>
</div>
</div>
</li>
<li><a id="org5f7d028"></a>configure-kodi.yml<br />
<div class="outline-text-6" id="text-7-30-1-1-2">
<div class="org-src-container">
<pre class="src src-yaml">- <span class="org-variable-name">name</span>: create kodi.service for the user session
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: <span class="org-string">'templates/kodi.service.j2'</span>
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.home }}/.config/systemd/user/kodi.service'</span>
<span class="org-variable-name">mode</span>: 0644
<span class="org-variable-name">owner</span>: <span class="org-string">'{{ vdr.user }}'</span>
<span class="org-variable-name">group</span>: <span class="org-string">'{{ vdr.group }}'</span>
- <span class="org-variable-name">name</span>: create kodi user directory
<span class="org-variable-name">file</span>:
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.home }}/{{ item }}'</span>
<span class="org-variable-name">state</span>: directory
<span class="org-variable-name">owner</span>: <span class="org-string">'{{ vdr.user }}'</span>
<span class="org-variable-name">group</span>: <span class="org-string">'{{ vdr.group }}'</span>
<span class="org-variable-name">mode</span>: <span class="org-string">"0775"</span>
<span class="org-variable-name">with_items</span>:
- .kodi
- .kodi/userdata
- .kodi/userdata/keymaps
- <span class="org-variable-name">name</span>: copy Lircmap.xml if it does not exist yet
<span class="org-variable-name">copy</span>:
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.home }}/.kodi/userdata/Lircmap.xml'</span>
<span class="org-variable-name">src</span>: <span class="org-string">'files/userdata/Lircmap.xml'</span>
<span class="org-variable-name">owner</span>: <span class="org-string">'{{ vdr.user }}'</span>
<span class="org-variable-name">group</span>: <span class="org-string">'{{ vdr.group }}'</span>
<span class="org-variable-name">mode</span>: <span class="org-string">"0664"</span>
<span class="org-variable-name">force</span>: <span class="org-constant">no</span>
- <span class="org-variable-name">name</span>: copy remote.xml if it does not exist yet
<span class="org-variable-name">copy</span>:
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.home }}/.kodi/userdata/keymaps/remote.xml'</span>
<span class="org-variable-name">src</span>: <span class="org-string">'files/userdata/keymaps/remote.xml'</span>
<span class="org-variable-name">owner</span>: <span class="org-string">'{{ vdr.user }}'</span>
<span class="org-variable-name">group</span>: <span class="org-string">'{{ vdr.group }}'</span>
<span class="org-variable-name">mode</span>: <span class="org-string">"0664"</span>
<span class="org-variable-name">force</span>: <span class="org-constant">no</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">TODO: Add configuration files</span>
</pre>
</div>
</div>
</li>
</ol>
</li>
</ol>
</div>
<div id="outline-container-org96a0df6" class="outline-4">
<h4 id="org96a0df6"><span class="section-number-4">7.30.2</span> templates</h4>
<div class="outline-text-4" id="text-7-30-2">
</div>
<ol class="org-ol">
<li><a id="orgf3487d6"></a>kodi.service<br />
<div class="outline-text-5" id="text-7-30-2-1">
<p>
This systemd unit for the user session starts (and stops) kodi.
</p>
<div class="org-src-container">
<pre class="src src-conf">[<span class="org-type">Unit</span>]
<span class="org-variable-name">Description</span>=Start kodi in user session
[<span class="org-type">Service</span>]
<span class="org-variable-name">Type</span>=simple
<span class="org-variable-name">PassEnvironment</span>=DISPLAY XDG_RUNTIME_DIR DBUS_SESSION_BUS_ADDRESS
<span class="org-variable-name">ExecStartPre</span>=-/usr/bin/set-kodi-display
<span class="org-variable-name">ExecStart</span>=/usr/bin/kodi -l /run/lirc/lircd
<span class="org-variable-name">ExecStop</span>=/bin/bash -c <span class="org-string">"/usr/bin/kodi-send --action=QUIT; while ps -p $MAINPID -o comm=; do sleep .25; done"</span>
<span class="org-variable-name">TimeoutStopSec</span>=10
<span class="org-variable-name">SuccessExitStatus</span>=0 127
<span class="org-variable-name">Restart</span>=on-failure
</pre>
</div>
</div>
</li>
</ol>
</div>
<div id="outline-container-org7c77b6b" class="outline-4">
<h4 id="org7c77b6b"><span class="section-number-4">7.30.3</span> files</h4>
<div class="outline-text-4" id="text-7-30-3">
<p>
Those configuration files provide a preconfiguration for kodi which overrides the system wide configuration
</p>
</div>
<ol class="org-ol">
<li><a id="orgcf02329"></a>Lircmap.xml<br />
<div class="outline-text-5" id="text-7-30-3-1">
<p>
This file allows to map keys sent by remotes via eventlircd (which uses the name <code>devinput</code>) to kodi key names.
</p>
<div class="org-src-container">
<pre class="src src-nxml"><span class="org-string"><span class="org-nxml-processing-instruction-delimiter">&lt;?</span></span><span class="org-string"><span class="org-nxml-processing-instruction-target">xml</span></span><span class="org-string"> </span><span class="org-string"><span class="org-nxml-processing-instruction-content">version="1.0" encoding="UTF-8"</span></span><span class="org-string"><span class="org-nxml-processing-instruction-delimiter">?&gt;</span></span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">lircmap</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span> <span class="org-nxml-attribute-local-name">device</span>=<span class="org-string">"linux-input-layer"</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">altname</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">cx23885_remote</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">altname</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">altname</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">devinput</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">altname</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">up</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_UP</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">up</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">down</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_DOWN</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">down</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_MENU</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">select</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_OK</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">select</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_ESC</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">left</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_LEFT</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">left</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">right</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_RIGHT</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">right</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">red</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_RED</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">red</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">green</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_GREEN</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">green</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">yellow</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_YELLOW</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">yellow</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">blue</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_BLUE</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">blue</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_0</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">one</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_1</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">one</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">two</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_2</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">two</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">three</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_3</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">three</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">four</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_4</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">four</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">five</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_5</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">five</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">six</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_6</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">six</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">seven</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_7</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">seven</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">eight</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_8</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">eight</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">nine</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_9</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">nine</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_INFO</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">play</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_PLAY</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">play</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">play</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_PLAYPAUSE</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">play</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">pause</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_PAUSE</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">pause</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">stop</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_STOP</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">stop</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">record</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_RECORD</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">record</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">forward</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_FASTFORWARD</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">forward</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">reverse</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_REWIND</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">reverse</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">skipplus</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_NEXT</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">skipplus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">skipminus</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_BACK</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">skipminus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">power</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_POWER2</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">power</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">channelplus</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_CHANNELUP</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">channelplus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">channelminus</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_CHANNELDOWN</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">channelminus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">title</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_PROG3</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">title</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">volumeplus</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_VOLUMEUP</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">volumeplus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">volumeminus</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_VOLUMEDOWN</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">volumeminus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">teletext</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_TEXT</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">teletext</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mute</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_MUTE</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mute</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">start</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_SELECT</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">start</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">subtitle</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_SUBTITLE</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">subtitle</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">audio</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_MODE</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">audio</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mute</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_MUTE</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mute</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">myvideo</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_VIDEO</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">myvideo</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mymusic</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_AUDIO</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mymusic</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mypictures</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_IMAGES</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mypictures</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">recordedtv</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_PVR</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">recordedtv</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">guide</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_EPG</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">guide</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">display</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_SCREEN</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">display</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">enter</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_PROG4</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">enter</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">playlist</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_ZOOM</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">playlist</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">livetv</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_CHANNEL</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">livetv</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mytv</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_TV</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mytv</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">liveradio</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">KEY_FN</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">liveradio</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">lircmap</span><span class="org-nxml-tag-delimiter">&gt;</span>
</pre>
</div>
</div>
</li>
<li><a id="orgf6f8435"></a>keymaps<br />
<div class="outline-text-5" id="text-7-30-3-2">
<p>
This file maps the keys defined in Lircmap.xml to actions within kodi.
</p>
</div>
<ol class="org-ol">
<li><a id="org51bbfb4"></a>remote.xml<br />
<div class="outline-text-6" id="text-7-30-3-2-1">
<div class="org-src-container">
<pre class="src src-xml"><span class="org-string"><span class="org-nxml-processing-instruction-delimiter">&lt;?</span></span><span class="org-string"><span class="org-nxml-processing-instruction-target">xml</span></span><span class="org-string"> </span><span class="org-string"><span class="org-nxml-processing-instruction-content">version="1.0" encoding="UTF-8"</span></span><span class="org-string"><span class="org-nxml-processing-instruction-delimiter">?&gt;</span></span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">This file contains the mapping of keys (gamepad, remote, and keyboard) to actions within XBMC </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">The &lt;global&gt; section is a fall through - they will only be used if the button is not </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">used in the current window's section. Note that there is only handling </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">for a single action per button at this stage. </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">For joystick/gamepad configuration under linux/win32, see below as it differs from xbox </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">gamepads. </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">The format is: </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">&lt;device&gt; </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">&lt;button&gt;action&lt;/button&gt; </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">&lt;/device&gt; </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">To map keys from other remotes using the RCA protocol, you may add &lt;universalremote&gt; blocks </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">In this case, the tags used are &lt;obc#&gt; where # is the original button code (OBC) of the key </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">You set it up by adding a &lt;universalremote&gt; block to the window or &lt;global&gt; section: </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">&lt;universalremote&gt; </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">&lt;obc45&gt;Stop&lt;/obc45&gt; </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">&lt;/universalremote&gt; </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">To find out the OBC's of your remote, try enabling the &lt;displayremotecodes&gt; tag in AdvancedSettings.xml </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">Note that the action can be a built-in function. </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">eg &lt;B&gt;XBMC.ActivateWindow(MyMusic)&lt;/B&gt; </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">would automatically go to My Music on the press of the B button. </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">Joysticks / Gamepads: </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">See the sample PS3 controller configuration below for the format. </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- --&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">Joystick Name: </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">Do 'cat /proc/bus/input/devices' or see your xbmc log file to find the names of </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">detected joysticks. The name used in the configuration should match the detected name. </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- --&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">Button Ids: </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">'id' is the button ID used by SDL. Joystick button ids of connected joysticks appear </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">in xbmc.log when they are pressed. Use your log to map custom buttons to actions. </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- --&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">Axis Ids / Analog Controls </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">Coming soon. </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">keymap</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">global</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">universalremote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">obc150</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.ejecttray()</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">obc150</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">obc151</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Playlist</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">obc151</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">universalremote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">play</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PlayPause</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">play</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">pause</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Pause</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">pause</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">stop</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Stop</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">stop</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">forward</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">FastForward</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">forward</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">reverse</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Rewind</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">reverse</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">left</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Left</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">left</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">right</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Right</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">right</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">up</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Up</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">up</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">down</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Down</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">down</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">select</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Select</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">select</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">pageplus</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PageUp</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">pageplus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">pageminus</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PageDown</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">pageminus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">ParentDir</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PreviousMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">title</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">ContextMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">title</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Info</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">skipplus</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">SkipNext</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">skipplus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">skipminus</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">SkipPrevious</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">skipminus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">display</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">FullScreen</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">display</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">start</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PreviousMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">start</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">record</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Screenshot</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">record</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">volumeplus</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">VolumeUp</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">volumeplus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">volumeminus</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">VolumeDown</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">volumeminus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mute</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Mute</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mute</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">power</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.Quit()</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">power</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">myvideo</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.ActivateWindow(MyVideos)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">myvideo</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mymusic</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.ActivateWindow(MyMusic)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mymusic</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">mypictures</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.ActivateWindow(MyPictures)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">mypictures</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!--</span><span class="org-comment">- &lt;mytv&gt;XBMC.ActivateWindow(Home)&lt;/mytv&gt; </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">recordedtv</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.ActivateWindowAndFocus(MyPVR, 34,0, 13,0)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">recordedtv</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">PVR: EPG </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">guide</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.ActivateWindowAndFocus(MyPVR, 31,0, 10,0)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">guide</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">PVR: Channellist </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">livetv</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.ActivateWindowAndFocus(MyPVR, 32,0, 11,0)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">livetv</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">PVR: Radio </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">liveradio</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.ActivateWindowAndFocus(MyPVR, 33,0, 12,0)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">liveradio</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">red</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.ActivateWindow(Home)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">red</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">yellow</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.ActivateWindow(MyVideos)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">yellow</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">green</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.ActivateWindow(MyMusic)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">green</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">&lt;blue&gt;XBMC.ActivateWindow(MyPictures)&lt;/blue&gt; </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number0</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">one</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number1</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">one</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">two</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">JumpSMS2</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">two</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">three</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">JumpSMS3</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">three</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">four</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">JumpSMS4</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">four</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">five</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">JumpSMS5</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">five</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">six</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">JumpSMS6</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">six</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">seven</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">JumpSMS7</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">seven</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">eight</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">JumpSMS8</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">eight</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">nine</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">JumpSMS9</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">nine</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">audio</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">AudioNextLanguage</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">audio</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">subtitle</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">ShowSubtitles</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">subtitle</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">enter</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">FullScreen</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">enter</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">blue</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">ContextMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">blue</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">playlist</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.ActivateWindow(MyMusicPlaylist)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">playlist</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">global</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">Home</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.Skin.ToggleSetting(HomeViewToggle)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.ActivateWindow(SystemInfo)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">clear</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.ActivateWindow(Weather)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">clear</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">blue</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.ActivateWindow(Settings)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">blue</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">red</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">FullScreen</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">red</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">FullScreen</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">Home</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">MyFiles</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">clear</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Delete</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">clear</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">MyFiles</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">MyMusicPlaylist</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Playlist</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span> <span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">Close playlist </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">clear</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Delete</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">clear</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">MyMusicPlaylist</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">MyMusicPlaylistEditor</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Queue</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">MyMusicPlaylistEditor</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">MyMusicFiles</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Queue</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">star</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Queue</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">star</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">start</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">ContextMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">start</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">MyMusicFiles</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">MyMusicLibrary</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Queue</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">star</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Queue</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">star</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">MyMusicLibrary</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">FullscreenVideo</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">FullScreen</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number0</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">one</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number1</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">one</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">two</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number2</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">two</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">three</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number3</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">three</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">four</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number4</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">four</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">five</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number5</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">five</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">six</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number6</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">six</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">seven</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number7</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">seven</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">eight</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number8</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">eight</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">nine</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number9</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">nine</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">left</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Rewind</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">left</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">right</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">FastForward</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">right</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">up</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Play</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">up</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">down</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Pause</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">down</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">yellow</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">StepForward</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">yellow</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">green</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">StepBack</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">green</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">blue</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">CodecInfo</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">blue</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">OSD</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">start</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">OSD</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">start</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.ActivateWindow(PVROSDChannels)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">title</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.ActivateWindow(PVROSDChannels)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">title</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">display</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">AspectRatio</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">display</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">select</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Info</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">select</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">teletext</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.ActivateWindow(Teletext)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">teletext</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">channelplus</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">SkipNext</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">channelplus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">channelminus</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">SkipPrevious</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">channelminus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">record</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.PlayerControl(Record)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">record</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">FullscreenVideo</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">FullscreenInfo</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">FullScreen</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">left</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Rewind</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">left</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">right</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">FastForward</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">right</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">up</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Play</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">up</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">down</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Pause</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">down</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">yellow</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">StepForward</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">yellow</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">green</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">StepBack</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">green</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">display</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">AspectRatio</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">display</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">CodecInfo</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">select</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">select</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">OSD</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">FullscreenInfo</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">PlayerControls</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">PlayerControls</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">Visualisation</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">universalremote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">obc151</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.ActivateWindow(MyMusicPlaylist)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">obc151</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">universalremote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">red</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">FullScreen</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">red</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">yellow</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">AnalogSeekForward</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">yellow</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">green</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">AnalogSeekBack</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">green</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">blue</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">CodecInfo</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">blue</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">left</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Rewind</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">left</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">right</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">FastForward</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">right</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">pageplus</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">SkipNext</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">pageplus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">pageminus</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">SkipPrevious</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">pageminus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">up</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Play</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">up</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">down</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Pause</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">down</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.ActivateWindow(PVROSDChannels)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.ActivateWindow(MyMusicPlaylist)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">select</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Info</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">select</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.ActivateWindow(MusicOSD)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">start</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.ActivateWindow(MusicOSD)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">start</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">Visualisation</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">MusicOSD</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">start</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">start</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">CodecInfo</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">MusicOSD</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">VisualisationSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">VisualisationSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">VisualisationPresetList</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">VisualisationPresetList</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">SlideShow</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">ZoomNormal</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">one</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">ZoomLevel1</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">one</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">two</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">ZoomLevel2</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">two</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">three</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">ZoomLevel3</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">three</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">four</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">ZoomLevel4</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">four</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">five</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">ZoomLevel5</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">five</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">six</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">ZoomLevel6</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">six</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">seven</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">ZoomLevel7</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">seven</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">eight</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">ZoomLevel8</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">eight</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">nine</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">ZoomLevel9</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">nine</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">CodecInfo</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">pageplus</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">ZoomIn</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">pageplus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">pageminus</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">ZoomOut</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">pageminus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">select</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Rotate</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">select</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">up</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Pause</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">up</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">down</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Play</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">down</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PreviousMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">SlideShow</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">ScreenCalibration</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">select</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">NextCalibration</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">select</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">enter</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">NextCalibration</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">enter</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">ResetCalibration</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">display</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">NextResolution</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">display</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">xbox</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">NextResolution</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">xbox</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">ScreenCalibration</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">GUICalibration</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">select</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">NextCalibration</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">select</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">enter</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">NextCalibration</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">enter</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">ResetCalibration</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">GUICalibration</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">SelectDialog</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">SelectDialog</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">VideoOSD</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PreviousMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">start</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">start</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">VideoOSD</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">VideoMenu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">OSD</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PreviousMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Info</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">title</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">CodecInfo</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">title</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number0</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">one</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number1</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">one</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">two</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number2</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">two</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">three</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number3</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">three</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">four</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number4</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">four</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">five</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number5</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">five</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">six</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number6</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">six</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">seven</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number7</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">seven</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">eight</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number8</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">eight</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">nine</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number9</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">nine</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">VideoMenu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">OSDVideoSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">start</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">start</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">OSDVideoSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">OSDAudioSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">start</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">start</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">OSDAudioSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">VideoBookmarks</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">start</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">start</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Delete</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">VideoBookmarks</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">MyVideoLibrary</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Queue</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">clear</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Delete</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">clear</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">green</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">ToggleWatched</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">green</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">yellow</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Queue</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">yellow</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">MyVideoLibrary</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">MyVideoFiles</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Queue</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">star</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Queue</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">star</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">blue</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">ContextMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">blue</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">green</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">ToggleWatched</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">green</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">yellow</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Queue</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">yellow</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">MyVideoFiles</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">MyPictures</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Queue</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">star</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Queue</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">star</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">start</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">ContextMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">start</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">MyPictures</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">MyVideoPlaylist</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Playlist</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span> <span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">Close playlist </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">clear</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Delete</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">clear</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Delete</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">MyVideoPlaylist</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">VirtualKeyboard</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">BackSpace</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">star</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Shift</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">star</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">hash</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Symbols</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">hash</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number0</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">one</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number1</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">one</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">two</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number2</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">two</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">three</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number3</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">three</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">four</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number4</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">four</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">five</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number5</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">five</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">six</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number6</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">six</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">seven</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number7</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">seven</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">eight</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number8</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">eight</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">nine</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number9</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">nine</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">pageminus</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">CursorLeft</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">pageminus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">pageplus</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">CursorRight</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">pageplus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">VirtualKeyboard</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">ContextMenu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">blue</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">blue</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">ContextMenu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">FileStackingDialog</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">FileStackingDialog</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">Scripts</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">XBMC.ActivateWindow(ScriptsDebugInfo)</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">Scripts</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">ScriptsDebugInfo</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Info</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span> <span class="org-comment-delimiter">&lt;!-- </span><span class="org-comment">clears debug python info </span><span class="org-comment-delimiter">--&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">ScriptsDebugInfo</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">NumericInput</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number0</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">one</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number1</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">one</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">two</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number2</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">two</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">three</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number3</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">three</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">four</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number4</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">four</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">five</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number5</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">five</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">six</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number6</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">six</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">seven</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number7</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">seven</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">eight</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number8</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">eight</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">nine</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Number9</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">nine</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">BackSpace</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">NumericInput</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">Weather</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PreviousMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">Weather</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">Settings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PreviousMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">Settings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">MyPicturesSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PreviousMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">MyPicturesSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">MyProgramsSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PreviousMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">MyProgramsSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">MyWeatherSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PreviousMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">MyWeatherSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">MyMusicSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PreviousMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">MyMusicSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">SystemSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PreviousMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">SystemSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">MyVideosSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PreviousMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">MyVideosSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">NetworkSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PreviousMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">NetworkSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">AppearanceSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PreviousMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">AppearanceSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">Profiles</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PreviousMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">Profiles</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">systeminfo</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PreviousMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">systeminfo</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">shutdownmenu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PreviousMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">shutdownmenu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">submenu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PreviousMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">submenu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">MusicInformation</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">MusicInformation</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">MovieInformation</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">MovieInformation</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">LockSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PreviousMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">LockSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">ProfileSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PreviousMenu</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">ProfileSettings</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">PictureInfo</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">skipplus</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">NextPicture</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">skipplus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">skipminus</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">PreviousPicture</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">skipminus</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">PictureInfo</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">Teletext</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">number0</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">zero</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">one</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">number1</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">one</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">two</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">number2</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">two</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">three</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">number3</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">three</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">four</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">number4</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">four</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">five</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">number5</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">five</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">six</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">number6</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">six</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">seven</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">number7</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">seven</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">eight</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">number8</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">eight</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">nine</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">number9</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">nine</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">red</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Red</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">red</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">green</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Green</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">green</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">yellow</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Yellow</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">yellow</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">blue</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Blue</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">blue</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Info</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">info</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">menu</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">start</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">start</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">teletext</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">teletext</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">Teletext</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">Favourites</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span><span class="org-nxml-text">Close</span><span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">back</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">remote</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">Favourites</span><span class="org-nxml-tag-delimiter">&gt;</span>
<span class="org-nxml-tag-delimiter">&lt;</span><span class="org-nxml-tag-slash">/</span><span class="org-nxml-element-local-name">keymap</span><span class="org-nxml-tag-delimiter">&gt;</span>
</pre>
</div>
</div>
</li>
</ol>
</li>
</ol>
</div>
</div>
<div id="outline-container-orgdab1652" class="outline-3">
<h3 id="orgdab1652"><span class="section-number-3">7.31</span> dvd</h3>
<div class="outline-text-3" id="text-7-31">
</div>
<div id="outline-container-org6df3cc0" class="outline-4">
<h4 id="org6df3cc0"><span class="section-number-4">7.31.1</span> tasks</h4>
<div class="outline-text-4" id="text-7-31-1">
</div>
<ul class="org-ul">
<li><a id="orgf87c330"></a>install libdvd-pkg, allow programs to eject optical media<br />
<div class="outline-text-5" id="text-orgf87c330">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file: roles/dvd/tasks/main.yml</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">- name: preconfigure libdvd-pkg</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">shell: |</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">echo 'libdvd-pkg libdvd-pkg/post-invoke_hook-install boolean true' | debconf-set-selections</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">echo 'libdvd-pkg libdvd-pkg/build boolean true' | debconf-set-selections</span>
- <span class="org-variable-name">name</span>: apt | install libdvd-pkg
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">install_recommends</span>: <span class="org-constant">no</span>
<span class="org-variable-name">with_items</span>:
- <span class="org-string">'libdvd-pkg'</span>
- <span class="org-variable-name">name</span>: configure package libdvd-pkg
<span class="org-variable-name">debconf</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'libdvd-pkg'</span>
<span class="org-variable-name">question</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">vtype</span>: boolean
<span class="org-variable-name">value</span>: <span class="org-constant">true</span>
<span class="org-variable-name">with_items</span>:
- <span class="org-string">'libdvd-pkg/post-invoke_hook-install'</span>
- <span class="org-string">'libdvd-pkg/build boolean'</span>
<span class="org-variable-name">notify</span>: [<span class="org-string">'Reconfigure unattended upgrades with dpkg'</span>]
- <span class="org-variable-name">name</span>: change udev rule to allow KODI to eject optical disks
<span class="org-variable-name">shell</span>: sed <span class="org-string">'s/--lock-media //'</span> /lib/udev/rules.d/60-cdrom_id.rules &gt; /etc/udev/rules.d/60-cdrom_id.rules
<span class="org-variable-name">args</span>:
<span class="org-variable-name">creates</span>: /etc/udev/rules.d/60-cdrom_id.rules
</pre>
</div>
</div>
</li>
</ul>
</div>
</div>
<div id="outline-container-orgb868e32" class="outline-3">
<h3 id="orgb868e32"><span class="section-number-3">7.32</span> install-sundtek</h3>
<div class="outline-text-3" id="text-7-32">
</div>
<div id="outline-container-orgd53cb22" class="outline-4">
<h4 id="orgd53cb22"><span class="section-number-4">7.32.1</span> variables</h4>
</div>
<div id="outline-container-org3fecae1" class="outline-4">
<h4 id="org3fecae1"><span class="section-number-4">7.32.2</span> tasks</h4>
<div class="outline-text-4" id="text-7-32-2">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file roles/install-sundtek/tasks/main.yml</span>
- <span class="org-variable-name">name</span>: apt | install yavdr-hardware-sundtek
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: yavdr-hardware-sundtek
<span class="org-comment-delimiter"># </span><span class="org-comment">TODO: include LD_PRELOAD in yavdr-hardware-sundtek!</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">- name: set LD_PRELOAD for sundtek driver to VDR's environment</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file:</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">src: files/sundtek_LD_PRELOAD.conf</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">dest: /etc/systemd/system/vdr.service.d/sundtek_LD_PRELOAD.conf</span>
- <span class="org-variable-name">name</span>: systemd | start sundtek.service
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: sundtek.service
<span class="org-variable-name">state</span>: started
<span class="org-variable-name">enabled</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">masked</span>: <span class="org-constant">no</span>
<span class="org-variable-name">daemon-reload</span>: <span class="org-constant">yes</span>
- <span class="org-variable-name">name</span>: detect local and remote sundtek devices
<span class="org-variable-name">command</span>: scansundtek
<span class="org-variable-name">register</span>: sundtek_scan
- <span class="org-variable-name">name</span>: set variable sundtek_scan
<span class="org-variable-name">set_fact</span>:
<span class="org-variable-name">sundtek_devices</span>: <span class="org-string">"{{ sundtek_scan.stdout | from_json }}"</span>
- <span class="org-variable-name">name</span>: create /etc/sundtek.conf
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/sundtek.conf.j2
<span class="org-variable-name">dest</span>: /etc/sundtek.conf
<span class="org-variable-name">notify</span>: Restart sundtek.service
- <span class="org-variable-name">name</span>: systemd | start sundtek-avahi-mounter.service
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: sundtek-avahi-mounter.service
<span class="org-variable-name">state</span>: started
<span class="org-variable-name">masked</span>: <span class="org-constant">no</span>
<span class="org-variable-name">enabled</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">daemon-reload</span>: <span class="org-constant">yes</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org4ad1076" class="outline-4">
<h4 id="org4ad1076"><span class="section-number-4">7.32.3</span> templates</h4>
<div class="outline-text-4" id="text-7-32-3">
<div class="org-src-container">
<pre class="src src-conf"><span class="org-comment-delimiter"># </span><span class="org-comment">----- GLOBAL SECTION -----</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">Set loglevel for logging to /var/log/mediasrv.log</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">autoupdate=[on|off] #enable automatic driver update, default off</span>
<span class="org-variable-name">autoupdate</span>=off
<span class="org-comment-delimiter">#</span><span class="org-comment">loglevel=[off|min|full] #default: off</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">max .. little bit more</span>
<span class="org-variable-name">loglevel</span>=off
<span class="org-comment-delimiter">#</span><span class="org-comment">pluginpath=/path/to/drivers #set path to drivers</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">dvb_api_version=x.y #default API version will be parsed from</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">/usr/include/linux/dvb/version.h, if no such file is</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">available the latest internally supported API version will be </span>
<span class="org-comment-delimiter">#</span><span class="org-comment">used (which will be quite new)</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">audio_skip_bytes=N #when changing analogTV channels, </span>
<span class="org-comment-delimiter">#</span><span class="org-comment">skip N bytes to suppress audio noise</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">bulk_notification[on|off] #default off, bulk_notification will only trigger device_attach once</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">after the the first device scan when the driver is started up</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">after this first scan, the notification will be triggered</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">normally again for each device.</span>
<span class="org-comment-delimiter">#</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">for example when 2 devices are attached to the system only one</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">notification will be triggered initially, any at a later time</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">attached device will generate another device_attach notification</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">by default each device will call the script which is set up with</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">device_attach</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">use_tvvideo=[on|off] #use /dev/tvvideoN instead of /dev/video</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">this works around a new Adobe Flash bug in 2012, where flash crashes</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">if files (/dev/videoN) other than /dev/video0 are available</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">use_hwpidfilter=[on|off] #For DVB-C, DVB-T, DVB-S/S2</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">enable PID filter, please be careful with that, there are only 15 HW Pid filters available</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">when more than 15 pids are set up the pid filter will be disabled automatically</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">dmhwpidfilter=[on|off] #default on, in some cases off might be useful to disable hw pid filter for settopboxes</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">if you get a black image when capturing a TV channel and watching another channel on the</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">same transponder - try this option and reboot</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">usb_transaction_delay=[0-20] #throttle the USB setup transactions, this can solve problems with weak USB stacks for</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">example for embedded boards, unit is milliseconds</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">usb_timeout=[0 - N] #USB timeout for each transaction in milliseconds, 0 default infinite</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">voltage_tone_off=[1 or 0] #0 .. default, normal behaviour</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">1 .. force DVB-S/S2 to not use any Voltage or Tone (ignore any user parameters)</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">ir_disabled=[1 or 0] #0 .. enable remote control polling, the driver will permanently check for remote control keys</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">1 .. disable remote control polling, might fix bugs with weak USB stacks on embedded boards</span>
<span class="org-comment-delimiter">#</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">Enable listening on network</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">enablenetwork=[on|off] #default: off</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">Lowest adapter number to start with, e.g. /dev/dvb/adapter5/frontend0</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">first_adapter=5</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">Call attach script when new device appears</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">device_attach=[PATH_TO_SCRIPT] [PARAMETER|DEVID] #"DEVID" will automatically be replaced with the device ID</span>
<span class="org-variable-name">device_attach</span>=/usr/bin/sundtek_attach
<span class="org-comment-delimiter">#</span><span class="org-comment">Call detach script when device disappears</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">device_detach=[PATH_TO_SCRIPT] [PARAMETER|DEVID] #"DEVID" will automatically be replaced with the device ID</span>
<span class="org-variable-name">device_detach</span>=/usr/bin/sundtek_detach
{% for device in sundtek_devices.local %}
{% if device.serial is defined %}
[<span class="org-type">{{ device.serial }}</span>]
<span class="org-comment-delimiter">#</span><span class="org-comment">Infrared protocol to use</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">ir_protocol=[RC5|NEC|RC6] #default: NEC</span>
{% if device.ir_protocol|default(<span class="org-string">""</span>) %}
<span class="org-variable-name">ir_protocol</span>={{ device.ir_protocol }}
{% endif %}
<span class="org-comment-delimiter">#</span><span class="org-comment">Keymap to use, e.g. "/lib/udev/rc_keymaps/vp702x"</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">rcmap=[PATH_TO_KEYMAP] #default: keymap which comes with the device</span>
{% if device.rcmap|default(<span class="org-string">""</span>) %}
<span class="org-variable-name">rcmap</span>={{ device.rcmap }}
{% endif %}
<span class="org-comment-delimiter">#</span><span class="org-comment">Choose initial DVB mode for hybrid DVB-T/DVB-C devices only</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">initial_dvb_mode=[DVBC|DVBT]</span>
{% if device.initial_dvb_mode|default(<span class="org-string">""</span>) %}
<span class="org-variable-name">initial_dvb_mode</span>={{ device.dvb_mode }}
{% endif %}
<span class="org-comment-delimiter">#</span><span class="org-comment">Call attach script when new device appears</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">device_attach=[PATH_TO_SCRIPT] [PARAMETER|DEVID] #"DEVID" will automatically be replaced with the device ID</span>
<span class="org-variable-name">device_attach</span>=/usr/bin/sundtek_attach
<span class="org-comment-delimiter">#</span><span class="org-comment">Call detach script when device disappears</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">device_detach=[PATH_TO_SCRIPT] [PARAMETER|DEVID] #"DEVID" will automatically be replaced with the device ID</span>
<span class="org-variable-name">device_detach</span>=/usr/bin/sundtek_detach
{% if device.capabilites.analog_tv %}
<span class="org-variable-name">disable_analogtv</span>=1 <span class="org-comment-delimiter">#</span><span class="org-comment">disable initialization of analogTV Frontend</span>
{% endif %}
{% endif %}
{% endfor %}
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org12f1432" class="outline-3">
<h3 id="org12f1432"><span class="section-number-3">7.33</span> template-test</h3>
<div class="outline-text-3" id="text-7-33">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
- <span class="org-variable-name">name</span>: show vars
<span class="org-variable-name">debug</span>:
<span class="org-variable-name">var</span>: <span class="org-string">'{{ system }}'</span>
- <span class="org-variable-name">name</span>: test templates
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/test.j2
<span class="org-variable-name">dest</span>: /tmp/test.txt
</pre>
</div>
<div class="org-src-container">
<pre class="src src-shell">{{ ansible_managed | comment }}
Section <span class="org-string">"ServerLayout"</span>
Identifier <span class="org-string">"Layout0"</span>
Screen 0 <span class="org-string">"Screen0"</span>
{% if system.x11.dualhead.enabled %}
Screen 1 <span class="org-string">"Screen1"</span> RightOf <span class="org-string">"Screen0"</span>
{% endif %}
InputDevice <span class="org-string">"Keyboard0"</span> <span class="org-string">"CoreKeyboard"</span>
InputDevice <span class="org-string">"Mouse0"</span> <span class="org-string">"CorePointer"</span>
EndSection
Section <span class="org-string">"InputDevice"</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">generated from default</span>
Identifier <span class="org-string">"Mouse0"</span>
Driver <span class="org-string">"mouse"</span>
Option <span class="org-string">"Protocol"</span> <span class="org-string">"auto"</span>
Option <span class="org-string">"Device"</span> <span class="org-string">"/dev/psaux"</span>
Option <span class="org-string">"Emulate3Buttons"</span> <span class="org-string">"no"</span>
Option <span class="org-string">"ZAxisMapping"</span> <span class="org-string">"4 5"</span>
EndSection
<span class="org-comment-delimiter"># </span><span class="org-comment">ignore devices with eventlircd tag </span>
<span class="org-comment-delimiter"># </span><span class="org-comment">ENV{ID_INPUT.tags}+="eventlircd"</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">must be set by an udev rule</span>
Section <span class="org-string">"InputClass"</span>
Identifier <span class="org-string">"ignore eventlircd devices"</span>
MatchTag <span class="org-string">"eventlircd"</span>
Option <span class="org-string">"Ignore"</span> <span class="org-string">"True"</span>
EndSection
Section <span class="org-string">"InputDevice"</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">generated from default</span>
Identifier <span class="org-string">"Keyboard0"</span>
Driver <span class="org-string">"kbd"</span>
EndSection
Section <span class="org-string">"Monitor"</span>
Identifier <span class="org-string">"Monitor0"</span>
VendorName <span class="org-string">"Unknown"</span>
ModelName <span class="org-string">"Unknown"</span>
{% if system.x11.display.0.default == <span class="org-string">"VGA2Scart_4_3"</span> or system.x11.display.0.default == <span class="org-string">"VGA2Scart_16_9"</span> %}
HorizSync 14-17
VertRefresh 49-61
{% if system.x11.display.0.default == <span class="org-string">"VGA2Scart_4_3"</span> %}
Modeline <span class="org-string">"VGA2Scart_4_3"</span> 13.875 720 744 808 888 576 580 585 625 -HSync -Vsync interlace
{% elif system.x11.display.0.default == <span class="org-string">"VGA2Scart_16_9"</span> %}
Modeline <span class="org-string">"VGA2Scart_16_9"</span> 19 1024 1032 1120 1216 576 581 586 625 -Hsync -Vsync interlace
{% endif %}
{% endif %}
Option <span class="org-string">"DPMS"</span>
Option <span class="org-string">"ExactModeTimingsDVI"</span> <span class="org-string">"True"</span>
EndSection
{% if system.x11.dualhead.enabled == <span class="org-string">"1"</span> %}
Section <span class="org-string">"Monitor"</span>
Identifier <span class="org-string">"Monitor1"</span>
VendorName <span class="org-string">"Unknown"</span>
ModelName <span class="org-string">"Unknown"</span>
{% if system.x11.display.1.default<span class="org-keyword"> in</span> (<span class="org-string">"VGA2Scart_4_3"</span>, <span class="org-string">"VGA2Scart_16_9"</span>) %}
HorizSync 14-17
VertRefresh 49-61
{% if system.x11.display.1.default == <span class="org-string">"VGA2Scart_4_3"</span> %}
Modeline <span class="org-string">"VGA2Scart_4_3"</span> 13.875 720 744 808 888 576 580 585 625 -HSync -Vsync interlace
{% elif system.x11.display.1.default == <span class="org-string">"VGA2Scart_16_9"</span> %}
Modeline <span class="org-string">"VGA2Scart_16_9"</span> 19 1024 1032 1120 1216 576 581 586 625 -Hsync -Vsync interlace
{% endif %}
Option <span class="org-string">"DPMS"</span>
Option <span class="org-string">"ExactModeTimingsDVI"</span> <span class="org-string">"True"</span>
{% endif %}
EndSection
{% endif %}
Section <span class="org-string">"Device"</span>
Identifier <span class="org-string">"Device0"</span>
{% if system.hardware.nvidia.detected %}
Driver <span class="org-string">"nvidia"</span>
VendorName <span class="org-string">"NVIDIA Corporation"</span>
{% endif %}
Screen 0
Option <span class="org-string">"DPI"</span> <span class="org-string">"100x100"</span>
{% if system.hardware.nvidia.busid %}
BusID <span class="org-string">"PCI: {{ system.hardware.nvidia.busid }}"</span>
{% endif %}
Option <span class="org-string">"NoLogo"</span> <span class="org-string">"True"</span>
Option <span class="org-string">"UseEvents"</span> <span class="org-string">"True"</span>
Option <span class="org-string">"TripleBuffer"</span> <span class="org-string">"False"</span>
Option <span class="org-string">"AddARGBGLXVisuals"</span> <span class="org-string">"True"</span>
Option <span class="org-string">"TwinView"</span> <span class="org-string">"0"</span>
Option <span class="org-string">"DynamicTwinView"</span> <span class="org-string">"0"</span>
Option <span class="org-string">"OnDemandVBlankinterrupts"</span> <span class="org-string">"on"</span>
Option <span class="org-string">"FlatPanelProperties"</span> <span class="org-string">"Scaling = Native"</span>
EndSection
{% if system.x11.dualhead.enabled == <span class="org-string">"1"</span> %}
Section <span class="org-string">"Device"</span>
Identifier <span class="org-string">"Device1"</span>
{% if system.hardware.nvidia.detected %}
Driver <span class="org-string">"nvidia"</span>
VendorName <span class="org-string">"NVIDIA Corporation"</span>
{% endif %}
Screen 1
{% if system.hardware.nvidia.busid %}
BusID <span class="org-string">"PCI: {{ system.hardware.nvidia.busid }}"</span>
{% endif %}
Option <span class="org-string">"NoLogo"</span> <span class="org-string">"True"</span>
Option <span class="org-string">"UseEvents"</span> <span class="org-string">"True"</span>
Option <span class="org-string">"TripleBuffer"</span> <span class="org-string">"False"</span>
Option <span class="org-string">"AddARGBGLXVisuals"</span> <span class="org-string">"True"</span>
Option <span class="org-string">"TwinView"</span> <span class="org-string">"0"</span>
Option <span class="org-string">"DynamicTwinView"</span> <span class="org-string">"0"</span>
EndSection
{% endif %}
Section <span class="org-string">"Screen"</span>
Identifier <span class="org-string">"Screen0"</span>
Device <span class="org-string">"Device0"</span>
Monitor <span class="org-string">"Monitor0"</span>
DefaultDepth 24
SubSection <span class="org-string">"Display"</span>
Depth 24
{% if system.x11.display.0.default is defined and system.x11.display.0.default %}
Modes <span class="org-string">"{{ system.x11.display.0.default }}"</span>{% for mode<span class="org-keyword"> in</span> system.x11.display.0.mode %}{% if mode != system.x11.display.0.default %} <span class="org-string">"{{ mode }}"</span>{% endif %}{% endfor %}
{% elif system.hardware.nvidia.detected == 1 %}
Modes <span class="org-string">"nvidia-auto-select"</span>
{% endif %}
EndSubSection
{% if system.x11.display.0.default or system.x11.default %}
{% if system.x11.display.0.device is definded and system.x11.display.0.device %}
Option <span class="org-string">"ConnectedMonitor"</span> {{ system.x11.display.0.device }}
{% else %}
Option <span class="org-string">"ConnectedMonitor"</span> {{ system.x11.default }}
{% endif %}
<span class="org-comment-delimiter"># </span><span class="org-comment">Option "ConnectedMonitor" "&lt;?cs if:(?system.x11.display.0.device) ?&gt;&lt;?cs call:fix_display_name(system.x11.display.0.device) ?&gt;&lt;?cs else ?&gt;&lt;?cs var:system.x11.default ?&gt;&lt;?cs /if ?&gt;&lt;?cs if:(?system.x11.dualhead.enabled &amp;&amp; system.x11.dualhead.enabled == 1) ?&gt;, &lt;?cs call:fix_display_name(system.x11.display.1.device) ?&gt;&lt;?cs /if ?&gt;"</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">Option "ConnectedMonitor"</span>
<span class="org-string">"&lt;?cs if:(?system.x11.display.0.device) ?&gt;</span>
<span class="org-string"> &lt;?cs call:fix_display_name(system.x11.display.0.device) ?&gt;</span>
<span class="org-string"> &lt;?cs else ?&gt;</span>
<span class="org-string"> &lt;?cs var:system.x11.default ?&gt;</span>
<span class="org-string"> &lt;?cs /if ?&gt;</span>
<span class="org-string"> &lt;?cs if:(?system.x11.dualhead.enabled &amp;&amp; system.x11.dualhead.enabled == 1) ?&gt;, &lt;?cs call:fix_display_name(system.x11.display.1.device) ?&gt;&lt;?cs /if ?&gt;"</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Option "UseDisplayDevice" "&lt;?cs if:(?system.x11.display.0.device) ?&gt;&lt;?cs call:fix_display_name(system.x11.display.0.device) ?&gt;&lt;?cs else ?&gt;&lt;?cs var:system.x11.default ?&gt;&lt;?cs /if ?&gt;"</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">&lt;?cs /if ?&gt;</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">&lt;?cs if:(?system.hardware.nvidia.0.edid &amp;&amp; system.hardware.nvidia.0.edid == "1") ?&gt;</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Option "CustomEDID" "&lt;?cs call:fix_display_name(system.x11.display.0.device) ?&gt;:/etc/X11/edid.0.yavdr"</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">&lt;?cs /if ?&gt;</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">&lt;?cs if:(system.hardware.nvidia.detected == 1 &amp;&amp; ?system.x11.display.0.device) ?&gt;</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Option "MetaModes" "&lt;?cs call:fix_display_name(system.x11.display.0.device) ?&gt;: &lt;?cs var:system.x11.display.0.default ?&gt; { ViewPortIn=&lt;?cs var:system.x11.display.0.viewport.in.x ?&gt;x&lt;?cs var:system.x11.display.0.viewport.in.y ?&gt;, ViewPortOut=&lt;?cs var:system.x11.display.0.viewport.out.x ?&gt;x&lt;?cs var:system.x11.display.0.viewport.out.y ?&gt;+&lt;?cs var:system.x11.display.0.viewport.out.plusx ?&gt;+&lt;?cs var:system.x11.display.0.viewport.out.plusy ?&gt; }"</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">&lt;?cs each:mode = system.x11.display.0.mode ?&gt;&lt;?cs if:(mode != system.x11.display.0.default) ?&gt;</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Option "MetaModes" "&lt;?cs call:fix_display_name(system.x11.display.0.device) ?&gt;: &lt;?cs var:mode ?&gt; { ViewPortIn=&lt;?cs var:system.x11.display.0.viewport.in.x ?&gt;x&lt;?cs var:system.x11.display.0.viewport.in.y ?&gt;, ViewPortOut=&lt;?cs var:system.x11.display.0.viewport.out.x ?&gt;x&lt;?cs var:system.x11.display.0.viewport.out.y ?&gt;+&lt;?cs var:system.x11.display.0.viewport.out.plusx ?&gt;+&lt;?cs var:system.x11.display.0.viewport.out.plusy ?&gt; }"&lt;?cs /if ?&gt;&lt;?cs /each ?&gt; </span>
{% endif %}
EndSection
{% if system.x11.dualhead.enabled == <span class="org-string">"1"</span> %}
Section <span class="org-string">"Screen"</span>
Identifier <span class="org-string">"Screen1"</span>
Device <span class="org-string">"Device1"</span>
Monitor <span class="org-string">"Monitor1"</span>
DefaultDepth 24
SubSection <span class="org-string">"Display"</span>
Depth 24
{% if system.x11.display.0.default is defined and system.x11.display.0.default %}
Modes <span class="org-string">"{{ system.x11.display.1.default }}"</span>{% for mode<span class="org-keyword"> in</span> system.x11.display.1.mode %}{% if mode != system.x11.display.1.default %} <span class="org-string">"{{ mode }}"</span>{% endif %}{% endfor %}
{% elif system.hardware.nvidia.detected == <span class="org-string">"1"</span> %}
Modes <span class="org-string">"nvidia-auto-select"</span>
{% endif %}
EndSubSection
<span class="org-comment-delimiter"># </span><span class="org-comment">&lt;?cs if:(?system.x11.display.1.default &amp;&amp; system.x11.display.1.default != "" &amp;&amp; system.x11.display.1.default != "disabled") ?&gt;</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Option "UseDisplayDevice" "&lt;?cs call:fix_display_name(system.x11.display.1.device) ?&gt;"</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">&lt;?cs /if ?&gt;</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">&lt;?cs if:(?system.hardware.nvidia.1.edid &amp;&amp; system.hardware.nvidia.1.edid == "1") ?&gt;</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Option "CustomEDID" "&lt;?cs call:fix_display_name(system.x11.display.1.device) ?&gt;:/etc/X11/edid.1.yavdr"</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">&lt;?cs /if ?&gt;</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">&lt;?cs if:(system.hardware.nvidia.detected == 1 &amp;&amp; ?system.x11.display.1.device) ?&gt;</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Option "MetaModes" "&lt;?cs call:fix_display_name(system.x11.display.1.device) ?&gt;: &lt;?cs var:system.x11.display.1.default ?&gt; { ViewPortIn=&lt;?cs var:system.x11.display.1.viewport.in.x ?&gt;x&lt;?cs var:system.x11.display.1.viewport.in.y ?&gt;, ViewPortOut=&lt;?cs var:system.x11.display.1.viewport.out.x ?&gt;x&lt;?cs var:system.x11.display.1.viewport.out.y ?&gt;+&lt;?cs var:system.x11.display.1.viewport.out.plusx ?&gt;+&lt;?cs var:system.x11.display.1.viewport.out.plusy ?&gt; }"</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">&lt;?cs each:mode = system.x11.display.1.mode ?&gt;&lt;?cs if:(mode != system.x11.display.1.default) ?&gt;</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Option "MetaModes" "&lt;?cs call:fix_display_name(system.x11.display.1.device) ?&gt;: &lt;?cs var:mode ?&gt; { ViewPortIn=&lt;?cs var:system.x11.display.1.viewport.in.x ?&gt;x&lt;?cs var:system.x11.display.1.viewport.in.y ?&gt;, ViewPortOut=&lt;?cs var:system.x11.display.1.viewport.out.x ?&gt;x&lt;?cs var:system.x11.display.1.viewport.out.y ?&gt;+&lt;?cs var:system.x11.display.1.viewport.out.plusx ?&gt;+&lt;?cs var:system.x11.display.1.viewport.out.plusy ?&gt; }"&lt;?cs /if ?&gt;&lt;?cs /each ?&gt;</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">&lt;?cs /if ?&gt;</span>
EndSection
{% endif %}
{% if not system.x11.use_compositing %}
Section <span class="org-string">"Extensions"</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">if not open-gl OSD is needed (e.g. for vdr-sxfe):</span>
Option <span class="org-string">"Composite"</span> <span class="org-string">"Disable"</span>
EndSection
{% endif %}
</pre>
</div>
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-variable-name">foo</span>:
- bar
- baz
- spam
<span class="org-variable-name">system</span>:
<span class="org-variable-name">hardware</span>:
<span class="org-variable-name">nvidia</span>:
<span class="org-variable-name">detected</span>: <span class="org-string">"1"</span>
<span class="org-variable-name">busid</span>: <span class="org-string">"000:2304:234"</span>
<span class="org-variable-name">x11</span>:
<span class="org-variable-name">dualhead</span>:
<span class="org-variable-name">enabled</span>: <span class="org-string">"0"</span>
<span class="org-variable-name">display</span>:
<span class="org-variable-name">0</span>:
<span class="org-variable-name">mode</span>:
- <span class="org-string">"1920x1080_50"</span>
<span class="org-variable-name">default</span>: <span class="org-string">"nvidia-auto"</span>
<span class="org-variable-name">1</span>:
<span class="org-variable-name">mode</span>:
- <span class="org-string">"1280x720_60"</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org9e2ffa8" class="outline-3">
<h3 id="org9e2ffa8"><span class="section-number-3">7.34</span> wakeup</h3>
<div class="outline-text-3" id="text-7-34">
</div>
<div id="outline-container-org2ecd6ef" class="outline-4">
<h4 id="org2ecd6ef"><span class="section-number-4">7.34.1</span> defaults</h4>
<div class="outline-text-4" id="text-7-34-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file roles/wakeup/defaults/main.yml</span>
<span class="org-variable-name">wakeup_method</span>: <span class="org-string">"acpiwakeup"</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org0dcbbad" class="outline-4">
<h4 id="org0dcbbad"><span class="section-number-4">7.34.2</span> tasks</h4>
<div class="outline-text-4" id="text-7-34-2">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">file roles/wakeup/tasks/main.yml</span>
- <span class="org-variable-name">name</span>: install and configure vdr-addon-acpiwakeup
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: vdr-addon-acpiwakeup
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">when</span>: wakeup_method == <span class="org-string">"acpiwakeup"</span>
- <span class="org-variable-name">name</span>: expand template for /etc/vdr/vdr-addon-acpiwakeup.conf
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/vdr-addon-acpiwakeup.conf.j2
<span class="org-variable-name">dest</span>: /etc/vdr/vdr-addon-acpiwakeup.conf
</pre>
</div>
</div>
</div>
<div id="outline-container-org1572d7a" class="outline-4">
<h4 id="org1572d7a"><span class="section-number-4">7.34.3</span> templates</h4>
<div class="outline-text-4" id="text-7-34-3">
<div class="org-src-container">
<pre class="src src-jinja2">{{ ansible_managed | comment }}
# Activate/deactivate ACPIWakeup with yes/no:
ACPI_ENABLED="{% if wakeup_method == 'acpiwakeup' %}yes{% else %}no{% endif %}"
# How many minutes should the machine wake up before the timer starts:
ACPI_START_AHEAD=5
# If you want your VDR machine to wakeup in regular intervals (i.e. for
# updating EPG data), specify the days of the week and the wakeup time.
#
# Days of the week for regular wakeup (not set=Disabled, 1=Monday...7=Sunday)
# ACPI_REGULAR_DAYS="1 2 3 4 5 6 7"
# Wakeup time
#ACPI_REGULAR_TIME=01:00 # HH:MM
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org8e11808" class="outline-3">
<h3 id="org8e11808"><span class="section-number-3">7.35</span> grub-config</h3>
<div class="outline-text-3" id="text-7-35">
</div>
<div id="outline-container-org8381a74" class="outline-4">
<h4 id="org8381a74"><span class="section-number-4">7.35.1</span> default variables</h4>
<div class="outline-text-4" id="text-7-35-1">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-variable-name">system</span>:
<span class="org-variable-name">shutdown</span>: poweroff
<span class="org-variable-name">grub</span>:
<span class="org-variable-name">timeout</span>: 0
<span class="org-variable-name">boot_options</span>: quiet nosplash
</pre>
</div>
</div>
</div>
<div id="outline-container-orgc0702e2" class="outline-4">
<h4 id="orgc0702e2"><span class="section-number-4">7.35.2</span> tasks</h4>
<div class="outline-text-4" id="text-7-35-2">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
- <span class="org-variable-name">name</span>: custom grub configuration for timeout and reboot halt
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/50_custom.j2
<span class="org-variable-name">dest</span>: /etc/grub.d/50_custom
<span class="org-variable-name">mode</span>: <span class="org-string">'0775'</span>
<span class="org-variable-name">notify</span>: [ <span class="org-string">'Update GRUB'</span> ]
<span class="org-comment-delimiter"># </span><span class="org-comment">TODO: add special case if plymouth is used</span>
- <span class="org-variable-name">name</span>: let the system boot quietly
<span class="org-variable-name">lineinfile</span>:
<span class="org-variable-name">dest</span>: /etc/default/grub
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">regexp</span>: <span class="org-string">'^(GRUB_CMDLINE_LINUX_DEFAULT=")'</span>
<span class="org-variable-name">line</span>: <span class="org-string">'\1{{ grub.boot_options}}"'</span>
<span class="org-variable-name">backrefs</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">notify</span>: [ <span class="org-string">'Update GRUB'</span> ]
</pre>
</div>
</div>
</div>
<div id="outline-container-orgb6eeaf8" class="outline-4">
<h4 id="orgb6eeaf8"><span class="section-number-4">7.35.3</span> templates</h4>
<div class="outline-text-4" id="text-7-35-3">
<div class="org-src-container">
<pre class="src src-shell"><span class="org-comment-delimiter">#</span><span class="org-comment">!/bin/</span><span class="org-keyword">sh</span>
<span class="org-keyword">exec</span> tail -n +3 $<span class="org-variable-name">0</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">This file is configured by the ansible configuration for yaVDR</span>
{% if system.shutdown is defined and system.shutdown == <span class="org-string">'reboot'</span> %}
menuentry <span class="org-string">"PowerOff"</span> {
halt
}
{% endif %}
<span class="org-keyword">if</span> [ <span class="org-string">"${recordfail}"</span> = 1 ]; <span class="org-keyword">then</span>
<span class="org-builtin">set</span> <span class="org-variable-name">timeout</span>={{ 3 if grub.timeout &lt; 3 else grub.timeout }}
<span class="org-keyword">else</span>
<span class="org-builtin">set</span> <span class="org-variable-name">timeout</span>={{ grub.timeout if grub.timeout is defined else 0 }}
<span class="org-keyword">fi</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orgb0d3898" class="outline-4">
<h4 id="orgb0d3898"><span class="section-number-4">7.35.4</span> handlers</h4>
<div class="outline-text-4" id="text-7-35-4">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
- <span class="org-variable-name">name</span>: Update GRUB
<span class="org-variable-name">command</span>: update-grub
<span class="org-variable-name">failed_when</span>: (<span class="org-string">'error'</span> in grub_register_update.stderr)
<span class="org-variable-name">register</span>: grub_register_update
<span class="org-comment-delimiter"># </span><span class="org-comment">TODO: Do we need to use grub-set-default?</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">https://github.com/yavdr/yavdr-utils/blob/master/events/actions/update-grub</span>
</pre>
</div>
</div>
</div>
</div>
</div>
<div id="outline-container-org1be3934" class="outline-2">
<h2 id="org1be3934"><span class="section-number-2">8</span> Modules</h2>
<div class="outline-text-2" id="text-8">
<p>
This section contains custom modules for the yaVDR Playbooks. They are used to collect facts about the system and configure applications and daemons.
</p>
</div>
<div id="outline-container-orgeb30525" class="outline-3">
<h3 id="orgeb30525"><span class="section-number-3">8.1</span> hardware_facts.py</h3>
<div class="outline-text-3" id="text-8-1">
<div class="org-src-container">
<pre class="src src-python"><span class="org-comment-delimiter"># </span><span class="org-comment">This Module collects the vendor- and device ids for USB- and PCI(e)-devices and currently loaded kernel modules.</span>
<span class="org-variable-name">DOCUMENTATION</span> = <span class="org-string">'''</span>
<span class="org-string"> ---</span>
<span class="org-string"> module: hardware_facts</span>
<span class="org-string"> short_description: collects facts for kernel modules, usb and pci devices</span>
<span class="org-string"> description:</span>
<span class="org-string"> - This Module collects the vendor- and device ids for USB- and PCI(e)-devices and</span>
<span class="org-string"> currently loaded kernel modules.</span>
<span class="org-string"> options:</span>
<span class="org-string"> usb:</span>
<span class="org-string"> required: False</span>
<span class="org-string"> default: True</span>
<span class="org-string"> description:</span>
<span class="org-string"> - return a list of vendor- and device ids for usb devices in '04x:04x' notation</span>
<span class="org-string"> pci:</span>
<span class="org-string"> required: False</span>
<span class="org-string"> default: True</span>
<span class="org-string"> description:</span>
<span class="org-string"> - return a list of vendor- and device ids for pci devices in '04x:04x' notation</span>
<span class="org-string"> modules:</span>
<span class="org-string"> required: False</span>
<span class="org-string"> default: True</span>
<span class="org-string"> description:</span>
<span class="org-string"> - return a list of currently loaded kernel modules</span>
<span class="org-string"> gpus:</span>
<span class="org-string"> required: False</span>
<span class="org-string"> default: True</span>
<span class="org-string"> description:</span>
<span class="org-string"> - return a list of devices of the pci gpu class (0x030000)</span>
<span class="org-string"> acpi_power_modes:</span>
<span class="org-string"> required: False</span>
<span class="org-string"> default: True</span>
<span class="org-string"> description:</span>
<span class="org-string"> - return a list of supported acpi power saving modes</span>
<span class="org-string">notes:</span>
<span class="org-string"> - requres python-pyusb and python-kmodpy</span>
<span class="org-string">requirements: [ ]</span>
<span class="org-string">author: "Alexander Grothe <a href="mailto:seahawk1986%40gmx.de">&lt;seahawk1986@gmx.de&gt;</a>"</span>
<span class="org-string">'''</span>
<span class="org-variable-name">EXAMPLES</span> = <span class="org-string">'''</span>
<span class="org-string">- name: get information about usb and pci hardware and loaded kernel modules</span>
<span class="org-string"> hardware_facts:</span>
<span class="org-string"> usb: True</span>
<span class="org-string"> pci: True</span>
<span class="org-string"> modules: True</span>
<span class="org-string"> acpi_power_modes: True</span>
<span class="org-string">- debug:</span>
<span class="org-string"> var: usb</span>
<span class="org-string">- debug:</span>
<span class="org-string"> var: pci</span>
<span class="org-string">- debug:</span>
<span class="org-string"> var: modules</span>
<span class="org-string">- debug:</span>
<span class="org-string"> var: gpus</span>
<span class="org-string">'''</span>
<span class="org-keyword">import</span> glob
<span class="org-keyword">import</span> json
<span class="org-keyword">import</span> os
<span class="org-keyword">import</span> sys
<span class="org-keyword">import</span> usb.core
<span class="org-keyword">from</span> collections <span class="org-keyword">import</span> namedtuple
<span class="org-keyword">from</span> itertools <span class="org-keyword">import</span> chain
<span class="org-keyword">import</span> kmodpy
<span class="org-keyword">from</span> ansible.module_utils.basic <span class="org-keyword">import</span> *
<span class="org-variable-name">PCIDevice</span> = namedtuple(<span class="org-string">"PCIDevice"</span>, <span class="org-string">'idVendor idProduct idClass pciPath'</span>)
<span class="org-variable-name">vendor_dict</span> = {
0x10de: <span class="org-string">'nvidia'</span>,
0x8086: <span class="org-string">'intel'</span>,
0x1002: <span class="org-string">'amd'</span>,
0x80ee: <span class="org-string">'virtualbox'</span>,
}
<span class="org-keyword">def</span> <span class="org-function-name">get_pci_devices</span>():
<span class="org-keyword">for</span> device <span class="org-keyword">in</span> chain(glob.glob(<span class="org-string">'/sys/devices/pci*/*:*:*/'</span>), glob.glob(<span class="org-string">'/sys/devices/pci*/*:*:*/*:*:*/'</span>)):
<span class="org-keyword">try</span>:
<span class="org-keyword">with</span> <span class="org-builtin">open</span>(os.path.join(device, <span class="org-string">'device'</span>)) <span class="org-keyword">as</span> d:
<span class="org-variable-name">product_id</span> = <span class="org-builtin">int</span>(d.read().strip(), 16)
<span class="org-keyword">with</span> <span class="org-builtin">open</span>(os.path.join(device, <span class="org-string">'vendor'</span>)) <span class="org-keyword">as</span> d:
<span class="org-variable-name">vendor_id</span> = <span class="org-builtin">int</span>(d.read().strip(), 16)
<span class="org-keyword">with</span> <span class="org-builtin">open</span>(os.path.join(device, <span class="org-string">'class'</span>)) <span class="org-keyword">as</span> d:
<span class="org-variable-name">class_id</span> = <span class="org-builtin">int</span>(d.read().strip(), 16)
<span class="org-keyword">yield</span> PCIDevice(idVendor=vendor_id, idProduct=product_id, idClass=class_id, pciPath=device)
<span class="org-keyword">except</span> <span class="org-type">IOError</span>:
<span class="org-keyword">pass</span>
<span class="org-keyword">def</span> <span class="org-function-name">format_device_list</span>(iterator):
<span class="org-keyword">return</span> [<span class="org-string">"{:04x}:{:04x}"</span>.<span class="org-builtin">format</span>(d.idVendor, d.idProduct) <span class="org-keyword">for</span> d <span class="org-keyword">in</span> iterator]
<span class="org-keyword">def</span> <span class="org-function-name">format_gpu_device_list</span>(iterator):
<span class="org-keyword">def</span> <span class="org-function-name">get_entries</span>(iterator):
<span class="org-keyword">for</span> d <span class="org-keyword">in</span> iterator:
<span class="org-keyword">if</span> d.idClass == 0x030000:
<span class="org-keyword">yield</span> {<span class="org-string">"VendorName"</span>: vendor_dict.get(d.idVendor, <span class="org-string">"unknown"</span>),
<span class="org-string">"VendorID"</span>: d.idVendor, <span class="org-string">"ProductID"</span>: d.idProduct}
<span class="org-keyword">return</span> [entry <span class="org-keyword">for</span> entry <span class="org-keyword">in</span> get_entries(iterator)]
<span class="org-keyword">def</span> <span class="org-function-name">list_acpi_power_modes</span>():
<span class="org-variable-name">acpi_power_modes</span> = []
<span class="org-keyword">try</span>:
<span class="org-keyword">with</span> <span class="org-builtin">open</span>(<span class="org-string">'/sys/power/state'</span>) <span class="org-keyword">as</span> f:
<span class="org-variable-name">acpi_power_modes</span> = [l <span class="org-keyword">for</span> l <span class="org-keyword">in</span> f.readline().split()]
<span class="org-keyword">except</span> <span class="org-type">IOError</span>:
<span class="org-keyword">pass</span>
<span class="org-keyword">return</span> acpi_power_modes
<span class="org-variable-name">arg_specs</span> = {
<span class="org-string">'usb'</span>: <span class="org-builtin">dict</span>(default=<span class="org-constant">True</span>, <span class="org-builtin">type</span>=<span class="org-string">'bool'</span>, required=<span class="org-constant">False</span>),
<span class="org-string">'pci'</span>: <span class="org-builtin">dict</span>(default=<span class="org-constant">True</span>, <span class="org-builtin">type</span>=<span class="org-string">'bool'</span>, required=<span class="org-constant">False</span>),
<span class="org-string">'modules'</span>: <span class="org-builtin">dict</span>(default=<span class="org-constant">True</span>, <span class="org-builtin">type</span>=<span class="org-string">'bool'</span>, required=<span class="org-constant">False</span>),
<span class="org-string">'gpus'</span>: <span class="org-builtin">dict</span>(default=<span class="org-constant">True</span>, <span class="org-builtin">type</span>=<span class="org-string">'bool'</span>, required=<span class="org-constant">False</span>),
<span class="org-string">'acpi_power_modes'</span>: <span class="org-builtin">dict</span>(default=<span class="org-constant">True</span>, <span class="org-builtin">type</span>=<span class="org-string">'bool'</span>, required=<span class="org-constant">False</span>),
}
<span class="org-keyword">def</span> <span class="org-function-name">main</span>():
<span class="org-variable-name">module</span> = AnsibleModule(argument_spec=arg_specs, supports_check_mode=<span class="org-constant">True</span>,)
<span class="org-variable-name">collect_usb</span> = module.params[<span class="org-string">'usb'</span>]
<span class="org-variable-name">collect_pci</span> = module.params[<span class="org-string">'pci'</span>]
<span class="org-variable-name">collect_modules</span> = module.params[<span class="org-string">'modules'</span>]
<span class="org-variable-name">collect_gpus</span> = module.params[<span class="org-string">'gpus'</span>]
<span class="org-variable-name">collect_acpi_power_modes</span> = module.params[<span class="org-string">'acpi_power_modes'</span>]
<span class="org-variable-name">usb_devices</span> = []
<span class="org-variable-name">pci_devices</span> = []
<span class="org-variable-name">modules</span> = []
<span class="org-variable-name">gpus</span> = []
<span class="org-variable-name">nvidia_detected</span> = <span class="org-constant">False</span>
<span class="org-variable-name">intel_detected</span> = <span class="org-constant">False</span>
<span class="org-variable-name">amd_detected</span> = <span class="org-constant">False</span>
<span class="org-variable-name">virtualbox_detected</span> = <span class="org-constant">False</span>
<span class="org-variable-name">acpi_power_modes</span> = []
<span class="org-keyword">if</span> collect_usb:
<span class="org-variable-name">usb_devices</span> = format_device_list(usb.core.find(find_all=<span class="org-constant">True</span>))
<span class="org-keyword">if</span> collect_pci:
<span class="org-variable-name">pci_devices</span> = format_device_list(get_pci_devices())
<span class="org-keyword">if</span> collect_modules:
<span class="org-variable-name">k</span> = kmodpy.Kmod()
<span class="org-variable-name">modules</span> = [m[0] <span class="org-keyword">for</span> m <span class="org-keyword">in</span> k.loaded()]
<span class="org-keyword">if</span> collect_gpus:
<span class="org-variable-name">gpus</span> = format_gpu_device_list(get_pci_devices())
<span class="org-variable-name">nvidia_detected</span> = <span class="org-builtin">any</span>((<span class="org-constant">True</span> <span class="org-keyword">for</span> gpu <span class="org-keyword">in</span> gpus <span class="org-keyword">if</span> gpu[<span class="org-string">'VendorName'</span>] == <span class="org-string">'nvidia'</span>))
<span class="org-variable-name">intel_detected</span> = <span class="org-builtin">any</span>((<span class="org-constant">True</span> <span class="org-keyword">for</span> gpu <span class="org-keyword">in</span> gpus <span class="org-keyword">if</span> gpu[<span class="org-string">'VendorName'</span>] == <span class="org-string">'intel'</span>))
<span class="org-variable-name">amd_detected</span> = <span class="org-builtin">any</span>((<span class="org-constant">True</span> <span class="org-keyword">for</span> gpu <span class="org-keyword">in</span> gpus <span class="org-keyword">if</span> gpu[<span class="org-string">'VendorName'</span>] == <span class="org-string">'amd'</span>))
<span class="org-variable-name">virtualbox_detected</span> = <span class="org-builtin">any</span>((<span class="org-constant">True</span> <span class="org-keyword">for</span> gpu <span class="org-keyword">in</span> gpus <span class="org-keyword">if</span> gpu[<span class="org-string">'VendorName'</span>] == <span class="org-string">'virtualbox'</span>))
<span class="org-keyword">if</span> collect_acpi_power_modes:
<span class="org-variable-name">acpi_power_modes</span> = list_acpi_power_modes()
<span class="org-variable-name">data</span> = {<span class="org-string">'usb'</span>: usb_devices, <span class="org-string">'pci'</span>: pci_devices, <span class="org-string">'modules'</span>: modules, <span class="org-string">'gpus'</span>: gpus,
<span class="org-string">'acpi_power_modes'</span>: acpi_power_modes, <span class="org-string">'nvidia_detected'</span>: nvidia_detected,
<span class="org-string">'intel_detected'</span>: intel_detected, <span class="org-string">'amd_detected'</span>: amd_detected,
<span class="org-string">'virtualbox_detected'</span>: virtualbox_detected}
module.exit_json(changed=<span class="org-constant">False</span>, ansible_facts=data, msg=data)
<span class="org-keyword">if</span> <span class="org-builtin">__name__</span> == <span class="org-string">'__main__'</span>:
main()
</pre>
</div>
</div>
</div>
<div id="outline-container-org5b778e8" class="outline-3">
<h3 id="org5b778e8"><span class="section-number-3">8.2</span> satip_facts.py</h3>
<div class="outline-text-3" id="text-8-2">
<div class="org-src-container">
<pre class="src src-python"><span class="org-variable-name">DOCUMENTATION</span> = <span class="org-string">'''</span>
<span class="org-string">---</span>
<span class="org-string">module: hardware_facts</span>
<span class="org-string">short_description: "check if at least one SAT&gt;IP server responds on the network"</span>
<span class="org-string">description:</span>
<span class="org-string"> - This script sends a multicast message and awaits responses by Sat&gt;IP servers.</span>
<span class="org-string"> Returns a list of detected SAT&gt;IP servers with their name and capabilites.</span>
<span class="org-string">'''</span>
<span class="org-variable-name">EXAMPLES</span> = <span class="org-string">'''</span>
<span class="org-string">- name: "detect SAT&gt;IP Server on the network"</span>
<span class="org-string"> action: satip_facts</span>
<span class="org-string">- debug:</span>
<span class="org-string"> var: satip_devices</span>
<span class="org-string">'''</span>
<span class="org-keyword">import</span> json
<span class="org-keyword">import</span> socket
<span class="org-keyword">import</span> sys
<span class="org-keyword">import</span> time
<span class="org-keyword">import</span> xml.etree.ElementTree <span class="org-keyword">as</span> ET
<span class="org-keyword">import</span> requests
<span class="org-keyword">from</span> contextlib <span class="org-keyword">import</span> contextmanager
<span class="org-keyword">from</span> ansible.module_utils.basic <span class="org-keyword">import</span> *
<span class="org-variable-name">SSDP_BIND</span> = <span class="org-string">"0.0.0.0"</span>
<span class="org-variable-name">SSDP_ADDR</span> = <span class="org-string">"239.255.255.250"</span>
<span class="org-variable-name">SSDP_PORT</span> = 1900
<span class="org-comment-delimiter"># </span><span class="org-comment">SSDP_MX = max delay for server response</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">a value of 2s is recommended by the SAT&gt;IP specification 1.2.2</span>
<span class="org-variable-name">SSDP_MX</span> = 2
<span class="org-variable-name">SSDP_ST</span> = <span class="org-string">"urn:ses-com:device:SatIPServer:1"</span>
<span class="org-variable-name">ssdpRequest</span> = <span class="org-string">"\r\n"</span>.join((
<span class="org-string">"M-SEARCH * HTTP/1.1"</span>,
<span class="org-string">"HOST: %s:%d"</span> % (SSDP_ADDR, SSDP_PORT),
<span class="org-string">"MAN: \"ssdp:discover\""</span>,
<span class="org-string">"MX: %d"</span> % (SSDP_MX),
<span class="org-string">"ST: %s"</span> % (SSDP_ST),
<span class="org-string">"\r\n"</span>))
<span class="org-type">@contextmanager</span>
<span class="org-keyword">def</span> <span class="org-function-name">socket_manager</span>(*args, **kwargs):
<span class="org-doc">"""provide a context manager for socket"""</span>
<span class="org-variable-name">sock</span> = socket.socket(*args, **kwargs)
sock.setblocking(<span class="org-constant">False</span>)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
<span class="org-keyword">try</span>:
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
<span class="org-keyword">except</span> socket.error:
<span class="org-keyword">pass</span>
sock.settimeout(SSDP_MX + 0.5)
sock.bind((SSDP_BIND, SSDP_PORT))
<span class="org-keyword">try</span>:
<span class="org-keyword">yield</span> sock
<span class="org-keyword">finally</span>:
sock.close()
<span class="org-keyword">def</span> <span class="org-function-name">parse_satip_xml</span>(data):
<span class="org-doc">""" Parse SAT&gt;IP XML data.</span>
<span class="org-doc"> Args:</span>
<span class="org-doc"> data (str): XML input data..</span>
<span class="org-doc"> Returns:</span>
<span class="org-doc"> dict: Parsed SAT&gt;IP device name and frontend information.</span>
<span class="org-doc"> """</span>
<span class="org-variable-name">result</span> = {<span class="org-string">'name'</span>: <span class="org-string">''</span>, <span class="org-string">'frontends'</span>: {}}
<span class="org-keyword">if</span> data:
<span class="org-variable-name">root</span> = ET.fromstring(data)
<span class="org-variable-name">name</span> = root.find(<span class="org-string">'.//*/{urn:schemas-upnp-org:device-1-0}friendlyName'</span>)
<span class="org-variable-name">result</span>[<span class="org-string">'name'</span>] = name.text
<span class="org-variable-name">satipcap</span> = root.find(<span class="org-string">'.//*/{urn:ses-com:satip}X_SATIPCAP'</span>)
<span class="org-keyword">if</span> satipcap <span class="org-keyword">is</span> <span class="org-constant">None</span>:
<span class="org-keyword">raise</span> <span class="org-type">ValueError</span>(<span class="org-string">"Invalid SAT&gt;IP device description"</span>)
<span class="org-variable-name">caps</span> = {}
<span class="org-keyword">for</span> system <span class="org-keyword">in</span> satipcap.text.split(<span class="org-string">","</span>):
<span class="org-variable-name">cap</span> = system.split(<span class="org-string">"-"</span>)
<span class="org-keyword">if</span> cap:
<span class="org-variable-name">count</span> = <span class="org-builtin">int</span>(cap[1])
<span class="org-keyword">if</span> cap[0] <span class="org-keyword">in</span> caps:
<span class="org-variable-name">count</span> = count + caps[cap[0]]
caps[cap[0]] = count
<span class="org-variable-name">result</span>[<span class="org-string">'frontends'</span>] = caps
<span class="org-keyword">return</span> result
<span class="org-keyword">def</span> <span class="org-function-name">main</span>():
<span class="org-variable-name">description_urls</span> = []
<span class="org-variable-name">device_list</span> = []
<span class="org-variable-name">module</span> = AnsibleModule(argument_spec={}, supports_check_mode=<span class="org-constant">True</span>,)
<span class="org-keyword">with</span> socket_manager(socket.AF_INET, socket.SOCK_DGRAM) <span class="org-keyword">as</span> sock:
<span class="org-comment-delimiter"># </span><span class="org-comment">according to Sat&gt;IP Specification 1.2.2, p. 20</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">a client should send three requests within 100 ms with a ttl of 2</span>
<span class="org-keyword">for</span> _ <span class="org-keyword">in</span> <span class="org-builtin">range</span>(3):
sock.sendto(ssdpRequest, (SSDP_ADDR, SSDP_PORT))
time.sleep(0.03)
<span class="org-keyword">try</span>:
<span class="org-variable-name">response</span> = sock.recv(1024)
<span class="org-keyword">if</span> response <span class="org-keyword">and</span> <span class="org-string">"SERVER:"</span> <span class="org-keyword">in</span> response:
<span class="org-keyword">for</span> line <span class="org-keyword">in</span> response.splitlines():
<span class="org-keyword">if</span> <span class="org-string">"LOCATION"</span> <span class="org-keyword">in</span> line:
<span class="org-variable-name">url</span> = line.split()[-1].strip()
<span class="org-keyword">if</span> url <span class="org-keyword">not</span> <span class="org-keyword">in</span> description_urls:
description_urls.append(url)
<span class="org-variable-name">info</span> = requests.get(url, timeout=2)
device_list.append(parse_satip_xml(info.text))
<span class="org-keyword">else</span>:
<span class="org-keyword">raise</span> <span class="org-type">ValueError</span>(<span class="org-string">'No satip server detected'</span>)
<span class="org-keyword">except</span> (socket.timeout, <span class="org-type">ValueError</span>, ET.ParseError):
<span class="org-keyword">pass</span>
module.exit_json(changed=<span class="org-constant">False</span>, ansible_facts={<span class="org-string">'satip_devices'</span>: device_list})
<span class="org-keyword">if</span> <span class="org-builtin">__name__</span> == <span class="org-string">'__main__'</span>:
main()
</pre>
</div>
</div>
</div>
<div id="outline-container-org8269686" class="outline-3">
<h3 id="org8269686"><span class="section-number-3">8.3</span> xrandr_facts.py</h3>
<div class="outline-text-3" id="text-8-3">
<ul class="org-ul">
<li class="off"><code>[&#xa0;]</code> support multiple screens (-d :0.0 .. :0.n)</li>
</ul>
<div class="org-src-container">
<pre class="src src-python"><span class="org-keyword">from</span> __future__ <span class="org-keyword">import</span> print_function
<span class="org-keyword">import</span> ast
<span class="org-keyword">import</span> binascii
<span class="org-keyword">import</span> csv
<span class="org-keyword">import</span> re
<span class="org-keyword">import</span> subprocess
<span class="org-keyword">from</span> collections <span class="org-keyword">import</span> namedtuple
<span class="org-keyword">from</span> ansible.module_utils.basic <span class="org-keyword">import</span> *
<span class="org-variable-name">DOCUMENTATION</span> = <span class="org-string">'''</span>
<span class="org-string">---</span>
<span class="org-string">module: xrandr_facts</span>
<span class="org-string">short_description: "gather facts about connected monitors and available modelines"</span>
<span class="org-string">description:</span>
<span class="org-string"> - This module needs a running x-server on a given display in order to successfully call xrandr.</span>
<span class="org-string"> Returns the dictionary "xrandr", wich contains all screens with output states, connected displays,</span>
<span class="org-string"> EDID info and their modes and a recommendation for the best fitting tv mode.</span>
<span class="org-string">options:</span>
<span class="org-string"> display:</span>
<span class="org-string"> required: False</span>
<span class="org-string"> default: ":0"</span>
<span class="org-string"> description:</span>
<span class="org-string"> - the DISPLAY variable to use when calling xrandr</span>
<span class="org-string"> preferred_outputs:</span>
<span class="org-string"> required: False</span>
<span class="org-string"> default: ["HDMI", "DP", "DVI", "VGA", "TV"]</span>
<span class="org-string"> description:</span>
<span class="org-string"> - ranking of the preferred display connectors</span>
<span class="org-string"> preferred_refreshrates:</span>
<span class="org-string"> required: False</span>
<span class="org-string"> default: ["50", "60", "75", "30", "25"]</span>
<span class="org-string"> description:</span>
<span class="org-string"> - ranking of the preferred display refreshrate</span>
<span class="org-string"> preferred_resolutions:</span>
<span class="org-string"> required: False</span>
<span class="org-string"> default: ["7680x4320", "3840x2160", "1920x1080", "1280x720", "720x576"]</span>
<span class="org-string"> description:</span>
<span class="org-string"> - ranking of the preferred display resolutions</span>
<span class="org-string"> write_edids:</span>
<span class="org-string"> required: False</span>
<span class="org-string"> default: True</span>
<span class="org-string"> description:</span>
<span class="org-string"> - write edid data to /etc/X11/edid.{connector}.bin</span>
<span class="org-string">'''</span>
<span class="org-variable-name">EXAMPLES</span> = <span class="org-string">'''</span>
<span class="org-string">- name: "collect facts for connected displays"</span>
<span class="org-string"> action: xserver_facts</span>
<span class="org-string"> display: ":0"</span>
<span class="org-string">- debug:</span>
<span class="org-string"> var: xrandr</span>
<span class="org-string">- debug:</span>
<span class="org-string"> var: xorg</span>
<span class="org-string">'''</span>
<span class="org-variable-name">ARG_SPECS</span> = {
<span class="org-string">'display'</span>: <span class="org-builtin">dict</span>(default=<span class="org-string">":0"</span>, <span class="org-builtin">type</span>=<span class="org-string">'str'</span>, required=<span class="org-constant">False</span>),
<span class="org-string">'preferred_outputs'</span>: <span class="org-builtin">dict</span>(
default=[<span class="org-string">"HDMI"</span>, <span class="org-string">"DP"</span>, <span class="org-string">"DVI"</span>, <span class="org-string">"VGA"</span>, <span class="org-string">"TV"</span>], <span class="org-builtin">type</span>=<span class="org-string">'list'</span>, required=<span class="org-constant">False</span>),
<span class="org-string">'preferred_refreshrates'</span>: <span class="org-builtin">dict</span>(
default=[50, 60, 75, 30, 25], <span class="org-builtin">type</span>=<span class="org-string">'list'</span>, required=<span class="org-constant">False</span>),
<span class="org-string">'preferred_resolutions'</span>: <span class="org-builtin">dict</span>(
default=[
<span class="org-string">"7680x4320"</span>, <span class="org-string">"3840x2160"</span>, <span class="org-string">"1920x1080"</span>, <span class="org-string">"1280x720"</span>, <span class="org-string">"720x576"</span>],
<span class="org-builtin">type</span>=<span class="org-string">'list'</span>, required=<span class="org-constant">False</span>),
<span class="org-string">'write_edids'</span>: <span class="org-builtin">dict</span>(default=<span class="org-constant">True</span>, <span class="org-builtin">type</span>=<span class="org-string">'bool'</span>, required=<span class="org-constant">False</span>),
}
<span class="org-variable-name">SCREEN_REGEX</span> = re.<span class="org-builtin">compile</span>(<span class="org-string">"^(?P&lt;screen&gt;Screen\s\d+:)(?:.*)"</span>)
<span class="org-variable-name">CONNECTOR_REGEX</span> = re.<span class="org-builtin">compile</span>(
<span class="org-string">"^(?P&lt;connector&gt;.*-\d+)\s(?P&lt;connection_state&gt;connected|disconnected)\s(?P&lt;primary&gt;primary)?"</span>)
<span class="org-variable-name">MODE_REGEX</span> = re.<span class="org-builtin">compile</span>(<span class="org-string">"^\s+(?P&lt;resolution&gt;\d{3,}x\d{3,}).*"</span>)
<span class="org-variable-name">Mode</span> = namedtuple(<span class="org-string">'Mode'</span>, [<span class="org-string">'connection'</span>, <span class="org-string">'resolution'</span>, <span class="org-string">'refreshrate'</span>])
<span class="org-keyword">def</span> <span class="org-function-name">check_for_screen</span>(line):
<span class="org-doc">"""check line for screen information"""</span>
<span class="org-variable-name">match</span> = re.match(SCREEN_REGEX, line)
<span class="org-keyword">if</span> match:
<span class="org-keyword">return</span> match.groupdict()[<span class="org-string">'screen'</span>]
<span class="org-keyword">def</span> <span class="org-function-name">check_for_connection</span>(line):
<span class="org-doc">"""check line for connection name and state"""</span>
<span class="org-variable-name">match</span> = re.match(CONNECTOR_REGEX, line)
<span class="org-variable-name">connector</span> = <span class="org-constant">None</span>
<span class="org-variable-name">is_connected</span> = <span class="org-constant">False</span>
<span class="org-keyword">if</span> match:
<span class="org-variable-name">match</span> = match.groupdict()
<span class="org-variable-name">connector</span> = match[<span class="org-string">'connector'</span>]
<span class="org-variable-name">is_connected</span> = <span class="org-constant">True</span> <span class="org-keyword">if</span> match[<span class="org-string">'connection_state'</span>] == <span class="org-string">'connected'</span> <span class="org-keyword">else</span> <span class="org-constant">False</span>
<span class="org-keyword">return</span> connector, is_connected
<span class="org-keyword">def</span> <span class="org-function-name">get_indentation</span>(line):
<span class="org-doc">"""return the number of leading whitespace characters"""</span>
<span class="org-keyword">return</span> <span class="org-builtin">len</span>(line) - <span class="org-builtin">len</span>(line.lstrip())
<span class="org-keyword">def</span> <span class="org-function-name">sort_mode</span>(mode):
<span class="org-doc">"""rate modes by several criteria"""</span>
<span class="org-variable-name">connection_score</span> = 0
<span class="org-variable-name">rrate_score</span> = 0
<span class="org-variable-name">resolution_score</span> = 0
<span class="org-variable-name">preferred_rrates</span> = module.params[<span class="org-string">'preferred_refreshrates'</span>]
<span class="org-comment-delimiter"># </span><span class="org-comment">[50, 60]</span>
<span class="org-variable-name">preferred_resolutions</span> = module.params[<span class="org-string">'preferred_resolutions'</span>]
<span class="org-comment-delimiter"># </span><span class="org-comment">["7680x4320", "3840x2160", "1920x1080", "1280x720", "720x576"]</span>
<span class="org-variable-name">preferred_outputs</span> = module.params[<span class="org-string">'preferred_outputs'</span>]
<span class="org-comment-delimiter"># </span><span class="org-comment">["HDMI", "DP", "DVI", "VGA"]</span>
<span class="org-keyword">if</span> mode.refreshrate <span class="org-keyword">in</span> preferred_rrates:
<span class="org-variable-name">rrate_score</span> = <span class="org-builtin">len</span>(preferred_rrates) - preferred_rrates.index(mode.refreshrate)
<span class="org-keyword">if</span> mode.resolution <span class="org-keyword">in</span> preferred_resolutions:
<span class="org-variable-name">resolution_score</span> = <span class="org-builtin">len</span>(preferred_resolutions) - preferred_resolutions.index(mode.resolution)
<span class="org-variable-name">x_resolution</span>, <span class="org-variable-name">y_resolution</span> = (<span class="org-builtin">int</span>(n) <span class="org-keyword">for</span> n <span class="org-keyword">in</span> mode.resolution.split(<span class="org-string">'x'</span>))
<span class="org-variable-name">connection</span> = mode.connection.split(<span class="org-string">'-'</span>)[0]
<span class="org-keyword">if</span> connection <span class="org-keyword">in</span> preferred_outputs:
<span class="org-variable-name">connection_score</span> = <span class="org-builtin">len</span>(preferred_outputs) - preferred_outputs.index(connection)
<span class="org-keyword">return</span> (rrate_score, resolution_score, x_resolution, y_resolution, connection_score)
<span class="org-keyword">def</span> <span class="org-function-name">parse_xrandr_verbose</span>(iterator):
<span class="org-doc">"""parse the output of xrandr --verbose using an iterator delivering single lines"""</span>
<span class="org-variable-name">xorg</span> = {}
<span class="org-variable-name">is_connected</span> = <span class="org-constant">False</span>
<span class="org-keyword">for</span> line <span class="org-keyword">in</span> iterator:
<span class="org-keyword">if</span> line.startswith(<span class="org-string">'Screen'</span>):
<span class="org-variable-name">screen</span> = check_for_screen(line)
<span class="org-variable-name">xorg</span>[screen] = {}
<span class="org-keyword">elif</span> <span class="org-string">'connected'</span> <span class="org-keyword">in</span> line:
<span class="org-variable-name">connector</span>, <span class="org-variable-name">is_connected</span> = check_for_connection(line)
xorg[screen][connector] = {
<span class="org-string">'is_connected'</span>: is_connected,
<span class="org-string">'EDID'</span>: <span class="org-string">''</span>,
<span class="org-string">'modes'</span>: {},
<span class="org-string">'preferred'</span>: <span class="org-string">''</span>,
<span class="org-string">'current'</span>: <span class="org-string">''</span>,
<span class="org-string">'auto'</span>: <span class="org-string">''</span>,
}
<span class="org-keyword">elif</span> is_connected <span class="org-keyword">and</span> <span class="org-string">'EDID:'</span> <span class="org-keyword">in</span> line:
<span class="org-variable-name">edid_str</span> = <span class="org-string">""</span>
<span class="org-variable-name">outer_indentation</span> = get_indentation(line)
<span class="org-keyword">while</span> <span class="org-constant">True</span>:
<span class="org-variable-name">line</span> = <span class="org-builtin">next</span>(iterator)
<span class="org-keyword">if</span> get_indentation(line) &gt; outer_indentation:
<span class="org-variable-name">edid_str</span> += line.strip()
<span class="org-keyword">else</span>:
<span class="org-keyword">break</span>
xorg[screen][connector][<span class="org-string">'EDID'</span>] = edid_str
<span class="org-keyword">elif</span> is_connected <span class="org-keyword">and</span> <span class="org-string">"MHz"</span> <span class="org-keyword">in</span> line <span class="org-keyword">and</span> <span class="org-keyword">not</span> <span class="org-string">"Interlace"</span> <span class="org-keyword">in</span> line:
<span class="org-variable-name">match</span> = re.match(MODE_REGEX, line)
<span class="org-keyword">if</span> match:
<span class="org-variable-name">match</span> = match.groupdict()
<span class="org-variable-name">preferred</span> = <span class="org-builtin">bool</span>(<span class="org-string">"+preferred"</span> <span class="org-keyword">in</span> line)
<span class="org-variable-name">current</span> = <span class="org-builtin">bool</span>(<span class="org-string">"*current"</span> <span class="org-keyword">in</span> line)
<span class="org-keyword">while</span> <span class="org-constant">True</span>:
<span class="org-variable-name">line</span> = <span class="org-builtin">next</span>(iterator)
<span class="org-keyword">if</span> line.strip().startswith(<span class="org-string">'v:'</span>):
<span class="org-variable-name">refresh_rate</span> = ast.literal_eval(line.split()[-1][:-2])
<span class="org-variable-name">rrate</span> = <span class="org-builtin">int</span>(<span class="org-builtin">round</span>(refresh_rate))
<span class="org-keyword">if</span> xorg[screen][connector][<span class="org-string">'modes'</span>].get(match[<span class="org-string">'resolution'</span>]) <span class="org-keyword">is</span> <span class="org-constant">None</span>:
xorg[screen][connector][<span class="org-string">'modes'</span>][match[<span class="org-string">'resolution'</span>]] = []
<span class="org-keyword">if</span> rrate <span class="org-keyword">not</span> <span class="org-keyword">in</span> xorg[screen][connector][<span class="org-string">'modes'</span>][match[<span class="org-string">'resolution'</span>]]:
xorg[screen][connector][<span class="org-string">'modes'</span>][match[<span class="org-string">'resolution'</span>]].append(rrate)
<span class="org-keyword">if</span> preferred:
xorg[screen][connector][<span class="org-string">'preferred'</span>] = <span class="org-string">"{}_{}"</span>.<span class="org-builtin">format</span>(
match[<span class="org-string">'resolution'</span>], rrate)
<span class="org-keyword">if</span> current:
xorg[screen][connector][<span class="org-string">'current'</span>] = <span class="org-string">"{}_{}"</span>.<span class="org-builtin">format</span>(
match[<span class="org-string">'resolution'</span>], rrate)
<span class="org-keyword">break</span>
<span class="org-keyword">return</span> xorg
<span class="org-keyword">def</span> <span class="org-function-name">parse_edid_data</span>(edid):
<span class="org-variable-name">vendor</span> = <span class="org-string">"Unknown"</span>
<span class="org-variable-name">model</span> = <span class="org-string">"Unknown"</span>
<span class="org-keyword">try</span>:
<span class="org-variable-name">data</span> = subprocess.check_output(<span class="org-string">"parse-edid &lt; {}"</span>.<span class="org-builtin">format</span>(edid),
shell=<span class="org-constant">True</span>, universal_newlines=<span class="org-constant">True</span>)
<span class="org-keyword">except</span> subprocess.CalledProcessError:
<span class="org-keyword">pass</span>
<span class="org-keyword">else</span>:
<span class="org-keyword">for</span> line <span class="org-keyword">in</span> data.splitlines():
<span class="org-keyword">if</span> <span class="org-string">"VendorName"</span> <span class="org-keyword">in</span> line:
<span class="org-variable-name">vendor</span> = line.strip().split(<span class="org-string">'"'</span>)[1]
<span class="org-keyword">if</span> <span class="org-string">"ModelName"</span> <span class="org-keyword">in</span> line:
<span class="org-variable-name">model</span> = line.strip().split(<span class="org-string">'"'</span>)[1]
<span class="org-keyword">return</span> vendor, model
<span class="org-keyword">def</span> <span class="org-function-name">collect_nvidia_data</span>():
<span class="org-variable-name">BusID_RE</span> = re.<span class="org-builtin">compile</span>((
<span class="org-string">'(?P&lt;domain&gt;[0-9a-fA-F]+)'</span>
<span class="org-string">':'</span>
<span class="org-string">'(?P&lt;bus&gt;[0-9a-fA-F]+)'</span>
<span class="org-string">':'</span>
<span class="org-string">'(?P&lt;device&gt;[0-9a-fA-F]+)'</span>
<span class="org-string">'\.'</span>
<span class="org-string">'(?P&lt;function&gt;[0-9a-fA-F]+)'</span>
))
<span class="org-keyword">try</span>:
<span class="org-variable-name">data</span> = subprocess.check_output([<span class="org-string">"nvidia-smi"</span>, <span class="org-string">"--query-gpu=name,pci.bus_id"</span>, <span class="org-string">"--format=csv"</span>, <span class="org-string">"-i0"</span>],
universal_newlines=<span class="org-constant">True</span>)
<span class="org-keyword">except</span> subprocess.CalledProcessError:
<span class="org-keyword">pass</span>
<span class="org-keyword">except</span> <span class="org-type">OSError</span>:
<span class="org-comment-delimiter"># </span><span class="org-comment">nvidia-smi is not installed</span>
<span class="org-keyword">pass</span>
<span class="org-keyword">else</span>:
<span class="org-keyword">for</span> row <span class="org-keyword">in</span> csv.DictReader(data.splitlines(), delimiter=<span class="org-string">','</span>, skipinitialspace=<span class="org-constant">True</span>):
<span class="org-variable-name">name</span> = row[<span class="org-string">'name'</span>]
<span class="org-variable-name">bus_id</span> = row[<span class="org-string">'pci.bus_id'</span>]
<span class="org-comment-delimiter"># </span><span class="org-comment">pci.bus_id structure as reported by nvidia-smi: "domain:bus:device.function", in hex.</span>
<span class="org-variable-name">match</span> = BusID_RE.search(bus_id)
<span class="org-keyword">if</span> match:
<span class="org-variable-name">domain</span>, <span class="org-variable-name">bus</span>, <span class="org-variable-name">device</span>, <span class="org-variable-name">function</span> = (<span class="org-builtin">int</span>(n, 16) <span class="org-keyword">for</span> n <span class="org-keyword">in</span> match.groups())
<span class="org-variable-name">bus_id</span> = <span class="org-string">"PCI:{:d}@{:d}:{:d}:{:d}"</span>.<span class="org-builtin">format</span>(bus, domain, device, function)
<span class="org-keyword">return</span> name, bus_id
<span class="org-keyword">raise</span> <span class="org-type">ValueError</span>
<span class="org-keyword">def</span> <span class="org-function-name">output_data</span>(data, write_edids=<span class="org-constant">True</span>):
<span class="org-keyword">if</span> data:
<span class="org-variable-name">modes</span> = []
<span class="org-keyword">for</span> _, screen_data <span class="org-keyword">in</span> data.items():
<span class="org-keyword">for</span> connector, connection_data <span class="org-keyword">in</span> screen_data.items():
<span class="org-keyword">if</span> connection_data.get(<span class="org-string">'EDID'</span>) <span class="org-keyword">and</span> write_edids:
<span class="org-keyword">with</span> <span class="org-builtin">open</span>(<span class="org-string">'/etc/X11/edid.{}.bin'</span>.<span class="org-builtin">format</span>(connector), <span class="org-string">'wb'</span>) <span class="org-keyword">as</span> edid:
edid.write(binascii.a2b_hex(connection_data[<span class="org-string">'EDID'</span>]))
<span class="org-keyword">for</span> resolution, refreshrates <span class="org-keyword">in</span> connection_data[<span class="org-string">'modes'</span>].items():
<span class="org-keyword">for</span> refreshrate <span class="org-keyword">in</span> refreshrates:
modes.append(Mode(connector, resolution, refreshrate))
<span class="org-keyword">if</span> modes:
<span class="org-variable-name">result</span> = {}
<span class="org-keyword">try</span>:
<span class="org-variable-name">gpu_name</span>, <span class="org-variable-name">bus_id</span> = collect_nvidia_data()
<span class="org-keyword">except</span> <span class="org-type">ValueError</span>:
<span class="org-variable-name">gpu_name</span> = <span class="org-constant">None</span>
<span class="org-variable-name">bus_id</span> = <span class="org-constant">None</span>
<span class="org-keyword">def</span> <span class="org-function-name">create_entry</span>(my_dict, name, connector, resolution, refreshrate, vendor, model):
<span class="org-variable-name">my_dict</span>[name] = {
<span class="org-string">'connector'</span>: connector,
<span class="org-string">'resolution'</span>: resolution,
<span class="org-string">'refreshrate'</span>: refreshrate,
<span class="org-string">'edid'</span>: <span class="org-string">'/etc/X11/edid.{}.bin'</span>.<span class="org-builtin">format</span>(connector),
<span class="org-string">'mode'</span>: <span class="org-string">"{}_{}"</span>.<span class="org-builtin">format</span>(resolution, refreshrate),
<span class="org-string">'vendor'</span>: vendor,
<span class="org-string">'model'</span>: model,
}
<span class="org-keyword">if</span> gpu_name <span class="org-keyword">and</span> bus_id:
result[name][<span class="org-string">'gpu_name'</span>] = gpu_name
result[name][<span class="org-string">'bus_id'</span>] = bus_id
<span class="org-variable-name">connector_0</span>, <span class="org-variable-name">resolution_0</span>, <span class="org-variable-name">refreshrate_0</span> = <span class="org-builtin">max</span>(modes, key=sort_mode)[:3]
<span class="org-variable-name">vendor_0</span>, <span class="org-variable-name">model_0</span> = parse_edid_data(<span class="org-string">'/etc/X11/edid.{}.bin'</span>.<span class="org-builtin">format</span>(connector_0))
create_entry(result, <span class="org-string">'primary'</span>, connector_0, resolution_0, refreshrate_0, vendor_0, model_0)
<span class="org-comment-delimiter"># </span><span class="org-comment">check if additional monitors exist</span>
<span class="org-variable-name">other_modes</span> = [mode <span class="org-keyword">for</span> mode <span class="org-keyword">in</span> modes <span class="org-keyword">if</span> mode[0] != connector_0]
<span class="org-keyword">if</span> other_modes:
<span class="org-variable-name">connector_1</span>, <span class="org-variable-name">resolution_1</span>, <span class="org-variable-name">refreshrate_1</span> = <span class="org-builtin">max</span>(other_modes, key=sort_mode)[:3]
<span class="org-variable-name">vendor_1</span>, <span class="org-variable-name">model_1</span> = parse_edid_data(<span class="org-string">'/etc/X11/edid.{}.bin'</span>.<span class="org-builtin">format</span>(connector_1))
create_entry(result, <span class="org-string">'secondary'</span>, connector_1, resolution_1, refreshrate_1, vendor_1, model_1)
<span class="org-comment-delimiter">#</span><span class="org-comment">print(json.dumps(data, sort_keys=True, indent=4))</span>
module.exit_json(changed=<span class="org-constant">True</span> <span class="org-keyword">if</span> write_edids <span class="org-keyword">else</span> <span class="org-constant">False</span>, ansible_facts={<span class="org-string">'xrandr'</span>: data, <span class="org-string">'xorg'</span>: result})
<span class="org-keyword">if</span> <span class="org-builtin">__name__</span> == <span class="org-string">'__main__'</span>:
<span class="org-variable-name">module</span> = AnsibleModule(argument_spec=ARG_SPECS, supports_check_mode=<span class="org-constant">False</span>,)
<span class="org-keyword">try</span>:
<span class="org-variable-name">d</span> = subprocess.check_output([<span class="org-string">'xrandr'</span>, <span class="org-string">'-d'</span>, module.params[<span class="org-string">'display'</span>], <span class="org-string">'--verbose'</span>], universal_newlines=<span class="org-constant">True</span>).splitlines()
<span class="org-keyword">except</span> subprocess.CalledProcessError:
<span class="org-variable-name">xorg_data</span> = {}
<span class="org-keyword">else</span>:
<span class="org-variable-name">xorg_data</span> = parse_xrandr_verbose(<span class="org-builtin">iter</span>(d))
output_data(xorg_data, module.params[<span class="org-string">'write_edids'</span>])
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org6684575" class="outline-2">
<h2 id="org6684575"><span class="section-number-2">9</span> Handlers</h2>
<div class="outline-text-2" id="text-9">
<div class="org-src-container">
<pre class="src src-yaml">- <span class="org-variable-name">name</span>: Reconfigure unattended upgrades with dpkg
<span class="org-variable-name">command</span>: <span class="org-string">'/usr/sbin/dpkg-reconfigure --frontend noninteractive unattended-upgrades'</span>
- <span class="org-variable-name">name</span>: Trigger Udev
<span class="org-variable-name">command</span>: <span class="org-string">'udevadm trigger '</span>
- <span class="org-variable-name">name</span>: Restart Samba
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: smbd.service
<span class="org-variable-name">state</span>: restarted
<span class="org-variable-name">enabled</span>: <span class="org-constant">yes</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">masked: no</span>
<span class="org-variable-name">register</span>: samba_reload
- <span class="org-variable-name">name</span>: Restart NFS Kernel Server
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: nfs-server.service
<span class="org-variable-name">state</span>: restarted
<span class="org-variable-name">enabled</span>: <span class="org-constant">yes</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">masked: no</span>
<span class="org-variable-name">register</span>: nfs_reload
- <span class="org-variable-name">name</span>: Restart sundtek.service
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: sundtek.service
<span class="org-variable-name">state</span>: restarted
<span class="org-variable-name">enabled</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">masked</span>: <span class="org-constant">no</span>
- <span class="org-variable-name">name</span>: Restart VDR
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: vdr.service
<span class="org-variable-name">state</span>: restarted
<span class="org-variable-name">enabled</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">register</span>: vdr_restart
- <span class="org-variable-name">name</span>: Stop VDR
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: vdr.service
<span class="org-variable-name">state</span>: stopped
<span class="org-variable-name">enabled</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">register</span>: vdr_stop
- <span class="org-variable-name">name</span>: Start VDR
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: vdr.service
<span class="org-variable-name">state</span>: started
<span class="org-variable-name">enabled</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">register</span>: vdr_start
- <span class="org-variable-name">name</span>: Start yavdr-xorg
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">daemon_reload</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">name</span>: <span class="org-string">'yavdr-xorg'</span>
<span class="org-variable-name">enabled</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">state</span>: started
<span class="org-variable-name">register</span>: yavdr_xorg_start
- <span class="org-variable-name">name</span>: Stop xlogin
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: xlogin@vdr.service
<span class="org-variable-name">state</span>: stopped
<span class="org-variable-name">enabled</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">register</span>: xlogin_stop
- <span class="org-variable-name">name</span>: Start xlogin
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">daemon_reload</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">name</span>: <span class="org-string">'xlogin@{{ vdr.user }}'</span>
<span class="org-variable-name">enabled</span>: <span class="org-constant">yes</span>
<span class="org-variable-name">state</span>: started
<span class="org-variable-name">register</span>: xlogin_start
- <span class="org-variable-name">name</span>: Stop x
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: x@vt7.service
<span class="org-variable-name">state</span>: stopped
<span class="org-variable-name">register</span>: x_stop
</pre>
</div>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Autor: Alexander Grothe &lt;seahawk1986@gmx.de&gt;</p>
<p class="date">Created: 2018-06-02 Sa 20:04</p>
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>
</html>