yavdr-ansible/Manual.html

9761 lines
1.0 MiB
HTML
Raw Normal View History

2017-03-17 11:47:31 +01:00
<?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>
2019-05-20 21:36:57 +02:00
<!-- 2019-05-20 Mo 21:36 -->
2017-03-17 11:47:31 +01:00
<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>
2017-03-17 11:47:31 +01:00
<meta name="generator" content="Org mode" />
<meta name="author" content="Alexander Grothe &lt;seahawk1986@gmx.de&gt;" />
2017-03-17 11:47:31 +01:00
<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'; }
2017-11-09 10:37:24 +01:00
pre.src-hledger:before { content: 'hledger'; }
2017-03-17 11:47:31 +01:00
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; }
2019-01-19 12:27:41 +01:00
.equation-container {
display: table;
text-align: center;
width: 100%;
}
.equation {
vertical-align: middle;
}
.equation-label {
display: table-cell;
text-align: right;
vertical-align: middle;
}
2017-03-17 11:47:31 +01:00
.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="https://fniessen.github.io/org-html-themes/styles/readtheorg/css/htmlize.css"/>
<link rel="stylesheet" type="text/css" href="https://fniessen.github.io/org-html-themes/styles/readtheorg/css/readtheorg.css"/>
2017-03-17 11:47:31 +01:00
<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="https://fniessen.github.io/org-html-themes/styles/lib/js/jquery.stickytableheaders.min.js"></script>
<script type="text/javascript" src="https://fniessen.github.io/org-html-themes/styles/readtheorg/js/readtheorg.js"></script>
2017-03-17 11:47:31 +01:00
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2019 Free Software Foundation, Inc.
2017-03-17 11:47:31 +01:00
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>
2019-05-15 19:55:51 +02:00
<div id="table-of-contents">
<h2>Inhaltsverzeichnis</h2>
<div id="text-table-of-contents">
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#orgd394a7a">1. User Stories</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org0de2fb5">1.1. yavdr-full</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#org1341d4f">2. Introduction</a></li>
<li><a href="#org00ec576">3. Installing and configuring yaVDR with Ansible</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org3b9a333">3.1. Install scripts for local usage</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#orge715667">4. Playbooks</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org3c9584d">4.1. yavdr07.yml</a></li>
<li><a href="#orge303152">4.2. yavdr07-headless.yml</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#org5e9d15c">5. Hosts</a></li>
<li><a href="#org4afcc24">6. Group Variables</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org440826a">6.1. PPAs</a></li>
<li><a href="#orgd81af4d">6.2. VDR user, directories, special configuration and plugins</a></li>
<li><a href="#org382cfce">6.3. Media directories</a></li>
<li><a href="#orgd269aac">6.4. NFS</a></li>
<li><a href="#orgbf93017">6.5. Samba</a></li>
<li><a href="#org9097273">6.6. Additional packages</a></li>
<li><a href="#orgafa8a0c">6.7. System pre-configuration</a></li>
<li><a href="#org24044cc">6.8. Serial IR</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#org7c7928e">7. Roles</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org44a8764">7.1. install-dependencies</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#orgcff0dd8">7.1.1. tasks</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#orgceeaed7">7.2. nvidia experimental drivers</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org3845ad9">7.2.1. tasks</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#orgede981c">7.3. yavdr-common</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org2aa7465">7.3.1. default variables</a></li>
<li><a href="#org727b6ab">7.3.2. tasks</a></li>
<li><a href="#orgcf6ed6f">7.3.3. templates</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#org0d0a68a">7.4. collect facts about the system with custom modules</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org9e39735">7.4.1. variables</a></li>
<li><a href="#org95cfa7c">7.4.2. tasks</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#org3270034">7.5. vdr</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org5cb0359">7.5.1. tasks</a></li>
<li><a href="#org29794d4">7.5.2. templates</a></li>
<li><a href="#org2a38605">7.5.3. files</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#org876775d">7.6. <span class="todo STARTED">STARTED</span> yavdr-network</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#orgecbd11b">7.6.1. default variables</a></li>
<li><a href="#org45a8885">7.6.2. tasks</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#org1dc1e84">7.7. vdr-plugin-menuorg</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org6cc4c57">7.7.1. tasks</a></li>
<li><a href="#orga6c08e8">7.7.2. templates</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#orgf65b519">7.8. nfs-server</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#orgeaea511">7.8.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="#orgb8112a8">7.8.2. tasks</a></li>
<li><a href="#orgc81f7d8">7.8.3. templates</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#org68b19aa">7.9. yavdr-remote</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#orgae0ab06">7.9.1. default variables</a></li>
<li><a href="#org3e08972">7.9.2. tasks</a></li>
<li><a href="#orgbf1dc76">7.9.3. templates</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#org520d860">7.10. pulseaudio</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org4e5d5b5">7.10.1. tasks</a></li>
<li><a href="#org7f5b49e">7.10.2. templates</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#org60f82bf">7.11. yavdr-xorg</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org3a7eacd">7.11.1. About the GUI session</a></li>
<li><a href="#orga99afd7">7.11.2. default variables</a></li>
<li><a href="#org8db6547">7.11.3. tasks</a></li>
<li><a href="#orga4e71f2">7.11.4. templates</a></li>
<li><a href="#org0adc843">7.11.5. files</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#org610df5f">7.12. yavdr-desktop</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org0f510d1">7.12.1. Tasks</a></li>
<li><a href="#org188914b">7.12.2. Templates</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#orgfcc183a">7.13. samba-install</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org68633e1">7.13.1. tasks</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#orga27b06e">7.14. samba-config</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org6c3ca8f">7.14.1. tasks</a></li>
<li><a href="#orgc73e445">7.14.2. templates</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#org69635a5">7.15. <span class="todo STARTED">STARTED</span> autoinstall-drivers</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#orgb80dbde">7.15.1. <span class="todo TODO">TODO</span> sundtek for Sundtek devices (local or network connection)</a></li>
<li><a href="#org782ccba">7.15.2. <span class="todo TODO">TODO</span> drivers for TT S2-6400 FF</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#orga67afe9">7.16. autoinstall-ubuntu-drivers</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org9d56f72">7.16.1. tasks</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#org2ae2021">7.17. autoinstall-virtualbox-guest</a></li>
<li><a href="#orgfd62e8e">7.18. autoinstall-atric-usb</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#orgd77a222">7.18.1. dependencies</a></li>
<li><a href="#orgce670ea">7.18.2. tasks</a></li>
<li><a href="#orgf942b24">7.18.3. templates</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#org317f404">7.19. autoinstall-yausbir</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org01fde27">7.19.1. dependencies</a></li>
<li><a href="#orgcf9ebfc">7.19.2. tasks</a></li>
<li><a href="#org8ca01b3">7.19.3. templates</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#org5e17332">7.20. autoinstall-satip</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org96fcee2">7.20.1. tasks</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#org3b98bb4">7.21. autoinstall-targavfd</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org45ede5f">7.21.1. tasks</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#org599e45e">7.22. autoinstall-imonlcd</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org9799cb1">7.22.1. tasks</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#orgad5ff41">7.23. autoinstall-libcecdaemon</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org8638840">7.23.1. tasks</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#org95ff383">7.24. autoinstall-pvr350</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org089d4c5">7.24.1. tasks</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#org4e734b3">7.25. autoinstall-hauppauge-pvr</a></li>
<li><a href="#org77e3dc2">7.26. autoinstall-firmware</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org8f4d8b4">7.26.1. dependencies</a></li>
<li><a href="#orgaa85058">7.26.2. tasks</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#orge7e1362">7.27. autoinstall-dvbsky-firmware</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#orge74e161">7.27.1. dependencies</a></li>
<li><a href="#org0c6a139">7.27.2. defaults</a></li>
<li><a href="#orga308fc0">7.27.3. tasks</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#orgb986baa">7.28. <span class="todo TODO">TODO</span> autoinstall-dvbhddevice</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org83947e5">7.28.1. dependencies</a></li>
<li><a href="#org10e58c5">7.28.2. tasks</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#orgb7dd51d">7.29. <span class="todo TODO">TODO</span> autoinstall-dvbsddevice</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org484ad9e">7.29.1. dependencies</a></li>
<li><a href="#org8c24758">7.29.2. tasks</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#orgf6a888b">7.30. autoinstall-hardware-irmp</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#orgd4cb729">7.30.1. dependencies</a></li>
<li><a href="#org34fc5a6">7.30.2. tasks</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#orgcefbacd">7.31. Serial IR Receivers</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org49ec21d">7.31.1. defaults</a></li>
<li><a href="#org51c33d2">7.31.2. tasks</a></li>
<li><a href="#org44f05bd">7.31.3. templates</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#orga9ab046">7.32. kodi</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org6b6d401">7.32.1. tasks</a></li>
<li><a href="#org0c291a1">7.32.2. templates</a></li>
<li><a href="#org372e49d">7.32.3. files</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#orgb71cd97">7.33. dvd</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org772b8f3">7.33.1. tasks</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#org5b6092d">7.34. vdr-epg-daemon</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org562087d">7.34.1. defaults</a></li>
<li><a href="#orgd1381d4">7.34.2. tasks</a></li>
<li><a href="#org1da8a46">7.34.3. templates</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#orgbcdde5f">7.35. install-sundtek</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org9110073">7.35.1. dependencies</a></li>
<li><a href="#org4d25b29">7.35.2. defaults</a></li>
<li><a href="#orgcd28937">7.35.3. tasks</a></li>
<li><a href="#orgdd61c87">7.35.4. templates</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#org631985b">7.36. template-test</a></li>
<li><a href="#org7384de1">7.37. wakeup</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#orgbaf8c56">7.37.1. defaults</a></li>
<li><a href="#org264a220">7.37.2. tasks</a></li>
<li><a href="#org2daa50d">7.37.3. templates</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#org0665d00">7.38. grub-config</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org37ee2ea">7.38.1. default variables</a></li>
<li><a href="#org438cd38">7.38.2. tasks</a></li>
<li><a href="#org04478ca">7.38.3. templates</a></li>
<li><a href="#orgd9579a3">7.38.4. handlers</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#orgd01948d">8. Modules</a>
2019-05-15 19:55:51 +02:00
<ul>
2019-05-20 21:36:57 +02:00
<li><a href="#org70dcd2b">8.1. hardware_facts.py</a></li>
<li><a href="#org4d08ecc">8.2. pci_facts.py</a></li>
<li><a href="#orgfda6822">8.3. satip_facts.py</a></li>
<li><a href="#org7415e1d">8.4. xrandr_facts.py</a></li>
<li><a href="#org45eb8d4">8.5. rmmod.py</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</li>
2019-05-20 21:36:57 +02:00
<li><a href="#org675b603">9. Handlers</a></li>
2019-05-15 19:55:51 +02:00
</ul>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgd394a7a" class="outline-2">
<h2 id="orgd394a7a"><span class="section-number-2">1</span> User Stories</h2>
2019-05-15 19:55:51 +02:00
<div class="outline-text-2" id="text-1">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org0de2fb5" class="outline-3">
<h3 id="org0de2fb5"><span class="section-number-3">1.1</span> yavdr-full</h3>
2019-05-15 19:55:51 +02:00
<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>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org1341d4f" class="outline-2">
<h2 id="org1341d4f"><span class="section-number-2">2</span> Introduction</h2>
2019-05-15 19:55:51 +02:00
<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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org00ec576" class="outline-2">
<h2 id="org00ec576"><span class="section-number-2">3</span> Installing and configuring yaVDR with Ansible</h2>
2019-05-15 19:55:51 +02:00
<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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org3b9a333" class="outline-3">
<h3 id="org3b9a333"><span class="section-number-3">3.1</span> Install scripts for local usage</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-3-1">
<div class="org-src-container">
<pre class="src src-shell"><span class="org-builtin">set</span> -e
<span class="org-keyword">if</span> <span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">(</span> $<span class="org-variable-name">EUID</span> != 0 <span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>; <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>
<span class="org-comment-delimiter"># </span><span class="org-comment">update packages</span>
apt update
apt -y install software-properties-common
add-apt-repository -y ppa:ansible/ansible-2.7
<span class="org-comment-delimiter"># </span><span class="org-comment">install required packages</span>
apt-get -y install --no-install-recommends ansible python-jmespath
<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>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-shell"><span class="org-builtin">set</span> -e
<span class="org-keyword">if</span> <span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">(</span> $<span class="org-variable-name">EUID</span> != 0 <span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>; <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>
<span class="org-comment-delimiter"># </span><span class="org-comment">update packages</span>
apt update
apt -y install software-properties-common
add-apt-repository -y ppa:ansible/ansible-2.7
<span class="org-comment-delimiter"># </span><span class="org-comment">install required packages</span>
apt-get -y install --no-install-recommends ansible python-jmespath
<span class="org-comment-delimiter"># </span><span class="org-comment">TODO: run ansible on local host</span>
ansible-playbook yavdr07-headless.yml -b -i <span class="org-string">'localhost_inventory'</span> --connection=local --tags=<span class="org-string">"all"</span>
</pre>
</div>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orge715667" class="outline-2">
<h2 id="orge715667"><span class="section-number-2">4</span> Playbooks</h2>
2019-05-15 19:55:51 +02:00
<div class="outline-text-2" id="text-4">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org3c9584d" class="outline-3">
<h3 id="org3c9584d"><span class="section-number-3">4.1</span> yavdr07.yml</h3>
2019-05-15 19:55:51 +02:00
<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>
<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>
- autoinstall-virtualbox-guest
- 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-pvr350 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 and install required firmware files for dvbsky cards</span>
- autoinstall-firmware <span class="org-comment-delimiter"># </span><span class="org-comment">download and install firmware files for dvb devices</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">- serial-ir # configure a serial port for "homebrew" ir receivers (e.g. Atric V5)</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">- epgd # install vdr-epg-daemon (and vdr-plugin-epg2vdr)</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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orge303152" class="outline-3">
<h3 id="orge303152"><span class="section-number-3">4.2</span> yavdr07-headless.yml</h3>
2019-05-15 19:55:51 +02:00
<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 <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-pvr350 <span class="org-comment-delimiter"># </span><span class="org-comment">install vdr-plugin-pvr350 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-dvbsky-firmware <span class="org-comment-delimiter"># </span><span class="org-comment">download and install required firmware files for dvbsky cards</span>
- autoinstall-firmware <span class="org-comment-delimiter"># </span><span class="org-comment">download and install firmware files for dvb devices</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">- epgd # install vdr-epg-daemon</span>
- 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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org5e9d15c" class="outline-2">
<h2 id="org5e9d15c"><span class="section-number-2">5</span> Hosts</h2>
2019-05-15 19:55:51 +02:00
<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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org4afcc24" class="outline-2">
<h2 id="org4afcc24"><span class="section-number-2">6</span> Group Variables</h2>
2019-05-15 19:55:51 +02:00
<div class="outline-text-2" id="text-6">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org440826a" class="outline-3">
<h3 id="org440826a"><span class="section-number-3">6.1</span> PPAs</h3>
2019-05-15 19:55:51 +02:00
<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-string">'{{ ppa_owner }}/{{branch}}-kodi'</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">- '{{ ppa_owner }}/{{branch}}-yavdr'</span>
</pre>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgd81af4d" class="outline-3">
<h3 id="orgd81af4d"><span class="section-number-3">6.2</span> VDR user, directories, special configuration and plugins</h3>
2019-05-15 19:55:51 +02:00
<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">etc_confdir</span>: /etc/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">copy channels.conf from a local file</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">vdr_channels_conf: /path/to/channels.conf</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">download channels.conf from a given url (supports HTTP(S) and FTP)</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">vdr_channels_conf_url: http://example.com/vdr/channels.conf</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-softhddevice-vpp
<span class="org-comment-delimiter"># </span><span class="org-comment">IP (range) filter for vdr and plugins (this must be an array):</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">vdr_allowed_hosts:</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">- 192.168.0.0/24</span>
<span class="org-comment-delimiter">#</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">hosts and subnets for svdrphosts.conf (overrides vdr_allowed_hosts):</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">vdr_svdrphosts:</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">- 192.168.0.0/24</span>
<span class="org-comment-delimiter">#</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">hosts and subnets for allowed_hosts.conf of xineliboutput (overrides vdr_allowed_hosts):</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">xineliboutput_allowed_hosts:</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">- 192.168.0.0/24</span>
<span class="org-comment-delimiter">#</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">hosts and subnets for allowed_hosts.conf of vnsiserver (overrides vdr_allowed_hosts):</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">vnsiserver_allowed_hosts:</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">- 192.168.0.0/24</span>
<span class="org-comment-delimiter">#</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">hosts and subnets for streamdevhosts.conf (overrides vdr_allowed_hosts):</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">streamdev_server_allowed_hosts:</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">- 192.168.0.0/24</span>
</pre>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org382cfce" class="outline-3">
<h3 id="org382cfce"><span class="section-number-3">6.3</span> Media directories</h3>
2019-05-15 19:55:51 +02:00
<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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgd269aac" class="outline-3">
<h3 id="orgd269aac"><span class="section-number-3">6.4</span> NFS</h3>
2019-05-15 19:55:51 +02:00
<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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgbf93017" class="outline-3">
<h3 id="orgbf93017"><span class="section-number-3">6.5</span> Samba</h3>
2019-05-15 19:55:51 +02:00
<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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org9097273" class="outline-3">
<h3 id="org9097273"><span class="section-number-3">6.6</span> Additional packages</h3>
2019-05-15 19:55:51 +02:00
<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
- t2scan
- plymouth-theme-yavdr-logo
- vdr-addon-lifeguard-ng
- vdrpbd
</pre>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgafa8a0c" class="outline-3">
<h3 id="orgafa8a0c"><span class="section-number-3">6.7</span> System pre-configuration</h3>
2019-05-15 19:55:51 +02:00
<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">vdr shutdown command - SHUTDOWNCMD variable in /etc/default/vdr</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">for standby use "/bin/systemctl suspend"</span>
<span class="org-variable-name">vdr_shutdown_command</span>: poweroff
<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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org24044cc" class="outline-3">
<h3 id="org24044cc"><span class="section-number-3">6.8</span> Serial IR</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-6-8">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment-delimiter"># </span><span class="org-comment">Serial device to configure for a homebrew receiver.</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Choose either ttyS0 (COM1) or ttyS1 (COM2)</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Also ensure that the role serial-ir is enabled in yavdr07.yml </span>
<span class="org-variable-name">serial_ir_device</span>: ttyS0
</pre>
</div>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org7c7928e" class="outline-2">
<h2 id="org7c7928e"><span class="section-number-2">7</span> Roles</h2>
2019-05-15 19:55:51 +02:00
<div class="outline-text-2" id="text-7">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org44a8764" class="outline-3">
<h3 id="org44a8764"><span class="section-number-3">7.1</span> install-dependencies</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-1">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgcff0dd8" class="outline-4">
<h4 id="orgcff0dd8"><span class="section-number-4">7.1.1</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-1-1">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="org7e958f9"></a>main.yml<br />
2019-05-15 19:55:51 +02:00
<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">'{{ packages }}'</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
</pre>
</div>
</div>
</li>
</ol>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgceeaed7" class="outline-3">
<h3 id="orgceeaed7"><span class="section-number-3">7.2</span> nvidia experimental drivers</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-2">
<p>
install nvidia-396 from ppa:graphics-drivers/ppa
</p>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org3845ad9" class="outline-4">
<h4 id="org3845ad9"><span class="section-number-4">7.2.1</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-2-1">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="org7118366"></a>main.yml<br />
2019-05-15 19:55:51 +02:00
<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>:
- nvidia-396
- nvidia-settings
<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">tags</span>:
- packages
</pre>
</div>
</div>
</li>
</ol>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgede981c" class="outline-3">
<h3 id="orgede981c"><span class="section-number-3">7.3</span> yavdr-common</h3>
2019-05-15 19:55:51 +02:00
<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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org2aa7465" class="outline-4">
<h4 id="org2aa7465"><span class="section-number-4">7.3.1</span> default variables</h4>
2019-05-15 19:55:51 +02:00
<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">
2019-05-20 21:36:57 +02:00
<li><a id="org23f8632"></a>Repositories<br />
2019-05-15 19:55:51 +02:00
<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>
2019-05-20 21:36:57 +02:00
<li><a id="org6f3e6f5"></a>Drivers<br />
2019-05-15 19:55:51 +02:00
<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>
2019-05-20 21:36:57 +02:00
<li><a id="orga1114f3"></a>Additional Packages<br />
2019-05-15 19:55:51 +02:00
<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>
2019-05-20 21:36:57 +02:00
<li><a id="orgfc62268"></a>VDR<br />
2019-05-15 19:55:51 +02:00
<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>
<span class="org-variable-name">vdr_allowed_hosts</span>: []
</pre>
</div>
</div>
</li>
</ol>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org727b6ab" class="outline-4">
<h4 id="org727b6ab"><span class="section-number-4">7.3.2</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-3-2">
<p>
yavdr-common executes the following tasks:
</p>
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="org7775790"></a>main.yml<br />
2019-05-15 19:55:51 +02:00
<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">import_tasks</span>: standby_support.yml
<span class="org-variable-name">tags</span>: [install]
</pre>
</div>
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="org681ddcf"></a>Disable default installation of recommended packages<br />
2019-05-15 19:55:51 +02:00
<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>
2019-05-20 21:36:57 +02:00
<li><a id="org482e528"></a>Set up package repositories<br />
2019-05-15 19:55:51 +02:00
<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">no</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>
2019-05-20 21:36:57 +02:00
<li><a id="orgddbd434"></a>Use bash instead of dash<br />
2019-05-15 19:55:51 +02:00
<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>
2019-05-20 21:36:57 +02:00
<li><a id="orgd2bbf6c"></a>create user vdr<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-3-2-1-4">
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="orgbb5fd2b"></a>Disable release-upgrade notifications<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-3-2-1-5">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="orge12af33"></a><span class="todo SOMEDAY">SOMEDAY</span> move from lineinfile to template<br />
2019-05-15 19:55:51 +02:00
<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>
2019-05-20 21:36:57 +02:00
<li><a id="org8c20be3"></a>Install essential packages<br />
2019-05-15 19:55:51 +02:00
<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>:
- 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-jmespath
- python-kmodpy
- python-requests
- python-usb
- python3-usb
- software-properties-common
- ssh
- wget
- wpasupplicant
- usbutils
- xfsprogs
- yavdr-i18n
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">install_recommends</span>: <span class="org-constant">no</span>
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="orgbaf4a69"></a>Install additional packages (user defined)<br />
2019-05-15 19:55:51 +02:00
<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">'{{ extra_packages }}'</span>
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">install_recommends</span>: <span class="org-constant">no</span>
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="org81062e0"></a>create directories<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-3-2-1-8">
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="org8305448"></a>create sudoers drop-in for vdr<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-3-2-1-9">
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="orgecca90d"></a>basic scripts for standby support<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-3-2-1-10">
<p>
Stop vdr before entering suspend and unload dvb modules, reverse this operation on resume
</p>
</div>
</li>
</ol>
</li>
</ol>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgcf6ed6f" class="outline-4">
<h4 id="orgcf6ed6f"><span class="section-number-4">7.3.3</span> templates</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-3-3">
<div class="org-src-container">
<pre class="src src-c"><span class="org-rainbow-delimiters-depth-1">{</span><span class="org-rainbow-delimiters-depth-2">{</span> ansible_managed | comment<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">'c'</span><span class="org-rainbow-delimiters-depth-3">)</span> <span class="org-rainbow-delimiters-depth-2">}</span><span class="org-rainbow-delimiters-depth-1">}</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">
2019-05-20 21:36:57 +02:00
<li><a id="org8671094"></a>yavdr sudoers drop-in<br />
2019-05-15 19:55:51 +02:00
<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"><span class="org-rainbow-delimiters-depth-1">{</span><span class="org-rainbow-delimiters-depth-2">{</span> vdr.user <span class="org-rainbow-delimiters-depth-2">}</span><span class="org-rainbow-delimiters-depth-1">}</span> <span class="org-variable-name">ALL</span>=NOPASSWD: /bin/systemctl --no-block restart vdr.service
<span class="org-rainbow-delimiters-depth-1">{</span><span class="org-rainbow-delimiters-depth-2">{</span> vdr.user <span class="org-rainbow-delimiters-depth-2">}</span><span class="org-rainbow-delimiters-depth-1">}</span> <span class="org-variable-name">ALL</span>=NOPASSWD: /bin/systemctl --no-block reboot
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="orgc2a8c96"></a>suspend hooks<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-3-3-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>
<span class="org-rainbow-delimiters-depth-1">{</span><span class="org-rainbow-delimiters-depth-2">{</span> ansible_managed | comment <span class="org-rainbow-delimiters-depth-2">}</span><span class="org-rainbow-delimiters-depth-1">}</span>
<span class="org-keyword">case</span> $<span class="org-variable-name">1</span><span class="org-keyword"> in</span>
pre)
/bin/systemctl stop vdr
/usr/local/bin/module-helper -u dvb_core
;;
post)
<span class="org-comment-delimiter"># </span><span class="org-comment">reload rc-core keytables</span>
<span class="org-rainbow-delimiters-depth-1">[</span> -x /usr/bin/ir-keytable <span class="org-rainbow-delimiters-depth-1">]</span> &amp;&amp; <span class="org-rainbow-delimiters-depth-1">{</span>
<span class="org-keyword">for</span> remote<span class="org-keyword"> in</span> $<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-sh-quoted-exec">ir-keytable</span> 2&gt;&amp;1 | grep rc/rc | egrep -o <span class="org-string">"rc[0-9]{1,}"</span><span class="org-rainbow-delimiters-depth-2">)</span>
<span class="org-keyword">do</span>
ir-keytable -a /etc/rc_maps.cfg --sysdev $<span class="org-variable-name">remote</span>
<span class="org-keyword">done</span>
<span class="org-rainbow-delimiters-depth-1">}</span>
/usr/local/bin/module-helper -r
/bin/systemctl start vdr
;;
<span class="org-keyword">esac</span>
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="org36fa9c0"></a>module-helper<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-3-3-3">
<div class="org-src-container">
<pre class="src src-python"><span class="org-comment-delimiter">#</span><span class="org-comment">!/usr/bin/env python3</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">{{ ansible_managed | comment }}</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">based on http://www.e-tobi.net/blog/files/module-helper</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">http://www.e-tobi.net/blog/2010/11/06/squeeze-vdr-teil-9-suspend-to-ram</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">ported to python3 by Alexander Grothe</span>
<span class="org-comment-delimiter">#</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">This script resolves linux kernel module dependencies automatically, so only</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">the base module has to be specified (e.g. dvb_core)</span>
<span class="org-keyword">import</span> argparse
<span class="org-keyword">import</span> subprocess
<span class="org-keyword">import</span> pickle
<span class="org-variable-name">dependency_map</span> = <span class="org-rainbow-delimiters-depth-1">{}</span>
<span class="org-keyword">def</span> <span class="org-function-name">find_dependencies</span><span class="org-rainbow-delimiters-depth-1">(</span>module, dependencies=<span class="org-rainbow-delimiters-depth-2">[]</span><span class="org-rainbow-delimiters-depth-1">)</span>:
dependencies.append<span class="org-rainbow-delimiters-depth-1">(</span>module<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">if</span> module <span class="org-keyword">in</span> dependency_map:
<span class="org-keyword">for</span> dependency <span class="org-keyword">in</span> dependency_map<span class="org-rainbow-delimiters-depth-1">[</span>module<span class="org-rainbow-delimiters-depth-1">]</span>:
find_dependencies<span class="org-rainbow-delimiters-depth-1">(</span>dependency, dependencies<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">return</span> dependencies
<span class="org-keyword">def</span> <span class="org-function-name">build_module_dependency_map</span><span class="org-rainbow-delimiters-depth-1">()</span>:
<span class="org-keyword">with</span> subprocess.Popen<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span><span class="org-string">'lsmod'</span><span class="org-rainbow-delimiters-depth-2">]</span>,
stdout=subprocess.PIPE,
universal_newlines=<span class="org-constant">True</span>
<span class="org-rainbow-delimiters-depth-1">)</span> <span class="org-keyword">as</span> p:
<span class="org-keyword">for</span> line <span class="org-keyword">in</span> p.stdout:
<span class="org-variable-name">values</span> = line.split<span class="org-rainbow-delimiters-depth-1">()</span>
<span class="org-keyword">if</span> <span class="org-builtin">len</span><span class="org-rainbow-delimiters-depth-1">(</span>values<span class="org-rainbow-delimiters-depth-1">)</span> &gt; 3:
<span class="org-comment-delimiter">#</span><span class="org-comment">print("module {} depends on {}".format(values[0], values[3]))</span>
dependency_map<span class="org-rainbow-delimiters-depth-1">[</span>values<span class="org-rainbow-delimiters-depth-2">[</span>0<span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">]</span> = values<span class="org-rainbow-delimiters-depth-1">[</span>3<span class="org-rainbow-delimiters-depth-1">]</span>.split<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">','</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">def</span> <span class="org-function-name">run_command_on_module_list</span><span class="org-rainbow-delimiters-depth-1">(</span>command, module_list<span class="org-rainbow-delimiters-depth-1">)</span>:
<span class="org-keyword">for</span> module <span class="org-keyword">in</span> module_list:
<span class="org-variable-name">cmd</span> = <span class="org-rainbow-delimiters-depth-1">[</span>command, module<span class="org-rainbow-delimiters-depth-1">]</span>
subprocess.call<span class="org-rainbow-delimiters-depth-1">(</span>cmd<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">def</span> <span class="org-function-name">create_argparser</span><span class="org-rainbow-delimiters-depth-1">()</span>:
<span class="org-variable-name">parser</span> = argparse.ArgumentParser<span class="org-rainbow-delimiters-depth-1">(</span>description=<span class="org-string">"load or unload modules"</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">group</span> = parser.add_mutually_exclusive_group<span class="org-rainbow-delimiters-depth-1">()</span>
group.add_argument<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'-u'</span>, <span class="org-string">'--unload'</span>, metavar=<span class="org-string">'MODULE'</span>, nargs=<span class="org-string">'+'</span>,
<span class="org-builtin">help</span>=<span class="org-string">'unload modules'</span><span class="org-rainbow-delimiters-depth-1">)</span>
group.add_argument<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'-r'</span>, <span class="org-string">'--reload'</span>, action=<span class="org-string">'store_true'</span>,
<span class="org-builtin">help</span>=<span class="org-string">'reload modules'</span><span class="org-rainbow-delimiters-depth-1">)</span>
parser.add_argument<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'-t'</span>, <span class="org-string">'--temp-file'</span>, nargs=<span class="org-string">'?'</span>,
default=<span class="org-string">'/tmp/modules.list'</span>,
<span class="org-builtin">help</span>=<span class="org-string">'''store names of unloaded modules in a file,</span>
<span class="org-string"> default location is /tmp/modules.list'''</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">return</span> parser
<span class="org-keyword">if</span> <span class="org-builtin">__name__</span> == <span class="org-string">'__main__'</span>:
<span class="org-variable-name">parser</span> = create_argparser<span class="org-rainbow-delimiters-depth-1">()</span>
<span class="org-variable-name">args</span> = parser.parse_args<span class="org-rainbow-delimiters-depth-1">()</span>
<span class="org-keyword">if</span> args.unload:
build_module_dependency_map<span class="org-rainbow-delimiters-depth-1">()</span>
<span class="org-variable-name">all_modules</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>
<span class="org-keyword">for</span> module <span class="org-keyword">in</span> args.unload:
all_modules.extend<span class="org-rainbow-delimiters-depth-1">(</span>find_dependencies<span class="org-rainbow-delimiters-depth-2">(</span>module<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
all_modules.reverse<span class="org-rainbow-delimiters-depth-1">()</span>
<span class="org-keyword">try</span>:
<span class="org-keyword">with</span> <span class="org-builtin">open</span><span class="org-rainbow-delimiters-depth-1">(</span>args.temp_file, <span class="org-string">'wb'</span><span class="org-rainbow-delimiters-depth-1">)</span> <span class="org-keyword">as</span> f:
pickle.dump<span class="org-rainbow-delimiters-depth-1">(</span>all_modules, f<span class="org-rainbow-delimiters-depth-1">)</span>
run_command_on_module_list<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'rmmod'</span>, all_modules<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">except</span> <span class="org-type">Exception</span> <span class="org-keyword">as</span> e:
<span class="org-keyword">print</span><span class="org-rainbow-delimiters-depth-1">(</span>e<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">pass</span>
<span class="org-keyword">elif</span> args.<span class="org-builtin">reload</span>:
<span class="org-keyword">with</span> <span class="org-builtin">open</span><span class="org-rainbow-delimiters-depth-1">(</span>args.temp_file, <span class="org-string">'rb'</span><span class="org-rainbow-delimiters-depth-1">)</span> <span class="org-keyword">as</span> f:
<span class="org-variable-name">all_modules</span> = pickle.load<span class="org-rainbow-delimiters-depth-1">(</span>f<span class="org-rainbow-delimiters-depth-1">)</span>
run_command_on_module_list<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'modprobe'</span>, all_modules<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">else</span>:
parser.print_help<span class="org-rainbow-delimiters-depth-1">()</span>
</pre>
</div>
</div>
</li>
</ol>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org0d0a68a" class="outline-3">
<h3 id="org0d0a68a"><span class="section-number-3">7.4</span> collect facts about the system with custom modules</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-4">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org9e39735" class="outline-4">
<h4 id="org9e39735"><span class="section-number-4">7.4.1</span> variables</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-4-1">
<div class="org-src-container">
<pre class="src src-yaml">
</pre>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org95cfa7c" class="outline-4">
<h4 id="org95cfa7c"><span class="section-number-4">7.4.2</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-4-2">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="org7ec0326"></a>main.yml<br />
2019-05-15 19:55:51 +02:00
<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>: get detailed PCI device information
<span class="org-variable-name">pci_facts</span>:
<span class="org-variable-name">tags</span>:
- always
- <span class="org-variable-name">debug</span>:
<span class="org-variable-name">var</span>: pci_devices
<span class="org-variable-name">verbosity</span>: 1
- <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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org3270034" class="outline-3">
<h3 id="org3270034"><span class="section-number-3">7.5</span> vdr</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-5">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org5cb0359" class="outline-4">
<h4 id="org5cb0359"><span class="section-number-4">7.5.1</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-5-1">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="org6f019b7"></a>install the basic vdr packages<br />
2019-05-15 19:55:51 +02:00
<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>:
- vdr
- vdrctl
- vdr-plugin-dbus2vdr
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">install_recommends</span>: <span class="org-constant">no</span>
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="orgc52621b"></a>Add svdrp/svdrp-disc to /etc/services<br />
2019-05-15 19:55:51 +02:00
<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>
2019-05-20 21:36:57 +02:00
<li><a id="org7b77123"></a>Set up the recording directory for the vdr user<br />
2019-05-15 19:55:51 +02:00
<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>
2019-05-20 21:36:57 +02:00
<li><a id="org3b242fa"></a>Install additional vdr plugins<br />
2019-05-15 19:55:51 +02:00
<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">'{{ vdr_plugins | default([]) }}'</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">notify</span>: [ <span class="org-string">'Restart VDR'</span> ]
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="org39f0bd5"></a>copy vdr configuration files (if they don&rsquo;t exist yet)<br />
2019-05-15 19:55:51 +02:00
<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"</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.etc_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>
- <span class="org-variable-name">name</span>: <span class="org-string">"vdr configuration | copy channels.conf if it doesn't exist yet"</span>
<span class="org-variable-name">copy</span>:
<span class="org-variable-name">src</span>: <span class="org-string">'{{ vdr_channels_conf }}'</span>
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.confdir }}/channels.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">when</span>: vdr_channels_conf is defined
- <span class="org-variable-name">name</span>: <span class="org-string">"vdr configuration | download channels.conf if it doesn't exist yet"</span>
<span class="org-variable-name">get_url</span>:
<span class="org-variable-name">url</span>: <span class="org-string">'{{ vdr_channels_conf_url }}'</span>
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.confdir }}/channels.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">when</span>: vdr_channels_conf is not defined and vdr_channels_conf_url is defined
- <span class="org-variable-name">name</span>: <span class="org-string">"vdr configuration | svdrphosts.conf"</span>
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/svdrphosts.conf.j2
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.etc_confdir }}/svdrphosts.conf'</span>
<span class="org-variable-name">mode</span>: 0644
<span class="org-variable-name">vars</span>:
<span class="org-variable-name">svdrphosts</span>: <span class="org-string">'{{ vdr_svdrphosts | default(vdr_allowed_hosts) }}'</span>
- <span class="org-variable-name">name</span>: <span class="org-string">"vdr configuration | /etc/default/vdr"</span>
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/default_vdr.j2
<span class="org-variable-name">dest</span>: /etc/default/vdr
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="org3e473f6"></a>plugin preconfiguration<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-5-1-6">
<p>
Set up IP resp. IP range based access for VDR plugins
</p>
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="org1949d1b"></a>xineliboutput<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-5-1-6-1">
<div class="org-src-container">
<pre class="src src-yaml">- <span class="org-variable-name">name</span>: ensure directory <span class="org-string">'/etc/vdr/xineliboutput'</span> exists
<span class="org-variable-name">file</span>:
<span class="org-variable-name">state</span>: directory
<span class="org-variable-name">mode</span>: 0775
<span class="org-variable-name">dest</span>: <span class="org-string">'/etc/vdr/plugins/xineliboutput'</span>
- <span class="org-variable-name">name</span>: <span class="org-string">"vdr configuration | allowed_hosts.conf for xineliboutput"</span>
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/generic_allowed_hosts.conf.j2
<span class="org-variable-name">dest</span>: <span class="org-string">'/etc/vdr/plugins/{{ vdr_service }}/allowed_hosts.conf'</span>
<span class="org-variable-name">mode</span>: 0644
<span class="org-variable-name">vars</span>:
<span class="org-variable-name">allowed_hosts</span>: <span class="org-string">'{{ xineliboutput_allowed_hosts | default(vdr_allowed_hosts) }}'</span>
<span class="org-variable-name">vdr_service</span>: xineliboutput
- <span class="org-variable-name">name</span>: <span class="org-string">"vdr configuration | xineliboutput.conf host settings"</span>
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/xineliboutput.conf.j2
<span class="org-variable-name">dest</span>: /etc/vdr/conf.avail/xineliboutput.conf
<span class="org-variable-name">mode</span>: 0644
<span class="org-variable-name">vars</span>:
<span class="org-variable-name">allowed_hosts</span>: <span class="org-string">'{{ xineliboutput_allowed_hosts | default(vdr_allowed_hosts) }}'</span>
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="org1b69b9e"></a>vnsiserver<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-5-1-6-2">
<div class="org-src-container">
<pre class="src src-yaml">- <span class="org-variable-name">name</span>: ensure directory <span class="org-string">'/etc/vdr/plugins/vnsiserver'</span> exists
<span class="org-variable-name">file</span>:
<span class="org-variable-name">state</span>: directory
<span class="org-variable-name">mode</span>: 0775
<span class="org-variable-name">dest</span>: <span class="org-string">'/etc/vdr/plugins/vnsiserver'</span>
- <span class="org-variable-name">name</span>: <span class="org-string">"vdr configuration | allowed_hosts.conf for vnsiserver"</span>
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/generic_allowed_hosts.conf.j2
<span class="org-variable-name">dest</span>: <span class="org-string">'/etc/vdr/plugins/{{ vdr_service }}/allowed_hosts.conf'</span>
<span class="org-variable-name">mode</span>: 0644
<span class="org-variable-name">vars</span>:
<span class="org-variable-name">allowed_hosts</span>: <span class="org-string">'{{ vnsiserver_allowed_hosts | default(vdr_allowed_hosts) }}'</span>
<span class="org-variable-name">vdr_service</span>: vnsiserver
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="org5143241"></a>streamdev-server<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-5-1-6-3">
<div class="org-src-container">
<pre class="src src-yaml">- <span class="org-variable-name">name</span>: ensure directory <span class="org-string">'/etc/vdr/plugins'</span> exists
<span class="org-variable-name">file</span>:
<span class="org-variable-name">state</span>: directory
<span class="org-variable-name">mode</span>: 0775
<span class="org-variable-name">dest</span>: <span class="org-string">'/etc/vdr/plugins/'</span>
- <span class="org-variable-name">name</span>: <span class="org-string">"vdr configuration | streamdevhosts.conf for streamdev-server"</span>
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/generic_allowed_hosts.conf.j2
<span class="org-variable-name">dest</span>: <span class="org-string">'/etc/vdr/plugins/streamdevhosts.conf'</span>
<span class="org-variable-name">mode</span>: 0644
<span class="org-variable-name">vars</span>:
<span class="org-variable-name">allowed_hosts</span>: <span class="org-string">'{{ streamdev_server_allowed_hosts | default(vdr_allowed_hosts) }}'</span>
<span class="org-variable-name">vdr_service</span>: streamdev-server
</pre>
</div>
</div>
</li>
</ol>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="orgde222e2"></a>start vdr after network-online.target<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-5-1-7">
<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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org29794d4" class="outline-4">
<h4 id="org29794d4"><span class="section-number-4">7.5.2</span> templates</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-5-2">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="org7ec851d"></a>Systemd Drop-in to start vdr.service after network-online.target<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-5-2-1">
<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>=network-online.target
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="orgd74a7d1"></a>/etc/default/vdr<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-5-2-2">
<div class="org-src-container">
<pre class="src src-jinja2"><span class="org-type">{{</span> <span class="org-variable-name">ansible_managed </span><span class="org-keyword">| </span><span class="org-warning">comment</span> <span class="org-type">}}</span>
# /etc/default/vdr
#
# See also /usr/share/doc/vdr/README.Debian.gz
#
<span class="org-variable-name">SHUTDOWNCMD</span>="<span class="org-type">{{</span> <span class="org-variable-name">vdr_shutdown_command</span> <span class="org-type">}}</span>"
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="orgfb9880e"></a>svdrphosts.conf<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-5-2-3">
<div class="org-src-container">
<pre class="src src-jinja2"><span class="org-type">{{</span> <span class="org-variable-name">ansible_managed </span><span class="org-keyword">| </span><span class="org-warning">comment</span> <span class="org-type">}}</span>
#
# svdrphosts This file describes a number of host addresses that
# are allowed to connect to the SVDRP port of the Video
# Disk Recorder (VDR) running on this system.
# Syntax:
#
# IP-Address[/Netmask]
#
# Examples:
# 192.168.100.0/24 # any host on the local net
# 204.152.189.113 # a specific host
# 0.0.0.0/0 # any host on any net (USE THIS <span class="org-keyword">WITH</span> CARE!)
127.0.0.1 # always accept localhost
<span class="org-function-name">{%</span> <span class="org-keyword">for</span> host_<span class="org-builtin">or</span>_subnet <span class="org-builtin">in</span> svdrphosts <span class="org-function-name">%}</span>
<span class="org-type">{{</span> <span class="org-variable-name">host_or_subnet</span> <span class="org-type">}}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">endfor</span> <span class="org-function-name">%}</span>
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="org45bde46"></a>allowed_hosts.conf style template<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-5-2-4">
<div class="org-src-container">
<pre class="src src-jinja2"><span class="org-type">{{</span> <span class="org-variable-name">ansible_managed </span><span class="org-keyword">| </span><span class="org-warning">comment</span> <span class="org-type">}}</span>
# This file describes a number of host addresses that
# are allowed to connect to the <span class="org-type">{{</span> <span class="org-variable-name">vdr_service</span> <span class="org-type">}}</span>
# running <span class="org-keyword">with</span> the Video Disk Recorder (VDR) on this system.
#
# Syntax:
#
# IP-Address[/Netmask]
#
# Examples:
#
# 192.168.100.0/24 # any host on the local net
# 204.152.189.113 # a specific host
<span class="org-function-name">{%</span> <span class="org-keyword">if</span> vdr_service == 'streamdev-server' <span class="org-function-name">%}</span>
# 239.255.0.0/16 # uncomment <span class="org-keyword">for</span> IGMP multicast streaming
<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>
# 0.0.0.0/0 # any host on any net (USE THIS <span class="org-keyword">WITH</span> CARE!)
127.0.0.1 # always accept localhost
<span class="org-function-name">{%</span> <span class="org-keyword">for</span> host_<span class="org-builtin">or</span>_subnet <span class="org-builtin">in</span> allowed_hosts <span class="org-function-name">%}</span>
<span class="org-type">{{</span> <span class="org-variable-name">host_or_subnet</span> <span class="org-type">}}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">endfor</span> <span class="org-function-name">%}</span>
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="org2bca8ad"></a>xineliboutput.conf template<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-5-2-5">
<div class="org-src-container">
<pre class="src src-jinja2">#
# Command line parameters <span class="org-keyword">for</span> vdr-plugin-xineliboutput
#
# <span class="org-keyword">For</span> more details see:
# - /usr/share/doc/vdr-plugin-xineliboutput/README.Debian
# - `vdr --help -Pxineliboutput`
# - /usr/share/doc/vdr-plugin-xineliboutput/README
#
[xineliboutput]
--local=<span class="org-builtin">none</span>
--primary
--remote=<span class="org-type">{{</span> <span class="org-variable-name">"" if allowed_hosts else "127.0.0.1"</span> <span class="org-type">}}</span>:37890
--truecolor
</pre>
</div>
</div>
</li>
</ol>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org2a38605" class="outline-4">
<h4 id="org2a38605"><span class="section-number-4">7.5.3</span> files</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-5-3">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="org9a8de50"></a>remote.conf<br />
2019-05-15 19:55:51 +02:00
<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>
2019-05-20 21:36:57 +02:00
<li><a id="org1281008"></a>keymacros.conf<br />
2019-05-15 19:55:51 +02:00
<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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org876775d" class="outline-3">
<h3 id="org876775d"><span class="section-number-3">7.6</span> <span class="todo STARTED">STARTED</span> yavdr-network</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-6">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgecbd11b" class="outline-4">
<h4 id="orgecbd11b"><span class="section-number-4">7.6.1</span> default variables</h4>
2019-05-15 19:55:51 +02:00
<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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org45a8885" class="outline-4">
<h4 id="org45a8885"><span class="section-number-4">7.6.2</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<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>:
- 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-variable-name">state</span>: present
<span class="org-variable-name">install_recommends</span>: <span class="org-constant">no</span>
<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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org1dc1e84" class="outline-3">
<h3 id="org1dc1e84"><span class="section-number-3">7.7</span> vdr-plugin-menuorg</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-7">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org6cc4c57" class="outline-4">
<h4 id="org6cc4c57"><span class="section-number-4">7.7.1</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-7-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-plugin-menuorg/tasks/main.yml</span>
- <span class="org-variable-name">name</span>: apt | install vdr-plugin-menuorg and yavdr-i18n
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>:
- vdr-plugin-menuorg
- yavdr-i18n
<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">name</span>: create /var/lib/vdr/plugins/menuorg.xml
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/menuorg.xml.j2
<span class="org-variable-name">dest</span>: /var/lib/vdr/plugins/menuorg.xml
</pre>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orga6c08e8" class="outline-4">
<h4 id="orga6c08e8"><span class="section-number-4">7.7.2</span> templates</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-7-2">
<div class="org-src-container">
<pre class="src src-jinja2"><span class="org-string">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>
<span class="org-type">{{</span> <span class="org-variable-name">ansible_managed </span><span class="org-keyword">| </span><span class="org-warning">comment</span>('xml') <span class="org-type">}}</span>
<span class="org-comment">&lt;!--</span>
<span class="org-comment">This is the config file for the Menuorg plug-in.</span>
<span class="org-comment">See /usr/share/doc/vdr-plugin-menurg for examples and a full</span>
<span class="org-comment">description of the config file format.</span>
<span class="org-comment">--&gt;</span>
&lt;<span class="org-function-name">menus</span>&gt;
&lt;<span class="org-function-name">system</span> <span class="org-variable-name">name</span>=<span class="org-string">"Schedule"</span> /&gt;
&lt;<span class="org-function-name">system</span> <span class="org-variable-name">name</span>=<span class="org-string">"Channels"</span> /&gt;
&lt;<span class="org-function-name">system</span> <span class="org-variable-name">name</span>=<span class="org-string">"Timers"</span> /&gt;
&lt;<span class="org-function-name">system</span> <span class="org-variable-name">name</span>=<span class="org-string">"Recordings"</span> /&gt;
&lt;<span class="org-function-name">plugin</span> <span class="org-variable-name">name</span>=<span class="org-string">"tvguide"</span> /&gt;
&lt;<span class="org-function-name">command</span> <span class="org-variable-name">name</span>=<span class="org-string">"Kodi"</span> <span class="org-variable-name">execute</span>=<span class="org-string">"frontend-dbus-send switchto kodi"</span> /&gt;
&lt;<span class="org-function-name">plugin</span> <span class="org-variable-name">name</span>=<span class="org-string">"desktop"</span> /&gt;
&lt;<span class="org-function-name">menu</span> <span class="org-variable-name">name</span>=<span class="org-string">"</span><span class="org-type">{{</span><span class="org-string"> </span><span class="org-variable-name">'VDR Plugins' </span><span class="org-keyword">| </span><span class="org-warning">translate</span><span class="org-string"> </span><span class="org-type">}}</span><span class="org-string">"</span>&gt;
&lt;<span class="org-function-name">plugin</span> <span class="org-variable-name">name</span>=<span class="org-string">"epgsearchonly"</span> /&gt;
&lt;<span class="org-function-name">plugin</span> <span class="org-variable-name">name</span>=<span class="org-string">"quickepgsearch"</span> /&gt;
&lt;<span class="org-function-name">plugin</span> <span class="org-variable-name">name</span>=<span class="org-string">"conflictcheckonly"</span> /&gt;
&lt;<span class="org-function-name">plugin</span> <span class="org-variable-name">name</span>=<span class="org-string">"markad"</span> /&gt;
&lt;<span class="org-function-name">plugin</span> <span class="org-variable-name">name</span>=<span class="org-string">"recsearch"</span> /&gt;
&lt;<span class="org-function-name">plugin</span> <span class="org-variable-name">name</span>=<span class="org-string">"undelete"</span> /&gt;
&lt;<span class="org-function-name">plugin</span> <span class="org-variable-name">name</span>=<span class="org-string">"radio"</span> /&gt;
&lt;<span class="org-function-name">plugin</span> <span class="org-variable-name">name</span>=<span class="org-string">"osd2web"</span> /&gt;
&lt;/<span class="org-function-name">menu</span>&gt;
&lt;<span class="org-function-name">menu</span> <span class="org-variable-name">name</span>=<span class="org-string">"</span><span class="org-type">{{</span><span class="org-string"> </span><span class="org-variable-name">'System' </span><span class="org-keyword">| </span><span class="org-warning">translate</span><span class="org-string"> </span><span class="org-type">}}</span><span class="org-string">"</span>&gt;
&lt;<span class="org-function-name">menu</span> <span class="org-variable-name">name</span>=<span class="org-string">"</span><span class="org-type">{{</span><span class="org-string"> </span><span class="org-variable-name">'Commands' </span><span class="org-keyword">| </span><span class="org-warning">translate</span><span class="org-string"> </span><span class="org-type">}}</span><span class="org-string">"</span>&gt;
&lt;<span class="org-function-name">command</span> <span class="org-variable-name">name</span>=<span class="org-string">"</span><span class="org-type">{{</span><span class="org-string"> </span><span class="org-variable-name">"Safely remove usb mass storage" </span><span class="org-keyword">| </span><span class="org-warning">translate</span><span class="org-string"> </span><span class="org-type">}}</span><span class="org-string">"</span> <span class="org-variable-name">confirm</span>=<span class="org-string">"yes"</span> <span class="org-variable-name">execute</span>=<span class="org-string">"/usr/bin/vdr-mounter --unmount-all &amp;amp;&gt; /dev/null"</span> /&gt;
&lt;<span class="org-function-name">command</span> <span class="org-variable-name">name</span>=<span class="org-string">"</span><span class="org-type">{{</span><span class="org-string"> </span><span class="org-variable-name">"Update vdr recordings list" </span><span class="org-keyword">| </span><span class="org-warning">translate</span><span class="org-string"> </span><span class="org-type">}}</span><span class="org-string">"</span> <span class="org-variable-name">execute</span>=<span class="org-string">"/usr/bin/vdr-dbus-send /Recordings recording.Update &amp;amp;&gt; /dev/null "</span> /&gt;
&lt;<span class="org-function-name">command</span> <span class="org-variable-name">name</span>=<span class="org-string">"</span><span class="org-type">{{</span><span class="org-string"> </span><span class="org-variable-name">"Restart VDR" </span><span class="org-keyword">|</span><span class="org-warning">translate</span><span class="org-string"> </span><span class="org-type">}}</span><span class="org-string">"</span> <span class="org-variable-name">confirm</span>=<span class="org-string">"yes"</span> <span class="org-variable-name">execute</span>=<span class="org-string">"sudo /sbin/initctl restart vdr"</span> /&gt;
&lt;<span class="org-function-name">command</span> <span class="org-variable-name">name</span>=<span class="org-string">"</span><span class="org-type">{{</span><span class="org-string"> </span><span class="org-variable-name">"Reboot system"</span><span class="org-keyword">| </span><span class="org-warning">translate</span><span class="org-string"> </span><span class="org-type">}}</span><span class="org-string">"</span> <span class="org-variable-name">confirm</span>=<span class="org-string">"yes"</span> <span class="org-variable-name">execute</span>=<span class="org-string">"/usr/bin/at now -M -f /usr/bin/vdr-reboot"</span> /&gt;
&lt;<span class="org-function-name">command</span> <span class="org-variable-name">name</span>=<span class="org-string">"</span><span class="org-type">{{</span><span class="org-string"> </span><span class="org-variable-name">"Shutdown system" </span><span class="org-keyword">| </span><span class="org-warning">translate</span><span class="org-string"> </span><span class="org-type">}}</span><span class="org-string">"</span> <span class="org-variable-name">execute</span>=<span class="org-string">"/usr/bin/lircd2uinput-send KEY_POWER2 &amp;amp;&gt; /dev/null &amp;amp; "</span> /&gt;
&lt;/<span class="org-function-name">menu</span>&gt;
&lt;<span class="org-function-name">system</span> <span class="org-variable-name">name</span>=<span class="org-string">"Setup"</span> /&gt;
&lt;<span class="org-function-name">plugin</span> <span class="org-variable-name">name</span>=<span class="org-string">"femon"</span> /&gt;
&lt;<span class="org-function-name">plugin</span> <span class="org-variable-name">name</span>=<span class="org-string">"devstatus"</span> /&gt;
&lt;<span class="org-function-name">plugin</span> <span class="org-variable-name">name</span>=<span class="org-string">"epg2vdr"</span> /&gt;
&lt;<span class="org-function-name">plugin</span> <span class="org-variable-name">name</span>=<span class="org-string">"scraper2vdr"</span> /&gt;
&lt;<span class="org-function-name">plugin</span> <span class="org-variable-name">name</span>=<span class="org-string">"sndctl"</span> /&gt;
&lt;<span class="org-function-name">plugin</span> <span class="org-variable-name">name</span>=<span class="org-string">"suspendoutput"</span> /&gt;
&lt;<span class="org-function-name">plugin</span> <span class="org-variable-name">name</span>=<span class="org-string">"recstatus"</span> /&gt;
&lt;<span class="org-function-name">plugin</span> <span class="org-variable-name">name</span>=<span class="org-string">"dynamite"</span> /&gt;
&lt;<span class="org-function-name">plugin</span> <span class="org-variable-name">name</span>=<span class="org-string">"noepgmenu"</span> /&gt;
&lt;<span class="org-function-name">plugin</span> <span class="org-variable-name">name</span>=<span class="org-string">"systeminfo"</span> /&gt;
&lt;<span class="org-function-name">plugin</span> <span class="org-variable-name">name</span>=<span class="org-string">"filebrowser"</span> /&gt;
&lt;<span class="org-function-name">plugin</span> <span class="org-variable-name">name</span>=<span class="org-string">"pin"</span> /&gt;
&lt;<span class="org-function-name">plugin</span> <span class="org-variable-name">name</span>=<span class="org-string">"pulsecontrol"</span> /&gt;
&lt;<span class="org-function-name">plugin</span> <span class="org-variable-name">name</span>=<span class="org-string">"softhddevice"</span> /&gt;
&lt;/<span class="org-function-name">menu</span>&gt;
&lt;<span class="org-function-name">system</span> <span class="org-variable-name">name</span>=<span class="org-string">"Commands"</span> /&gt;
&lt;/<span class="org-function-name">menus</span>&gt;
</pre>
</div>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgf65b519" class="outline-3">
<h3 id="orgf65b519"><span class="section-number-3">7.8</span> nfs-server</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-8">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgeaea511" class="outline-4">
<h4 id="orgeaea511"><span class="section-number-4">7.8.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>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-8-1">
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgb8112a8" class="outline-4">
<h4 id="orgb8112a8"><span class="section-number-4">7.8.2</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<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-variable-name">name</span>: install nfs server packages
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>:
- nfs-kernel-server
- nfs-common
<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">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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgc81f7d8" class="outline-4">
<h4 id="orgc81f7d8"><span class="section-number-4">7.8.3</span> templates</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-8-3">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="org25aea59"></a>/etc/exports<br />
2019-05-15 19:55:51 +02:00
<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">/srv *(rw,fsid</span>=0,sync,no_subtree_check,all_squash,anongid={{ vdr.gid }},anonuid={{ vdr.uid }})
{% for name, path in media_dirs.items() | list %}
<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>
2019-05-20 21:36:57 +02:00
<li><a id="orgb08f694"></a>avahi services<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-8-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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org68b19aa" class="outline-3">
<h3 id="org68b19aa"><span class="section-number-3">7.9</span> yavdr-remote</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-9">
<p>
The role <code>yavdr-remote</code> sets up the foundation for using eventlircd, lircd2uinput and the pre-configuration for remote receivers which can be detected by udev.
</p>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgae0ab06" class="outline-4">
<h4 id="orgae0ab06"><span class="section-number-4">7.9.1</span> default variables</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-9-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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org3e08972" class="outline-4">
<h4 id="org3e08972"><span class="section-number-4">7.9.2</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-9-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>:
- yavdr-remote
- lirc
<span class="org-variable-name">state</span>: present
<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>:
- eventlircd
- lircd2uinput
<span class="org-variable-name">state</span>: present
<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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgbf1dc76" class="outline-4">
<h4 id="orgbf1dc76"><span class="section-number-4">7.9.3</span> templates</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-9-3">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="orgfec34e6"></a>Systemd Drop-in to start vdr with lirc support<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-9-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>
2019-05-20 21:36:57 +02:00
<li><a id="org2167e05"></a>Systemd Drop-in to start lircd2uinput with lircd<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-9-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>
2019-05-20 21:36:57 +02:00
<li><a id="orgbb015ec"></a>create /etc/rc_maps.cfg<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-9-3-3">
<div class="org-src-container">
<pre class="src src-conf">{{ ansible_managed | comment }}
<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>
ite-cir rc-rc6-mce /lib/udev/rc_keymaps/rc-rc6-mce
nuvoton-cir rc-rc6-mce /lib/udev/rc_keymaps/rc-rc6-mce
serial_ir rc-rc6-mce /lib/udev/rc_keymaps/rc-rc6-mce
mceusb rc-rc6-mce /lib/udev/rc_keymaps/HOPLOrc6
<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-mce /lib/udev/rc_keymaps/rc-imon-mce
imon rc-imon-pad /lib/udev/rc_keymaps/rc-imon-pad
<span class="org-comment-delimiter"># </span><span class="org-comment">TT-1500/1501</span>
budget_ci rc-tt-1500 /lib/udev/rc_keymaps/rc-tt-1501
<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
<span class="org-comment-delimiter"># </span><span class="org-comment">other devices (which still mostly need a customized keymap for yaVDR)</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 /lib/udev/rc_keymaps/rc-hauppauge
* rc-imon-mce /lib/udev/rc_keymaps/rc-imon-mce
* rc-imon-pad /lib/udev/rc_keymaps/rc-imon-pad
* 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
<span class="org-comment-delimiter">#</span><span class="org-comment">* rc-medion-x10-digitainer medion_x10_digitainer</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">* rc-medion-x10-or2x medion_x10_or2x</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">* rc-medion-x10 medion_x10</span>
* 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-rc6-mce /lib/udev/rc_keymaps/rc-rc6-mce
* 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 /lib/udev/rc_keymaps/rc-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 # 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>
</pre>
</div>
</div>
</li>
</ol>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org520d860" class="outline-3">
<h3 id="org520d860"><span class="section-number-3">7.10</span> pulseaudio</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-10">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org4e5d5b5" class="outline-4">
<h4 id="org4e5d5b5"><span class="section-number-4">7.10.1</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-10-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>:
- pulseaudio
- pavucontrol
- vdr-plugin-pulsecontrol
<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">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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org7f5b49e" class="outline-4">
<h4 id="org7f5b49e"><span class="section-number-4">7.10.2</span> templates</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-10-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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org60f82bf" class="outline-3">
<h3 id="org60f82bf"><span class="section-number-3">7.11</span> yavdr-xorg</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-11">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org3a7eacd" class="outline-4">
<h4 id="org3a7eacd"><span class="section-number-4">7.11.1</span> About the GUI session</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-11-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 we are using a script <code>write-x11-keyboard-config,</code> which 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 automatically create the configuration file <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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orga99afd7" class="outline-4">
<h4 id="orga99afd7"><span class="section-number-4">7.11.2</span> default variables</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-11-2">
<div class="org-src-container">
<pre class="src src-yaml"><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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org8db6547" class="outline-4">
<h4 id="org8db6547"><span class="section-number-4">7.11.3</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-11-3">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="orgeb98317"></a>main.yml<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-11-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>
2019-05-20 21:36:57 +02:00
<li><a id="org5b81308"></a>setup-xorg.yml<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-11-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>: vdr-config | use vaapi for softhddevice if we got an intel IGP
<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">'-v va-api'</span>
<span class="org-variable-name">state</span>: <span class="org-string">'{{ "present" if (not nvidia_detected and intel_detected) else "absent" }}'</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>:
- 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">state</span>: present
- <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>:
- xserver-xorg-video-intel
- i965-va-driver-shaders
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">when</span>: intel_detected and not nvidia_detected
- <span class="org-variable-name">name</span>: Install yaVDR Media (e.g. Backgrounds)
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: yavdr-media
- <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>:
- xterm
- firefox
- kiosk-browser
<span class="org-variable-name">state</span>: present
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="org70fc81b"></a>detect-xorg.yml<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-11-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>: <span class="org-string">"remove intel snippet"</span>
<span class="org-variable-name">file</span>:
<span class="org-variable-name">path</span>: /etc/X11/xorg.conf.d/20-intel.conf
<span class="org-variable-name">state</span>: absent
- <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>: check if a nvidia driver has been installed
<span class="org-variable-name">set_fact</span>:
<span class="org-variable-name">nvidia_driver_installed</span>: <span class="org-string">'{{ "nvidia" in lookup("file", "/etc/yavdr/autoinstalled") }}'</span>
- <span class="org-variable-name">name</span>: unload nouveau driver, replace with nvidia
<span class="org-variable-name">block</span>:
- <span class="org-variable-name">name</span>: unbind vconsole
<span class="org-variable-name">shell</span>: echo 0 &gt; /sys/class/vtconsole/vtcon1/bind
- <span class="org-variable-name">name</span>: <span class="org-string">"wait a little, so noveau isn't used anymore"</span>
<span class="org-variable-name">wait_for</span>:
<span class="org-variable-name">timeout</span>: 1
<span class="org-comment-delimiter"># </span><span class="org-comment">unloading the drivers using the modprobe module does not work for some strange reason...</span>
- <span class="org-variable-name">name</span>: unload kms drivers
<span class="org-variable-name">rmmod</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ item }}'</span>
<span class="org-variable-name">loop</span>:
- nouveau
- ttm
- drm_kms_helper
- drm
- <span class="org-variable-name">name</span>: load nvidia driver
<span class="org-variable-name">modprobe</span>:
<span class="org-variable-name">name</span>: <span class="org-string">"nvidia"</span>
<span class="org-variable-name">state</span>: present
- <span class="org-variable-name">name</span>: <span class="org-string">"wait a little before starting nvidia-persistenced"</span>
<span class="org-variable-name">wait_for</span>:
<span class="org-variable-name">timeout</span>: 1
- <span class="org-variable-name">name</span>: start nvidia-persistenced
<span class="org-variable-name">systemd</span>:
<span class="org-variable-name">name</span>: <span class="org-string">"nvidia-persistenced"</span>
<span class="org-variable-name">state</span>: started
<span class="org-variable-name">enabled</span>: <span class="org-constant">true</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">when</span>:
- nvidia_detected
- nvidia_driver_installed
- <span class="org-string">'"nouveau" in modules'</span>
- <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, so X has some time to start up"</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">debug</span>:
<span class="org-variable-name">var</span>: drm
<span class="org-variable-name">when</span>: drm 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-comment-delimiter">#</span><span class="org-comment">- name: "wait a little bit, so X has some time to shut down (needed?)"</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">wait_for:</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">timeout: 3</span>
- <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">name</span>: write drm variable as local fact
<span class="org-variable-name">copy</span>:
<span class="org-variable-name">content</span>: <span class="org-string">'{{ {"drm": drm} | to_nice_json }}'</span>
<span class="org-variable-name">dest</span>: /etc/ansible/facts.d/drm.fact
<span class="org-variable-name">when</span>:
- xrandr is defined
- xorg is defined
- drm is defined
- <span class="org-variable-name">name</span>: update xorg, xrandr and drm variables 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.xorg }}'</span>
<span class="org-variable-name">xrandr</span>: <span class="org-string">'{{ ansible_local.xrandr.xrandr }}'</span>
<span class="org-variable-name">drm</span>: <span class="org-string">'{{ ansible_local.drm.drm }}'</span>
<span class="org-variable-name">when</span>:
- xrandr is undefined
- xorg is undefined
- drm 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
- <span class="org-variable-name">name</span>: intel xorg config snippet
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/20-intel.conf.j2
<span class="org-variable-name">dest</span>: /etc/X11/xorg.conf.d/20-intel.conf
<span class="org-variable-name">when</span>:
- intel_detected and not nvidia_detected
- <span class="org-variable-name">name</span>: server flags config snippet to disable screen blanking
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/10-serverflags.conf.j2
<span class="org-variable-name">dest</span>: /etc/X11/xorg.conf.d/10-serverflags.conf
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="orgdc7056d"></a>intel.yml<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-11-3-4">
<p>
KMS drivers (like for intel (i915) and amd (radeon)) require additional configuration besides a customized <code>xorg.conf</code> - for a &bdquo;static&ldquo; output configuration (which works if the TV or AV receiver is not turned on) we need to force loading the display(s) EDID early during the boot process.
</p>
<p>
This task therefore performs the following actions after the xrandr detection has been executed:
</p>
<ul class="org-ul">
<li>create an initramfs-hook to copy the EDID(s) into the initramfs</li>
<li>get the connector names and match them to the ones determined by xrandr (this is done by xrandr_facts.py)</li>
<li>add kernel boot arguments to set EDID and mode (refreshrate and resolution) for all outputs</li>
<li>recreate and update initramfs and grub config</li>
</ul>
<p>
Please note that rescanning the connected displays works only after removing the forced loading of EDID(s) during boot (call <code>clean-edids</code>) and a reboot.
</p>
<div class="org-src-container">
<label class="org-src-name"><span class="listing-number">Programmlisting 1 </span>roles/yavdr-xorg/tasks/intel.yml</label><pre class="src src-yaml">- <span class="org-variable-name">name</span>: <span class="org-string">"create initramfs hook to copy EDID files"</span>
<span class="org-variable-name">copy</span>:
<span class="org-variable-name">src</span>: files/include-edid-data.sh
<span class="org-variable-name">dest</span>: <span class="org-string">'/etc/initramfs-tools/hooks/include-edid-data'</span>
<span class="org-variable-name">mode</span>: 0755
<span class="org-variable-name">force</span>: <span class="org-constant">yes</span>
- <span class="org-variable-name">name</span>: <span class="org-string">"create /lib/firmware/edid"</span>
<span class="org-variable-name">file</span>:
<span class="org-variable-name">state</span>: directory
<span class="org-variable-name">dest</span>: /lib/firmware/edid
<span class="org-comment-delimiter"># </span><span class="org-comment">TODO:</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">- write EDID files to /lib/firmware/edid/</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">- complete template for grub.d</span>
<span class="org-variable-name">name</span>: <span class="org-string">"add kernel boot parameters for static display configuration"</span>
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/grub.d/intel.j2
<span class="org-variable-name">dest</span>: /etc/grub.d/99_intel
<span class="org-variable-name">mode</span>: 0755
<span class="org-variable-name">notify</span>: [<span class="org-string">'Update Initramfs'</span>, <span class="org-string">'Update GRUB'</span>]
</pre>
</div>
</div>
</li>
</ol>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orga4e71f2" class="outline-4">
<h4 id="orga4e71f2"><span class="section-number-4">7.11.4</span> templates</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-11-4">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="orgf6a806c"></a>grub<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-11-4-1">
<div class="org-src-container">
<pre class="src src-conf">{{ ansible_managed | comment }}
<span class="org-variable-name">{% set output_flag</span> = <span class="org-string">'D'</span> if (<span class="org-string">"HDMI"</span> in xorg.primary.connector or <span class="org-string">"DVI"</span> in xorg.primary.connector or <span class="org-string">"DP"</span> in xorg.primary.connector) else <span class="org-string">'e'</span> %}
<span class="org-variable-name">GRUB_CMDLINE_LINUX+</span>=<span class="org-string">" video={{ drm.primary.drm_connector }}:{{ xorg.primary.mode|replace('_', '@') }}{{ output_flag }} drm.edid_firmware={{ drm.primary.drm_connector }}:edid/{{ drm.primary.edid }} {% for ignored_c in drm.ignored_outputs %}video={{ ignored_c }}:d{% endfor %}"</span>
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="org188f317"></a>xorg<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-11-4-2">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="org5211dbf"></a>x-verbose@.service<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-11-4-2-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>
2019-05-20 21:36:57 +02:00
<li><a id="org1feda05"></a>Drop-in snippet for x@.service<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-11-4-2-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>
2019-05-20 21:36:57 +02:00
<li><a id="org2a147bd"></a>Drop-in snippet for vdr.service<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-11-4-2-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>
2019-05-20 21:36:57 +02:00
<li><a id="orgaef7db2"></a>xorg.conf snippets<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-11-4-2-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>
2019-05-20 21:36:57 +02:00
<li><a id="orgad4bf6c"></a>intel graphics xorg.conf snippet<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-11-4-2-5">
<div class="org-src-container">
<pre class="src src-jinja2"><span class="org-type">{{</span> <span class="org-variable-name">ansible_managed </span><span class="org-keyword">| </span><span class="org-warning">comment</span> <span class="org-type">}}</span>
<span class="org-function-name">{%</span> <span class="org-builtin">set</span> primary_output = xorg.primary.connector<span class="org-keyword">|</span><span class="org-function-name">replace</span>(<span class="org-string">"-"</span>, <span class="org-string">""</span>) <span class="org-function-name">%}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">if</span> xorg.secondary <span class="org-builtin">is</span> defined <span class="org-function-name">%}</span>
<span class="org-function-name">{%</span> <span class="org-builtin">set</span> secondary_output = xorg.secondary.connector<span class="org-keyword">|</span><span class="org-function-name">replace</span>(<span class="org-string">"-"</span>, <span class="org-string">""</span>) <span class="org-function-name">%}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>
Section "Device"
Identifier "Device0"
Driver "intel"
Option "TearFree" "<span class="org-builtin">true</span>"
<span class="org-function-name">{%</span> <span class="org-keyword">if</span> xorg.secondary <span class="org-builtin">is</span> defined <span class="org-function-name">%}</span>
Option "ZaphodHeads" "<span class="org-type">{{</span> <span class="org-variable-name">primary_output</span> <span class="org-type">}}</span>"
Screen 0
<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>
EndSection
<span class="org-function-name">{%</span> <span class="org-keyword">if</span> xorg.secondary <span class="org-builtin">is</span> defined <span class="org-function-name">%}</span>
Section "Device"
Identifier "Device1"
Driver "intel"
Option "TearFree" "<span class="org-builtin">true</span>"
Option "ZaphodHeads" "<span class="org-type">{{</span> <span class="org-variable-name">secondary_output</span> <span class="org-type">}}</span>"
Screen 1
EndSection
Section "ServerLayout"
Identifier "Layout0"
Screen 0 "Screen0" 0 0
Screen 1 "Screen1" RightOf "Screen0"
EndSection
<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>
Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "<span class="org-type">{{</span> <span class="org-variable-name">primary_output</span> <span class="org-type">}}</span>"
DefaultDepth 24
SubSection "Display"
Depth 24
<span class="org-function-name">{%</span> <span class="org-keyword">if</span> xorg.primary.mode <span class="org-function-name">%}</span>
Modes "<span class="org-type">{{</span> <span class="org-variable-name">xorg.primary.mode</span> <span class="org-type">}}</span>"
<span class="org-function-name">{%</span> <span class="org-keyword">else</span> <span class="org-function-name">%}</span>
Modes "1920x1080_50" "1920x1080_60" "1920x1080_24"
<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>
EndSubSection
EndSection
<span class="org-function-name">{%</span> <span class="org-keyword">if</span> xorg.secondary <span class="org-builtin">is</span> defined <span class="org-function-name">%}</span>
Section "Screen"
Identifier "Screen1"
Device "Device1"
Monitor "<span class="org-type">{{</span> <span class="org-variable-name">secondary_output</span> <span class="org-type">}}</span>"
DefaultDepth 24
SubSection "Display"
Depth 24
<span class="org-function-name">{%</span> <span class="org-keyword">if</span> xorg.secondary.mode <span class="org-function-name">%}</span>
Modes "<span class="org-type">{{</span> <span class="org-variable-name">xorg.secondary.mode</span> <span class="org-type">}}</span>"
<span class="org-function-name">{%</span> <span class="org-keyword">else</span> <span class="org-function-name">%}</span>
Modes "1920x1080_50" "1920x1080_60" "1920x1080_24"
<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>
EndSubSection
EndSection
<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>
Section "Monitor"
Identifier "<span class="org-type">{{</span> <span class="org-variable-name">primary_output</span> <span class="org-type">}}</span>"
<span class="org-function-name">{%</span> <span class="org-keyword">if</span> xorg.primary.modelines <span class="org-function-name">%}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">for</span> modeline <span class="org-builtin">in</span> xorg.primary.modelines <span class="org-function-name">%}</span>
<span class="org-type">{{</span> <span class="org-variable-name">modeline</span> <span class="org-type">}}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">endfor</span> <span class="org-function-name">%}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">else</span> <span class="org-function-name">%}</span>
Modeline "1920x1080_24" 74.230 1920 2560 2604 2752 1080 1084 1089 1125 +hsync +vsync
Modeline "1920x1080_50" 148.500 1920 2448 2492 2640 1080 1084 1089 1125 +hsync +vsync
Modeline "1920x1080_60" 148.500 1920 2008 2056 2200 1080 1084 1089 1125 +hsync +vsync
<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>
EndSection
<span class="org-function-name">{%</span> <span class="org-keyword">if</span> xorg.secondary <span class="org-builtin">is</span> defined <span class="org-function-name">%}</span>
Section "Monitor"
Identifier "<span class="org-type">{{</span> <span class="org-variable-name">secondary_output</span> <span class="org-type">}}</span>"
<span class="org-function-name">{%</span> <span class="org-keyword">if</span> xorg.secondary.modelines <span class="org-function-name">%}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">for</span> modeline <span class="org-builtin">in</span> xorg.secondary.modelines <span class="org-function-name">%}</span>
<span class="org-type">{{</span> <span class="org-variable-name">modeline</span> <span class="org-type">}}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">endfor</span> <span class="org-function-name">%}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">else</span> <span class="org-function-name">%}</span>
Modeline "1920x1080_24" 74.230 1920 2560 2604 2752 1080 1084 1089 1125 +hsync +vsync
Modeline "1920x1080_50" 148.500 1920 2448 2492 2640 1080 1084 1089 1125 +hsync +vsync
Modeline "1920x1080_60" 148.500 1920 2008 2056 2200 1080 1084 1089 1125 +hsync +vsync
<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>
EndSection
<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">for</span> connector, data <span class="org-builtin">in</span> xrandr[<span class="org-string">"Screen 0:"</span>].items() <span class="org-keyword">| </span><span class="org-function-name">list</span> <span class="org-function-name">%}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">if</span> <span class="org-builtin">not</span> data.<span class="org-builtin">is</span>_connected <span class="org-builtin">or</span> connector != xorg.primary.connector <span class="org-builtin">or</span> (xorg.secondary <span class="org-builtin">is</span> defined <span class="org-builtin">and</span> connector != xorg.secondary.connector) <span class="org-function-name">%}</span>
Section "Monitor"
Identifier "<span class="org-type">{{</span> <span class="org-variable-name">connector</span><span class="org-keyword">|</span><span class="org-function-name">replace</span>(<span class="org-string">"-"</span>,<span class="org-string">""</span>) <span class="org-type">}}</span>"
Option "<span class="org-builtin">Ignore</span>" "<span class="org-builtin">true</span>"
EndSection
<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">endfor</span> <span class="org-function-name">%}</span>
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="org38bb07f"></a>xorg.conf<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-11-4-2-6">
<div class="org-src-container">
<pre class="src src-conf">{{ ansible_managed | comment }}
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"><span class="org-rainbow-delimiters-depth-1">{</span><span class="org-rainbow-delimiters-depth-2">{</span> ansible_managed | comment <span class="org-rainbow-delimiters-depth-2">}</span><span class="org-rainbow-delimiters-depth-1">}</span>
Section <span class="org-string">"ServerLayout"</span>
Identifier <span class="org-string">"Layout0"</span>
Screen 0 <span class="org-string">"Screen0"</span>
<span class="org-rainbow-delimiters-depth-1">{</span>% if xorg.best_tv_mode.secondary is defined %<span class="org-rainbow-delimiters-depth-1">}</span>
Screen 1 <span class="org-string">"Screen1"</span> RightOf <span class="org-string">"Screen0"</span>
<span class="org-rainbow-delimiters-depth-1">{</span>% endif %<span class="org-rainbow-delimiters-depth-1">}</span>
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>
<span class="org-rainbow-delimiters-depth-1">{</span># TODO: VGA2SCART support <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">if</span> needed<span class="org-rainbow-delimiters-depth-2">)</span>
<span class="org-rainbow-delimiters-depth-2">{</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> %<span class="org-rainbow-delimiters-depth-2">}</span>
HorizSync 14-17
VertRefresh 49-61
<span class="org-rainbow-delimiters-depth-2">{</span>% if system.x11.display.0.default == <span class="org-string">"VGA2Scart_4_3"</span> %<span class="org-rainbow-delimiters-depth-2">}</span>
Modeline <span class="org-string">"VGA2Scart_4_3"</span> 13.875 720 744 808 888 576 580 585 625 -HSync -Vsync interlace
<span class="org-rainbow-delimiters-depth-2">{</span>% elif system.x11.display.0.default == <span class="org-string">"VGA2Scart_16_9"</span> %<span class="org-rainbow-delimiters-depth-2">}</span>
Modeline <span class="org-string">"VGA2Scart_16_9"</span> 19 1024 1032 1120 1216 576 581 586 625 -Hsync -Vsync interlace
<span class="org-rainbow-delimiters-depth-2">{</span>% endif %<span class="org-rainbow-delimiters-depth-2">}</span>
<span class="org-rainbow-delimiters-depth-2">{</span>% endif %<span class="org-rainbow-delimiters-depth-2">}</span>
<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
<span class="org-rainbow-delimiters-depth-2">{</span>% if xrandr.best_tv_mode.secondary is defined %<span class="org-rainbow-delimiters-depth-2">}</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>
<span class="org-rainbow-delimiters-depth-2">{</span>#
<span class="org-rainbow-delimiters-depth-3">{</span>% if system.x11.display.1.default<span class="org-keyword"> in</span> <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"VGA2Scart_4_3"</span>, <span class="org-string">"VGA2Scart_16_9"</span><span class="org-rainbow-delimiters-depth-4">)</span> %<span class="org-rainbow-delimiters-depth-3">}</span>
HorizSync 14-17
VertRefresh 49-61
<span class="org-rainbow-delimiters-depth-3">{</span>% if system.x11.display.1.default == <span class="org-string">"VGA2Scart_4_3"</span> %<span class="org-rainbow-delimiters-depth-3">}</span>
Modeline <span class="org-string">"VGA2Scart_4_3"</span> 13.875 720 744 808 888 576 580 585 625 -HSync -Vsync interlace
<span class="org-rainbow-delimiters-depth-3">{</span>% elif system.x11.display.1.default == <span class="org-string">"VGA2Scart_16_9"</span> %<span class="org-rainbow-delimiters-depth-3">}</span>
Modeline <span class="org-string">"VGA2Scart_16_9"</span> 19 1024 1032 1120 1216 576 581 586 625 -Hsync -Vsync interlace
<span class="org-rainbow-delimiters-depth-3">{</span>% endif %<span class="org-rainbow-delimiters-depth-3">}</span>
Option <span class="org-string">"DPMS"</span>
Option <span class="org-string">"ExactModeTimingsDVI"</span> <span class="org-string">"True"</span>
<span class="org-rainbow-delimiters-depth-3">{</span>% endif %<span class="org-rainbow-delimiters-depth-3">}</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">}</span>
EndSection
<span class="org-rainbow-delimiters-depth-3">{</span>% endif %<span class="org-rainbow-delimiters-depth-3">}</span>
Section <span class="org-string">"Device"</span>
Identifier <span class="org-string">"Device0"</span>
<span class="org-rainbow-delimiters-depth-3">{</span>% if system.hardware.nvidia.detected %<span class="org-rainbow-delimiters-depth-3">}</span>
Driver <span class="org-string">"nvidia"</span>
VendorName <span class="org-string">"NVIDIA Corporation"</span>
<span class="org-rainbow-delimiters-depth-3">{</span>% endif %<span class="org-rainbow-delimiters-depth-3">}</span>
Screen 0
Option <span class="org-string">"DPI"</span> <span class="org-string">"100x100"</span>
<span class="org-rainbow-delimiters-depth-3">{</span>% if system.hardware.nvidia.busid is defined and system.hardware.busid %<span class="org-rainbow-delimiters-depth-3">}</span>
BusID <span class="org-string">"PCI: {{ system.hardware.nvidia.busid }}"</span>
<span class="org-rainbow-delimiters-depth-3">{</span>% endif %<span class="org-rainbow-delimiters-depth-3">}</span>
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
<span class="org-rainbow-delimiters-depth-3">{</span>% if xrandr.best_tv_mode.secondary is defined %<span class="org-rainbow-delimiters-depth-3">}</span>
Section <span class="org-string">"Device"</span>
Identifier <span class="org-string">"Device1"</span>
<span class="org-rainbow-delimiters-depth-3">{</span>% if system.hardware.nvidia.detected %<span class="org-rainbow-delimiters-depth-3">}</span>
Driver <span class="org-string">"nvidia"</span>
VendorName <span class="org-string">"NVIDIA Corporation"</span>
<span class="org-rainbow-delimiters-depth-3">{</span>% endif %<span class="org-rainbow-delimiters-depth-3">}</span>
Screen 1
<span class="org-rainbow-delimiters-depth-3">{</span>% if system.hardware.nvidia.busid is defined and system.hardware.nvidia.busid %<span class="org-rainbow-delimiters-depth-3">}</span>
BusID <span class="org-string">"PCI: {{ system.hardware.nvidia.busid }}"</span>
<span class="org-rainbow-delimiters-depth-3">{</span>% endif %<span class="org-rainbow-delimiters-depth-3">}</span>
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
<span class="org-rainbow-delimiters-depth-3">{</span>% endif %<span class="org-rainbow-delimiters-depth-3">}</span>
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
<span class="org-rainbow-delimiters-depth-3">{</span>% if xrandr.best_tv_mode.primary is defined %<span class="org-rainbow-delimiters-depth-3">}</span>
Modes <span class="org-string">"{{ xrandr.best_tv_mode.primary.mode }}"</span><span class="org-rainbow-delimiters-depth-3">{</span>#<span class="org-rainbow-delimiters-depth-4">{</span>% for mode<span class="org-keyword"> in</span> xrandr %<span class="org-rainbow-delimiters-depth-4">}{</span>% if mode != system.x11.display.0.default %<span class="org-rainbow-delimiters-depth-4">}</span> <span class="org-string">"{{ mode }}"</span><span class="org-rainbow-delimiters-depth-4">{</span>% endif %<span class="org-rainbow-delimiters-depth-4">}{</span>% endfor %<span class="org-rainbow-delimiters-depth-4">}</span>#<span class="org-rainbow-delimiters-depth-3">}</span> nvidia-auto-select
<span class="org-rainbow-delimiters-depth-3">{</span>% elif system.hardware.nvidia.detected == 1 %<span class="org-rainbow-delimiters-depth-3">}</span>
Modes <span class="org-string">"nvidia-auto-select"</span>
<span class="org-rainbow-delimiters-depth-3">{</span>% endif %<span class="org-rainbow-delimiters-depth-3">}</span>
EndSubSection
<span class="org-rainbow-delimiters-depth-3">{</span>% if system.x11.display.0.default or system.x11.default %<span class="org-rainbow-delimiters-depth-3">}</span>
<span class="org-rainbow-delimiters-depth-3">{</span>% if system.x11.display.0.device is definded and system.x11.display.0.device %<span class="org-rainbow-delimiters-depth-3">}</span>
Option <span class="org-string">"ConnectedMonitor"</span> <span class="org-rainbow-delimiters-depth-3">{</span><span class="org-rainbow-delimiters-depth-4">{</span> system.x11.display.0.device <span class="org-rainbow-delimiters-depth-4">}</span><span class="org-rainbow-delimiters-depth-3">}</span>
<span class="org-rainbow-delimiters-depth-3">{</span>% else %<span class="org-rainbow-delimiters-depth-3">}</span>
Option <span class="org-string">"ConnectedMonitor"</span> <span class="org-rainbow-delimiters-depth-3">{</span><span class="org-rainbow-delimiters-depth-4">{</span> system.x11.default <span class="org-rainbow-delimiters-depth-4">}</span><span class="org-rainbow-delimiters-depth-3">}</span>
<span class="org-rainbow-delimiters-depth-3">{</span>% endif %<span class="org-rainbow-delimiters-depth-3">}</span>
<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>
<span class="org-rainbow-delimiters-depth-3">{</span>% endif %<span class="org-rainbow-delimiters-depth-3">}</span>
EndSection
<span class="org-rainbow-delimiters-depth-3">{</span>% if system.x11.dualhead.enabled == <span class="org-string">"1"</span> %<span class="org-rainbow-delimiters-depth-3">}</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
<span class="org-rainbow-delimiters-depth-3">{</span>% if system.x11.display.0.default is defined and system.x11.display.0.default %<span class="org-rainbow-delimiters-depth-3">}</span>
Modes <span class="org-string">"{{ system.x11.display.1.default }}"</span><span class="org-rainbow-delimiters-depth-3">{</span>% for mode<span class="org-keyword"> in</span> system.x11.display.1.mode %<span class="org-rainbow-delimiters-depth-3">}{</span>% if mode != system.x11.display.1.default %<span class="org-rainbow-delimiters-depth-3">}</span> <span class="org-string">"{{ mode }}"</span><span class="org-rainbow-delimiters-depth-3">{</span>% endif %<span class="org-rainbow-delimiters-depth-3">}{</span>% endfor %<span class="org-rainbow-delimiters-depth-3">}</span>
<span class="org-rainbow-delimiters-depth-3">{</span>% elif system.hardware.nvidia.detected == <span class="org-string">"1"</span> %<span class="org-rainbow-delimiters-depth-3">}</span>
Modes <span class="org-string">"nvidia-auto-select"</span>
<span class="org-rainbow-delimiters-depth-3">{</span>% endif %<span class="org-rainbow-delimiters-depth-3">}</span>
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
<span class="org-rainbow-delimiters-depth-3">{</span>% endif %<span class="org-rainbow-delimiters-depth-3">}</span>
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="orgec37830"></a>snippet to disable screen blanking<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-11-4-2-7">
<div class="org-src-container">
<pre class="src src-conf">{{ ansible_managed | comment }}
Section <span class="org-string">"ServerFlags"</span>
Option <span class="org-string">"NoPM"</span> <span class="org-string">"true"</span>
Option <span class="org-string">"blank time"</span> <span class="org-string">"0"</span>
Option <span class="org-string">"standby time"</span> <span class="org-string">"0"</span>
Option <span class="org-string">"suspend time"</span> <span class="org-string">"0"</span>
Option <span class="org-string">"off time"</span> <span class="org-string">"0"</span>
EndSection
</pre>
</div>
</div>
</li>
</ol>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="org0ca5116"></a>vdr<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-11-4-3">
<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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org0adc843" class="outline-4">
<h4 id="org0adc843"><span class="section-number-4">7.11.5</span> files</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-11-5">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="org8929e05"></a>initramfs EDID hook<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-11-5-1">
<div class="org-src-container">
<pre class="src src-jinja2">#!/bin/bash
<span class="org-type">{{</span> <span class="org-variable-name">ansible_managed </span><span class="org-keyword">| </span><span class="org-warning">comment</span> <span class="org-type">}}</span>
# This hook copies EDID files <span class="org-keyword">with</span> the naming scheme "edid.${OUTPUT}.bin" to the initramfs.
[ <span class="org-string">"$1"</span> = <span class="org-string">"prereqs"</span> ] &amp;&amp; { echo <span class="org-string">"udev"</span>; exit 0; }
# <span class="org-builtin">load</span> hook helper functions
. /usr/share/initramfs-tools/hook-functions
rm /lib/firmware/edid/edid.*.bin
find "/etc/X11/" -name "edid.*.bin" -type f -exec cp -t "/lib/firmware/edid/" {} +
mkdir -p "${DESTDIR}/lib/firmware/edid"
find "/etc/X11/" -name "edid.*.bin" -type f -exec cp -t "${DESTDIR}/lib/firmware/edid/" {} +
manual_add_modules i915 radeon
exit 0
</pre>
</div>
</div>
</li>
</ol>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org610df5f" class="outline-3">
<h3 id="org610df5f"><span class="section-number-3">7.12</span> yavdr-desktop</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-12">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org0f510d1" class="outline-4">
<h4 id="org0f510d1"><span class="section-number-4">7.12.1</span> Tasks</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-12-1">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="orgb56c533"></a>main.yml<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-12-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-string">'{{ vdr.home }}/bin'</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>: expand rc2.xml for openbox on second display
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: <span class="org-string">'templates/openbox/rc2.xml.j2'</span>
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.home }}/.config/openbox/rc2.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 detect-second-diplay script
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/bin/detect-second-display.j2
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.home }}/bin/detect-second-display'</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>: create switch-displays script
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/bin/switch-displays.j2
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.home }}/bin/switch-displays'</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>: 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">force</span>: <span class="org-constant">no</span>
- <span class="org-variable-name">name</span>: set up udiskie
<span class="org-variable-name">include_tasks</span>: udiskie.yml
- <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>
2019-05-20 21:36:57 +02:00
<li><a id="orgc8f59e4"></a>udiskie.yml<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-12-1-2">
<div class="org-src-container">
<pre class="src src-yaml">- <span class="org-variable-name">name</span>: install udiskie
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>:
- udiskie
- <span class="org-variable-name">name</span>: create ~/.config/udiskie
<span class="org-variable-name">file</span>:
<span class="org-variable-name">name</span>: <span class="org-string">'{{ vdr.home }}/.config/udiskie'</span>
2019-05-20 21:36:57 +02:00
<span class="org-variable-name">state</span>: directory
2019-05-15 19:55:51 +02:00
- <span class="org-variable-name">name</span>: expand template for udiskie's config.yml
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/udiskie/config.yml.j2
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.home }}/.config/udiskie/config.yml'</span>
- <span class="org-variable-name">name</span>: expand template for mount helper script
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/udiskie/udiskie_vdr_mount_helper.j2
<span class="org-variable-name">dest</span>: <span class="org-string">'{{ vdr.home }}/bin/udiskie_vdr_mount_helper'</span>
<span class="org-variable-name">mode</span>: 0755
<span class="org-variable-name">owner</span>: vdr
<span class="org-variable-name">group</span>: vdr
- <span class="org-variable-name">name</span>: expand template for udiskie vdr commands
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/udiskie/umount_all.j2
<span class="org-variable-name">dest</span>: /usr/share/vdr/command-hooks/commands.udiskie.conf
</pre>
</div>
</div>
</li>
</ol>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org188914b" class="outline-4">
<h4 id="org188914b"><span class="section-number-4">7.12.2</span> Templates</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-12-2">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="orgaf1c068"></a>xorg configuration<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-12-2-1">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="orgd94efb9"></a>.Xresources<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-12-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>
2019-05-20 21:36:57 +02:00
<li><a id="org72d2c8d"></a>.xinitrc<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-12-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>
<span class="org-rainbow-delimiters-depth-1">{</span><span class="org-rainbow-delimiters-depth-2">{</span> ansible_managed | comment <span class="org-rainbow-delimiters-depth-2">}</span><span class="org-rainbow-delimiters-depth-1">}</span>
<span class="org-keyword">exec</span> openbox-session
</pre>
</div>
</div>
</li>
</ol>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="org45d340a"></a>openbox<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-12-2-2">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="orgdd1a469"></a>autostart<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-12-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-rainbow-delimiters-depth-1">(</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-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">disabled_services</span>=<span class="org-rainbow-delimiters-depth-1">()</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> which 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
udiskie &amp;
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="org1aa5e3c"></a>rc.xml<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-12-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 yavdr-frontend </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-a"</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">frontend-dbus-send start</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-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"</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">frontend-dbus-send stop</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-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-x"</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">frontend-dbus-send switchbetween kodi vdr</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-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">"XF86HomePage"</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">frontend-dbus-send toggle</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 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">"softhdcuvid"</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>
2019-05-20 21:36:57 +02:00
<li><a id="org6ad7116"></a>rc2.xml<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-12-2-2-3">
<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">no</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">"softhdcuvid"</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>
2019-05-20 21:36:57 +02:00
<li><a id="orgec6eade"></a>udiskie<br />
2019-05-15 19:55:51 +02:00
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="org8821bc6"></a>config.yml<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-12-2-3-1">
<div class="org-src-container">
<pre class="src src-shell"><span class="org-rainbow-delimiters-depth-1">{</span><span class="org-rainbow-delimiters-depth-2">{</span> ansible_managed | comment <span class="org-rainbow-delimiters-depth-2">}</span><span class="org-rainbow-delimiters-depth-1">}</span>
2019-05-20 21:36:57 +02:00
2019-05-15 19:55:51 +02:00
program_options:
tray: false <span class="org-comment-delimiter"># </span><span class="org-comment">[bool] Enable the tray icon. "auto"</span>
menu: flat <span class="org-comment-delimiter"># </span><span class="org-comment">["flat" | "nested"] Set the</span>
automount: true <span class="org-comment-delimiter"># </span><span class="org-comment">[bool] Enable automatic mounting.</span>
notify: true <span class="org-comment-delimiter"># </span><span class="org-comment">[bool] Enable notifications.</span>
password_cache: false <span class="org-comment-delimiter"># </span><span class="org-comment">[int] Password cache in minutes. Caching is</span>
file_manager: <span class="org-string">""</span>
notify_command: <span class="org-string">"{{ vdr.home }}/bin/udiskie_vdr_mount_helper '{event}' '{device_presentation}' '{mount_path}'"</span>
device_config:
- is_loop: true
ignore: true
- is_external: false
ignore: true
notifications:
device_mounted: 5 <span class="org-comment-delimiter"># </span><span class="org-comment">mount notification</span>
device_unmounted: true <span class="org-comment-delimiter"># </span><span class="org-comment">unmount notification</span>
device_added: true <span class="org-comment-delimiter"># </span><span class="org-comment">device has appeared</span>
device_removed: true <span class="org-comment-delimiter"># </span><span class="org-comment">device has disappeared</span>
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="orgdf2ad40"></a>mount helper script<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-12-2-3-2">
<div class="org-src-container">
<pre class="src src-shell"><span class="org-rainbow-delimiters-depth-1">{</span><span class="org-rainbow-delimiters-depth-2">{</span> ansible_managed | comment <span class="org-rainbow-delimiters-depth-2">}</span><span class="org-rainbow-delimiters-depth-1">}</span>
2019-05-15 19:55:51 +02:00
<span class="org-variable-name">videodir</span>=<span class="org-string">"{{ vdr.recdir }}"</span>
<span class="org-variable-name">event</span>=<span class="org-string">"$1"</span>
<span class="org-variable-name">device_node</span>=<span class="org-string">"$2"</span>
<span class="org-variable-name">mount_path</span>=<span class="org-string">"$3"</span>
logger -t <span class="org-string">"mount-notification"</span> <span class="org-string">"event: $event, device: $device_node, mount_path: $mount_path"</span>
<span class="org-keyword">case</span> <span class="org-string">"$event"</span><span class="org-keyword"> in</span>
<span class="org-string">'device_mounted'</span>)
<span class="org-variable-name">target</span>=<span class="org-string">"${videodir}/$(</span><span class="org-sh-quoted-exec">basename</span><span class="org-string"> "${mount_path}")"</span>
ln -s -T <span class="org-string">"$mount_path"</span> <span class="org-string">"$target"</span> ||
<span class="org-rainbow-delimiters-depth-1">{</span> logger -t <span class="org-string">"vdr recordings found"</span> <span class="org-string">"mountpoint already exists, aborting"</span>; <span class="org-keyword">exit</span>; <span class="org-rainbow-delimiters-depth-1">}</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">check if we got a vdr recording on the mountpoint</span>
<span class="org-keyword">if</span> <span class="org-rainbow-delimiters-depth-1">[</span> -n $<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-sh-quoted-exec">find</span> <span class="org-string">"$mount_path"</span> -name <span class="org-string">"*.rec"</span> -print -quit 2&gt;/dev/null<span class="org-rainbow-delimiters-depth-2">)</span> <span class="org-rainbow-delimiters-depth-1">]</span>
<span class="org-keyword">then</span>
vdr-dbus-send /Skin skin.QueueMessage string:<span class="org-string">"$mount_path mounted (with recordings)"</span>
svdrpsend updr
<span class="org-keyword">else</span>
vdr-dbus-send /Skin skin.QueueMessage string:<span class="org-string">"$mount_path' mounted"</span>
<span class="org-keyword">fi</span>
;;
<span class="org-string">'device_unmounted'</span>)
<span class="org-variable-name">removed_symlinks</span>=<span class="org-rainbow-delimiters-depth-1">(</span>$<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-sh-quoted-exec">find</span> <span class="org-string">"$videodir"</span> -xtype l -delete -print<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
logger -t <span class="org-string">"device umounted"</span> <span class="org-string">"remove unneeded symlinks: $(</span><span class="org-sh-quoted-exec">paste</span><span class="org-string"> -d " " &lt;&lt;&lt; "${removed_symlinks[@]}")"</span>
vdr-dbus-send /Skin skin.QueueMessage string:<span class="org-string">"$device_node umounted"</span>
svdrpsend updr
;;
<span class="org-string">'device_removed'</span>)
<span class="org-variable-name">removed_symlinks</span>=<span class="org-rainbow-delimiters-depth-1">(</span>$<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-sh-quoted-exec">find</span> <span class="org-string">"$videodir"</span> -xtype l -delete -print<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
2019-05-20 21:36:57 +02:00
<span class="org-rainbow-delimiters-depth-1">[</span> -z <span class="org-string">"$device_node"</span> <span class="org-rainbow-delimiters-depth-1">]</span> &amp;&amp; <span class="org-keyword">exit</span>
2019-05-15 19:55:51 +02:00
logger -t <span class="org-string">"device removed"</span> <span class="org-string">"remove unneeded symlinks: $(</span><span class="org-sh-quoted-exec">paste</span><span class="org-string"> -d " " &lt;&lt;&lt; "${removed_symlinks[@]}")"</span>
vdr-dbus-send /Skin skin.QueueMessage string:<span class="org-string">"$device_node removed"</span>
svdrpsend updr
;;
<span class="org-string">'job_failed'</span>)
<span class="org-keyword">if</span> <span class="org-rainbow-delimiters-depth-1">[</span> -n <span class="org-string">"$mount_path"</span> <span class="org-rainbow-delimiters-depth-1">]</span>
<span class="org-keyword">then</span>
logger -t <span class="org-string">"umount failed"</span> <span class="org-string">"could not unmount $mount_path"</span>
<span class="org-keyword">else</span>
logger -t <span class="org-string">"operation failed"</span> <span class="org-string">'could not mount(?) '"$device_node"</span>
<span class="org-keyword">fi</span>
;;
<span class="org-keyword">esac</span>
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="org2f23928"></a>udiskie snippet for commands.conf<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-12-2-3-3">
<div class="org-src-container">
<pre class="src src-shell"><span class="org-rainbow-delimiters-depth-1">{</span><span class="org-rainbow-delimiters-depth-2">{</span> ansible_managed | comment <span class="org-rainbow-delimiters-depth-2">}</span><span class="org-rainbow-delimiters-depth-1">}</span>
2019-05-20 21:36:57 +02:00
2019-05-15 19:55:51 +02:00
<span class="org-rainbow-delimiters-depth-1">{</span><span class="org-rainbow-delimiters-depth-2">{</span> <span class="org-string">"Safely remove usb mass storage"</span> | translate <span class="org-rainbow-delimiters-depth-2">}</span><span class="org-rainbow-delimiters-depth-1">}</span> : echo <span class="org-string">'svdrpsend mesg "$(</span><span class="org-sh-quoted-exec">udiskie-umount</span><span class="org-string"> -a 2&gt;&amp;1 | grep -o "Error unmounting.*")"'</span> | at now
</pre>
</div>
</div>
</li>
</ol>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="org1ff5546"></a>Systemd User Session<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-12-2-4">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="org777d951"></a>yavdr-desktop.target<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-12-2-4-1">
<div class="org-src-container">
<pre class="src src-shell"><span class="org-rainbow-delimiters-depth-1">[</span>Unit<span class="org-rainbow-delimiters-depth-1">]</span>
<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>
2019-05-20 21:36:57 +02:00
<li><a id="org63f8f31"></a>detect-second-display<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-12-2-4-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>
<span class="org-builtin">source</span> &lt;<span class="org-rainbow-delimiters-depth-1">(</span>systemctl --user show-environment<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">SECOND_DISPLAY</span>=<span class="org-string">"${DISPLAY%\.[0-9]*}.1"</span>
<span class="org-keyword">if</span> xrandr -d <span class="org-string">"$SECOND_DISPLAY"</span> -q | grep -q <span class="org-string">"connected"</span>; <span class="org-keyword">then</span>
<span class="org-rainbow-delimiters-depth-1">[</span> <span class="org-string">"$DISPLAY"</span> != <span class="org-string">"$SECOND_DISPLAY"</span> <span class="org-rainbow-delimiters-depth-1">]</span> &amp;&amp; <span class="org-variable-name">d</span>=<span class="org-string">"DISPLAY=$SECOND_DISPLAY"</span> || <span class="org-variable-name">d</span>=<span class="org-string">"DISPLAY=$DISPLAY"</span>
<span class="org-builtin">echo</span> <span class="org-string">"$d"</span> &gt; ~/.second_display;
<span class="org-keyword">else</span>
rm -f ~/.second_display
<span class="org-keyword">fi</span>
</pre>
</div>
<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">RemainAfterExit</span>=yes
<span class="org-variable-name">ExecStart</span>=%h/bin/detect-second-display
[<span class="org-type">Install</span>]
<span class="org-variable-name">WantedBy</span>=yavdr-desktop.target
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="orgb144ae1"></a>switch-displays<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-12-2-4-3">
<p>
This script exchanges the primary and secondary screen. It needs access to the systemd user session.
</p>
<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>
<span class="org-builtin">source</span> &lt;<span class="org-rainbow-delimiters-depth-1">(</span>systemctl --user show-environment<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-rainbow-delimiters-depth-1">[</span><span class="org-rainbow-delimiters-depth-2">[</span> <span class="org-string">"$DISPLAY"</span> =~ <span class="org-string">\.</span>1$ <span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">]</span> &amp;&amp; <span class="org-variable-name">DISPLAY</span>=<span class="org-string">"${DISPLAY%.1}.0"</span> || <span class="org-variable-name">DISPLAY</span>=<span class="org-string">"${DISPLAY%.0}.1"</span>
frontend-dbus-send stop
systemctl --user stop osd2web
frontend-dbus-send setDisplay <span class="org-string">"$DISPLAY"</span>
systemctl --user start osd2web
frontend-dbus-send start
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="orgea3717f"></a>openbox-second.service<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-12-2-4-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 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/rc2.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>
2019-05-20 21:36:57 +02:00
<li><a id="orgc6a217b"></a>osd2web.service<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-12-2-4-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 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>
2019-05-20 21:36:57 +02:00
<li><a id="orgb78120e"></a>tmux.service<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-12-2-4-6">
<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>
2019-05-20 21:36:57 +02:00
<li><a id="orga6c5f27"></a>wm-exit.service<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-12-2-4-7">
<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>
2019-05-20 21:36:57 +02:00
<li><a id="org34400f6"></a>irexec<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-12-2-5">
<p>
irexec.service starts irexec for the user session
</p>
<div class="org-src-container">
<pre class="src src-shell"><span class="org-rainbow-delimiters-depth-1">[</span>Unit<span class="org-rainbow-delimiters-depth-1">]</span>
<span class="org-variable-name">Description</span>=LIRC command handler
<span class="org-rainbow-delimiters-depth-1">[</span>Service<span class="org-rainbow-delimiters-depth-1">]</span>
<span class="org-variable-name">Type</span>=simple
<span class="org-variable-name">ExecStart</span>=/usr/bin/irexec %h/.lircrc
<span class="org-rainbow-delimiters-depth-1">[</span>Install<span class="org-rainbow-delimiters-depth-1">]</span>
<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
prog = irexec
button = KEY_HOME
config = frontend-dbus-send switchbetween kodi vdr
end
</pre>
</div>
</div>
</li>
</ol>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgfcc183a" class="outline-3">
<h3 id="orgfcc183a"><span class="section-number-3">7.13</span> samba-install</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-13">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org68633e1" class="outline-4">
<h4 id="org68633e1"><span class="section-number-4">7.13.1</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<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-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>:
- samba
- samba-common
- samba-common-bin
- tdb-tools
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">install_recommends</span>: <span class="org-constant">no</span>
</pre>
</div>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orga27b06e" class="outline-3">
<h3 id="orga27b06e"><span class="section-number-3">7.14</span> samba-config</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-14">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org6c3ca8f" class="outline-4">
<h4 id="org6c3ca8f"><span class="section-number-4">7.14.1</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-14-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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgc73e445" class="outline-4">
<h4 id="orgc73e445"><span class="section-number-4">7.14.2</span> templates</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-14-2">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="orgdd44799"></a>smb.conf<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-14-2-1">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="org3bcbfa2"></a>global settings<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-14-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 password
guest account = nobody
{% 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>
2019-05-20 21:36:57 +02:00
<li><a id="org46ba3c8"></a>media directories<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-14-2-1-2">
<div class="org-src-container">
<pre class="src src-yaml">{% for name, path in media_dirs.items() | list %}
[{{ 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>
2019-05-20 21:36:57 +02:00
<li><a id="orgc561e53"></a>include custom samba exports<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-14-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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org69635a5" class="outline-3">
<h3 id="org69635a5"><span class="section-number-3">7.15</span> <span class="todo STARTED">STARTED</span> autoinstall-drivers</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-15">
<p>
It would be nice to be able to detect if it is suitable to install those drivers:
</p>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgb80dbde" class="outline-4">
<h4 id="orgb80dbde"><span class="section-number-4">7.15.1</span> <span class="todo TODO">TODO</span> sundtek for Sundtek devices (local or network connection)</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-15-1">
<p>
2019-05-20 21:36:57 +02:00
For now we plan to have the role <code>install-sundtek</code>, in the future we could do a little better:
2019-05-15 19:55:51 +02:00
</p>
<p>
We should be able to detect local devices by USB-ID:
</p>
<p>
Vendor-IDs:
</p>
<ul class="org-ul">
<li>eb1a:5[1b2] (alte Generation)</li>
<li>2659:* (neuere Sticks)</li>
</ul>
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="org1864499"></a>planned packages<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-15-1-1">
<ul class="org-ul">
2019-05-20 21:36:57 +02:00
<li class="on"><code>[X]</code> python3-sundtek (Python C-extension for sundtek API)</li>
2019-05-15 19:55:51 +02:00
<li>yavdr-hardware-sundtek (basic configuration files and scripts, sundtek-avahi-mounter)</li>
<li>yavdr-backend-sundtek (WFE)</li>
</ul>
</div>
</li>
</ol>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org782ccba" class="outline-4">
<h4 id="org782ccba"><span class="section-number-4">7.15.2</span> <span class="todo TODO">TODO</span> drivers for TT S2-6400 FF</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-15-2">
<p>
2019-05-20 21:36:57 +02:00
<a href="https://github.com/s-moch/linux-saa716x">https://github.com/s-moch/linux-saa716x</a> - how to build this as dkms package?
2019-05-15 19:55:51 +02:00
</p>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orga67afe9" class="outline-3">
<h3 id="orga67afe9"><span class="section-number-3">7.16</span> autoinstall-ubuntu-drivers</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-16">
<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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org9d56f72" class="outline-4">
<h4 id="org9d56f72"><span class="section-number-4">7.16.1</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-16-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>
<span class="org-comment-delimiter"># </span><span class="org-comment">also alternates between virtualbox-guest-dkms and virtualbox-guest-dkms-hwe on successive runs</span>
</pre>
</div>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org2ae2021" class="outline-3">
<h3 id="org2ae2021"><span class="section-number-3">7.17</span> autoinstall-virtualbox-guest</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-17">
<p>
This role installs the guest additions for virtualbox guests on Ubuntu 18.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>: collect facts about installed packages
<span class="org-variable-name">package_facts</span>:
<span class="org-variable-name">manager</span>: <span class="org-string">"apt"</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>:
- dkms
- <span class="org-string">'{{ "virtualbox-guest-x11-hwe" if "xserver-xorg-hwe-18.04" in ansible_facts.packages else "virtualbox-guest-x11" }}'</span>
- <span class="org-string">'{{ "virtualbox-guest-dkms-hwe" if "linux-generic-hwe-18.04" in ansible_facts.packages else "virtualbox-guest-dkms" }}'</span>
<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>:
- vdr-plugin-xineliboutput
- xineliboutput-sxfe
<span class="org-variable-name">state</span>: present
- <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 in [<span class="org-string">"virtualbox"</span>, <span class="org-string">"VirtualPC"</span>, <span class="org-string">"VMware"</span>]
- ansible_virtualization_role == <span class="org-string">"guest"</span>
</pre>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgfd62e8e" class="outline-3">
<h3 id="orgfd62e8e"><span class="section-number-3">7.18</span> autoinstall-atric-usb</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-18">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgd77a222" class="outline-4">
<h4 id="orgd77a222"><span class="section-number-4">7.18.1</span> dependencies</h4>
2019-05-15 19:55:51 +02:00
<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>: collect-facts }
- { <span class="org-variable-name">role</span>: yavdr-remote }
</pre>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgce670ea" class="outline-4">
<h4 id="orgce670ea"><span class="section-number-4">7.18.2</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<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-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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgf942b24" class="outline-4">
<h4 id="orgf942b24"><span class="section-number-4">7.18.3</span> templates</h4>
2019-05-15 19:55:51 +02:00
<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> = 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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org317f404" class="outline-3">
<h3 id="org317f404"><span class="section-number-3">7.19</span> autoinstall-yausbir</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-19">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org01fde27" class="outline-4">
<h4 id="org01fde27"><span class="section-number-4">7.19.1</span> dependencies</h4>
2019-05-15 19:55:51 +02:00
<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-variable-name">dependencies</span>:
- { <span class="org-variable-name">role</span>: yavdr-remote }
</pre>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgcf9ebfc" class="outline-4">
<h4 id="orgcf9ebfc"><span class="section-number-4">7.19.2</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-19-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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org8ca01b3" class="outline-4">
<h4 id="org8ca01b3"><span class="section-number-4">7.19.3</span> templates</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-19-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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org5e17332" class="outline-3">
<h3 id="org5e17332"><span class="section-number-3">7.20</span> autoinstall-satip</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-20">
<p>
If a Sat&gt;IP Server responds to a discovery request, the package vdr-plugin-satip is installed.
</p>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org96fcee2" class="outline-4">
<h4 id="org96fcee2"><span class="section-number-4">7.20.1</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<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-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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org3b98bb4" class="outline-3">
<h3 id="org3b98bb4"><span class="section-number-3">7.21</span> autoinstall-targavfd</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-21">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org45ede5f" class="outline-4">
<h4 id="org45ede5f"><span class="section-number-4">7.21.1</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<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-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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org599e45e" class="outline-3">
<h3 id="org599e45e"><span class="section-number-3">7.22</span> autoinstall-imonlcd</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-22">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org9799cb1" class="outline-4">
<h4 id="org9799cb1"><span class="section-number-4">7.22.1</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<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-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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgad5ff41" class="outline-3">
<h3 id="orgad5ff41"><span class="section-number-3">7.23</span> autoinstall-libcecdaemon</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-23">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org8638840" class="outline-4">
<h4 id="org8638840"><span class="section-number-4">7.23.1</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<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-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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org95ff383" class="outline-3">
<h3 id="org95ff383"><span class="section-number-3">7.24</span> autoinstall-pvr350</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-24">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org089d4c5" class="outline-4">
<h4 id="org089d4c5"><span class="section-number-4">7.24.1</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-24-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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org4e734b3" class="outline-3">
<h3 id="org4e734b3"><span class="section-number-3">7.25</span> autoinstall-hauppauge-pvr</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-25">
<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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org77e3dc2" class="outline-3">
<h3 id="org77e3dc2"><span class="section-number-3">7.26</span> autoinstall-firmware</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-26">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org8f4d8b4" class="outline-4">
<h4 id="org8f4d8b4"><span class="section-number-4">7.26.1</span> dependencies</h4>
2019-05-15 19:55:51 +02:00
<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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgaa85058" class="outline-4">
<h4 id="orgaa85058"><span class="section-number-4">7.26.2</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<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">This role provides easyily downloadable firmware files</span>
- <span class="org-variable-name">name</span>: Firmware dvb-demod-si2168-b40-01.fw 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 dvb-fe-xc5000-1.6.114.fw 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>
- <span class="org-variable-name">name</span>: Firmware ngenge_18.fw for ngene cards
<span class="org-variable-name">get_url</span>:
<span class="org-variable-name">url</span>: http://l4m-daten.de/downloads/firmware/dvb-s2/linux/all/ngene_18.fw
<span class="org-variable-name">checksum</span>: sha256:213d98ec2cd575eba15d82ee79fed7098e670de43792f8aa773a95cfb7c32060
<span class="org-variable-name">dest</span>: /lib/firmware/ngene_18.fw
<span class="org-variable-name">when</span>: <span class="org-string">'"ngene" in modules'</span>
<span class="org-variable-name">notify</span>: reboot required
- <span class="org-variable-name">name</span>: Firmware drxk_a3.mc for drxk
<span class="org-variable-name">get_url</span>:
<span class="org-variable-name">url</span>: https://github.com/OpenELEC/dvb-firmware/raw/master/firmware/drxk_a3.mc
<span class="org-variable-name">checksum</span>: sha256:f8956ad6f92a4ce90a6ab94ed23e2f9a27e9317e936fd3e0119778dd28e7e294
<span class="org-variable-name">dest</span>: /lib/firmware/drxk_a3.mc
<span class="org-variable-name">when</span>: <span class="org-string">'"ngene" in modules or "drxk" in modules'</span>
<span class="org-variable-name">notify</span>: reboot required
</pre>
</div>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orge7e1362" class="outline-3">
<h3 id="orge7e1362"><span class="section-number-3">7.27</span> autoinstall-dvbsky-firmware</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-27">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orge74e161" class="outline-4">
<h4 id="orge74e161"><span class="section-number-4">7.27.1</span> dependencies</h4>
2019-05-15 19:55:51 +02:00
<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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org0c6a139" class="outline-4">
<h4 id="org0c6a139"><span class="section-number-4">7.27.2</span> defaults</h4>
2019-05-15 19:55:51 +02:00
<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-dvbsky-firmware</span>
<span class="org-variable-name">dvbsky_firmware_files</span>: []
</pre>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orga308fc0" class="outline-4">
<h4 id="orga308fc0"><span class="section-number-4">7.27.3</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-27-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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgb986baa" class="outline-3">
<h3 id="orgb986baa"><span class="section-number-3">7.28</span> <span class="todo TODO">TODO</span> autoinstall-dvbhddevice</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-28">
<p>
How to get a driver for the TT-6400 FF card? Needed firmware files are in the <code>yavdr-firmware</code> package.
</p>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org83947e5" class="outline-4">
<h4 id="org83947e5"><span class="section-number-4">7.28.1</span> dependencies</h4>
2019-05-15 19:55:51 +02:00
<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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org10e58c5" class="outline-4">
<h4 id="org10e58c5"><span class="section-number-4">7.28.2</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<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-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
- yavdr-firmware
<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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgb7dd51d" class="outline-3">
<h3 id="orgb7dd51d"><span class="section-number-3">7.29</span> <span class="todo TODO">TODO</span> autoinstall-dvbsddevice</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-29">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org484ad9e" class="outline-4">
<h4 id="org484ad9e"><span class="section-number-4">7.29.1</span> dependencies</h4>
2019-05-15 19:55:51 +02:00
<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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org8c24758" class="outline-4">
<h4 id="org8c24758"><span class="section-number-4">7.29.2</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<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-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
- yavdr-firmware
<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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgf6a888b" class="outline-3">
<h3 id="orgf6a888b"><span class="section-number-3">7.30</span> autoinstall-hardware-irmp</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-30">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgd4cb729" class="outline-4">
<h4 id="orgd4cb729"><span class="section-number-4">7.30.1</span> dependencies</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-30-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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org34fc5a6" class="outline-4">
<h4 id="org34fc5a6"><span class="section-number-4">7.30.2</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-30-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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgcefbacd" class="outline-3">
<h3 id="orgcefbacd"><span class="section-number-3">7.31</span> Serial IR Receivers</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-31">
<p>
This role preconfigures the system for serial &bdquo;homebrew&ldquo; receivers. Newer kernel versions provide <code>serial_ir</code> which acts as a rc-core driver, so we don&rsquo;t need lircd - eventlircd can use the device directly.
</p>
<p>
2019-05-20 21:36:57 +02:00
As configured in the role yavdr-remote (<a href="#orgbb015ec">/etc/rc_maps.cfg</a>) a keytable for a RC-6 MCE remote is loaded by default. You can choose a different keymap which may also use another ir-protocol.
2019-05-15 19:55:51 +02:00
</p>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org49ec21d" class="outline-4">
<h4 id="org49ec21d"><span class="section-number-4">7.31.1</span> defaults</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-31-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/serial-ir/defaults/main.yml</span>
<span class="org-variable-name">serial_ir_device</span>: ttyS0
</pre>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org51c33d2" class="outline-4">
<h4 id="org51c33d2"><span class="section-number-4">7.31.2</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-31-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/serial-ir/tasks/main.yml</span>
- <span class="org-variable-name">name</span>: apt | install setserial
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: setserial
- <span class="org-variable-name">name</span>: load serial_ir on startup
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: roles/serial-ir/templates/modules-load.d/serial_ir.conf.j2
<span class="org-variable-name">dest</span>: /etc/modules-load.d/serial_ir.conf
- <span class="org-variable-name">name</span>: serial_ir module options
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: roles/serial-ir/templates/modprobe.d/serial_ir.conf.j2
<span class="org-variable-name">dest</span>: /etc/modprobe.d/serial_ir.conf
- <span class="org-variable-name">name</span>: setserial options
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: roles/serial-ir/templates/serial.conf.j2
<span class="org-variable-name">dest</span>: /etc/serial.conf
</pre>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org44f05bd" class="outline-4">
<h4 id="org44f05bd"><span class="section-number-4">7.31.3</span> templates</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-31-3">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="org82539e9"></a>load serial_ir on startup<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-31-3-1">
<div class="org-src-container">
<pre class="src src-jinja2"><span class="org-type">{{</span> <span class="org-variable-name">ansible_managed </span><span class="org-keyword">| </span><span class="org-warning">comment</span> <span class="org-type">}}</span>
serial_ir
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="orgcf06491"></a>serial_ir module options<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-31-3-2">
<div class="org-src-container">
<pre class="src src-jinja2"><span class="org-type">{{</span> <span class="org-variable-name">ansible_managed </span><span class="org-keyword">| </span><span class="org-warning">comment</span> <span class="org-type">}}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">if</span> serial_ir_device == <span class="org-string">"ttyS0"</span> <span class="org-function-name">%}</span>
#COM1 equivalent, /dev/ttyS0
options serial_ir irq=4 io=0x3f8
<span class="org-function-name">{%</span> <span class="org-keyword">elif</span> serial_ir_device == <span class="org-string">"ttyS1"</span> <span class="org-function-name">%}</span>
#COM2 equivalent, /dev/ttyS1
options serial_ir irq=3 io=0x2f8
<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">if</span> serial_ir_device <span class="org-builtin">in</span> (<span class="org-string">"ttyS0"</span>, <span class="org-string">"ttyS1"</span>) <span class="org-function-name">%}</span>
install serial_ir setserial /dev/<span class="org-type">{{</span><span class="org-variable-name">serial_ir_device</span><span class="org-type">}}</span> uart <span class="org-builtin">none</span>; /sbin/modprobe --<span class="org-builtin">ignore</span>-install serial_ir
<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="org839fe12"></a>setserial options<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-31-3-3">
<div class="org-src-container">
<pre class="src src-jinja2"><span class="org-type">{{</span> <span class="org-variable-name">ansible_managed </span><span class="org-keyword">| </span><span class="org-warning">comment</span> <span class="org-type">}}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">if</span> serial_ir_device == <span class="org-string">"ttyS0"</span> <span class="org-function-name">%}</span>
#COM1 equivalent, /dev/ttyS0
/dev/ttyS0 uart <span class="org-builtin">none</span>
<span class="org-function-name">{%</span> <span class="org-keyword">elif</span> serial_ir_device == <span class="org-string">"ttyS1"</span> <span class="org-function-name">%}</span>
#COM2 equivalent, /dev/ttyS1
/dev/ttyS1 uart <span class="org-builtin">none</span>
<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>
</pre>
</div>
</div>
</li>
</ol>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orga9ab046" class="outline-3">
<h3 id="orga9ab046"><span class="section-number-3">7.32</span> kodi</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-32">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org6b6d401" class="outline-4">
<h4 id="org6b6d401"><span class="section-number-4">7.32.1</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-32-1">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="orgecc379b"></a>Install KODI<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-32-1-1">
</div>
<ul class="org-ul">
2019-05-20 21:36:57 +02:00
<li><a id="orga7ca925"></a>main.yml<br />
<div class="outline-text-6" id="text-orga7ca925">
2019-05-15 19:55:51 +02:00
<div class="org-src-container">
<pre class="src src-yaml">- <span class="org-variable-name">import_tasks</span>: install-kodi.yml
<span class="org-variable-name">tags</span>:
- install
- update
- kodi:install
- <span class="org-variable-name">import_tasks</span>: configure-kodi.yml
<span class="org-variable-name">tags</span>:
- install
- update
- kodi:configure
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="org54272af"></a>install-kodi.yml<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-32-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>:
- kodi
- kodi-pvr-vdr-vnsi
- python3-lxml
<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">name</span>: apt | install kodi-send (team-xbmc PPA)
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: <span class="org-string">"kodi-eventclients-xbmc-send"</span> <span class="org-comment-delimiter"># </span><span class="org-comment">team-xbmc uses "kodi-eventclients-xbmc-send for some reason</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">register</span>: team_xbmc_ppa
<span class="org-variable-name">ignore_errors</span>: <span class="org-constant">True</span>
- <span class="org-variable-name">name</span>: apt | install kodi-send (Ubuntu package)
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: <span class="org-string">"kodi-eventclients-kodi-send"</span> <span class="org-comment-delimiter"># </span><span class="org-comment">fallback to ubuntu package</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">when</span>: team_xbmc_ppa.failed
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="org174ec23"></a>configure-kodi.yml<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-32-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-variable-name">name</span>: expand template for set-kodi-display
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: <span class="org-string">'templates/set-kodi-display.j2'</span>
<span class="org-variable-name">dest</span>: <span class="org-string">'/usr/bin/set-kodi-display'</span>
<span class="org-variable-name">mode</span>: <span class="org-string">"0755"</span>
</pre>
</div>
</div>
</li>
</ol>
</li>
</ol>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org0c291a1" class="outline-4">
<h4 id="org0c291a1"><span class="section-number-4">7.32.2</span> templates</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-32-2">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="org079e6f7"></a>kodi.service<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-32-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 SIGKILL
<span class="org-variable-name">Restart</span>=on-failure
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="orga360714"></a>set-kodi-diplay<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-32-2-2">
<p>
This is a version-dependent script to force KODI to use the display set by the environment variable <code>DISPLAY</code>. The following Version is intended for KODI 18.
</p>
<div class="org-src-container">
<pre class="src src-python"><span class="org-comment-delimiter">#</span><span class="org-comment">!/usr/bin/env python3</span>
<span class="org-doc">"""</span>
<span class="org-doc">{{ ansible_managed }}</span>
<span class="org-doc">This Script changes the monitor in KODI's guisettings.xml to the wanted output</span>
<span class="org-doc">according to the DISPLAY environment variable. It works with KODI 18 (not KODI 17!).</span>
<span class="org-doc">In order to change the display we need to modify the settings/videoscreen nodes.</span>
<span class="org-doc">Basic algorithm:</span>
<span class="org-doc"> - get the current videoscreen.monitor</span>
<span class="org-doc"> - check if it needs to be changed</span>
<span class="org-doc"> - create a backup of the videoscreen nodes in /var/lib/vdr/.kodi/.display_cache/{CONNETOR}-videoscreen.xml</span>
<span class="org-doc"> - check if there is an existing backup for the new CONNECTOR</span>
<span class="org-doc"> - parse the backup of the videoscreen nodes</span>
<span class="org-doc"> - replace the videoscreen nodes with the backup data</span>
<span class="org-doc">"""</span>
<span class="org-keyword">import</span> copy
<span class="org-keyword">import</span> os
<span class="org-keyword">import</span> sys
<span class="org-keyword">import</span> subprocess
<span class="org-keyword">from</span> lxml <span class="org-keyword">import</span> etree <span class="org-keyword">as</span> ET
<span class="org-variable-name">GUISETTINGS</span> = <span class="org-string">'/var/lib/vdr/.kodi/userdata/guisettings.xml'</span>
<span class="org-variable-name">CACHE_DIR</span> = <span class="org-string">'/var/lib/vdr/.kodi/.display_cache'</span>
<span class="org-variable-name">VIDEOSCREEN_TEMPLATE</span> = <span class="org-string">"""&lt;settings version="2"&gt;</span>
<span class="org-string"> &lt;setting id="videoscreen.monitor"&gt;{}&lt;/setting&gt;</span>
<span class="org-string">&lt;/settings&gt;"""</span>
<span class="org-keyword">def</span> <span class="org-function-name">create_cache_dir</span><span class="org-rainbow-delimiters-depth-1">()</span>:
<span class="org-keyword">try</span>:
os.makedirs<span class="org-rainbow-delimiters-depth-1">(</span>CACHE_DIR, exist_ok=<span class="org-constant">True</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">except</span> <span class="org-type">PermissionError</span>:
sys.<span class="org-constant">exit</span><span class="org-rainbow-delimiters-depth-1">(</span>f<span class="org-string">"Error: insufficient permissions to create cachedir {CACHE_DIR}"</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">except</span> <span class="org-type">Exception</span> <span class="org-keyword">as</span> e:
sys.<span class="org-constant">exit</span><span class="org-rainbow-delimiters-depth-1">(</span>f<span class="org-string">"Unexpected Error when trying to create {CACHE_DIR}:"</span>, e<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">def</span> <span class="org-function-name">get_output_name</span><span class="org-rainbow-delimiters-depth-1">()</span>:
<span class="org-doc">"""</span>
<span class="org-doc"> get display name from xrandr output for given DISPLAY environment variable</span>
<span class="org-doc"> """</span>
<span class="org-keyword">try</span>:
<span class="org-variable-name">xrandr_output</span> = <span class="org-rainbow-delimiters-depth-1">[</span>
l <span class="org-keyword">for</span> l <span class="org-keyword">in</span> subprocess.check_output<span class="org-rainbow-delimiters-depth-2">(</span>
<span class="org-rainbow-delimiters-depth-3">[</span><span class="org-string">"xrandr"</span><span class="org-rainbow-delimiters-depth-3">]</span>,
env=<span class="org-rainbow-delimiters-depth-3">{</span><span class="org-string">"DISPLAY"</span>: os.environ<span class="org-rainbow-delimiters-depth-4">[</span><span class="org-string">"DISPLAY"</span><span class="org-rainbow-delimiters-depth-4">]</span><span class="org-rainbow-delimiters-depth-3">}</span>
<span class="org-rainbow-delimiters-depth-2">)</span>.decode<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">"utf-8"</span><span class="org-rainbow-delimiters-depth-2">)</span>.splitlines<span class="org-rainbow-delimiters-depth-2">()</span>
<span class="org-rainbow-delimiters-depth-1">]</span>
<span class="org-keyword">return</span> <span class="org-builtin">next</span><span class="org-rainbow-delimiters-depth-1">(</span>l.split<span class="org-rainbow-delimiters-depth-2">()[</span>0<span class="org-rainbow-delimiters-depth-2">]</span> <span class="org-keyword">for</span> l <span class="org-keyword">in</span> xrandr_output <span class="org-keyword">if</span> <span class="org-string">" connected "</span> <span class="org-keyword">in</span> l<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">except</span> <span class="org-type">Exception</span> <span class="org-keyword">as</span> e:
sys.<span class="org-constant">exit</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">"could not determine output name"</span>, e<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">def</span> <span class="org-function-name">parse_template</span><span class="org-rainbow-delimiters-depth-1">(</span>template_path, template, output=<span class="org-string">""</span><span class="org-rainbow-delimiters-depth-1">)</span>:
<span class="org-doc">"""read videoscreen settings from backup or create a stub file"""</span>
<span class="org-keyword">try</span>:
<span class="org-variable-name">xml_tree</span> = ET.parse<span class="org-rainbow-delimiters-depth-1">(</span>template_path<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">except</span> <span class="org-type">OSError</span>:
<span class="org-keyword">print</span><span class="org-rainbow-delimiters-depth-1">(</span>f<span class="org-string">"{template_path} not found, creating stub file"</span>, <span class="org-builtin">file</span>=sys.stderr<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">xml_template</span> = ET.fromstring<span class="org-rainbow-delimiters-depth-1">(</span>template.<span class="org-builtin">format</span><span class="org-rainbow-delimiters-depth-2">(</span>output<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">xml_tree</span> = ET.ElementTree<span class="org-rainbow-delimiters-depth-1">(</span>xml_template<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">finally</span>:
xml_tree.write<span class="org-rainbow-delimiters-depth-1">(</span>template_path<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">return</span> xml_tree
<span class="org-keyword">def</span> <span class="org-function-name">main</span><span class="org-rainbow-delimiters-depth-1">(</span>output<span class="org-rainbow-delimiters-depth-1">)</span>:
<span class="org-variable-name">guisettings</span> = parse_template<span class="org-rainbow-delimiters-depth-1">(</span>GUISETTINGS, VIDEOSCREEN_TEMPLATE, <span class="org-string">"Default"</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">parse guisettings Etree for display name an backup videoscreen data</span>
<span class="org-variable-name">root</span> = guisettings.getroot<span class="org-rainbow-delimiters-depth-1">()</span>
<span class="org-variable-name">old_output</span> = root.find<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">"./setting[@id='videoscreen.monitor']"</span><span class="org-rainbow-delimiters-depth-1">)</span>.text
<span class="org-keyword">if</span> old_output == output:
<span class="org-keyword">print</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">"no changes necessary, exiting"</span>, <span class="org-builtin">file</span>=sys.stderr<span class="org-rainbow-delimiters-depth-1">)</span>
sys.<span class="org-constant">exit</span><span class="org-rainbow-delimiters-depth-1">()</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">create a minimal guisettings etree</span>
<span class="org-variable-name">xml_path</span> = os.path.join<span class="org-rainbow-delimiters-depth-1">(</span>CACHE_DIR, f<span class="org-string">'{old_output}-videoscreen.xml'</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">base_tree</span> = ET.fromstring<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'&lt;settings version="2"&gt;&lt;/settings&gt;'</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">xml_tree</span> = ET.ElementTree<span class="org-rainbow-delimiters-depth-1">(</span>base_tree<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">backup_root</span> = xml_tree.getroot<span class="org-rainbow-delimiters-depth-1">()</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">copy videoscreen elements to backup etree</span>
<span class="org-variable-name">videoscreen_elements</span> = root.xpath<span class="org-rainbow-delimiters-depth-1">(</span>
<span class="org-string">"./setting[starts-with(@id, 'videoscreen.')]"</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">for</span> element <span class="org-keyword">in</span> videoscreen_elements:
backup_root.append<span class="org-rainbow-delimiters-depth-1">(</span>copy.deepcopy<span class="org-rainbow-delimiters-depth-2">(</span>element<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
element.getparent<span class="org-rainbow-delimiters-depth-1">()</span>.remove<span class="org-rainbow-delimiters-depth-1">(</span>element<span class="org-rainbow-delimiters-depth-1">)</span>
xml_tree.write<span class="org-rainbow-delimiters-depth-1">(</span>xml_path<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">print</span><span class="org-rainbow-delimiters-depth-1">(</span>f<span class="org-string">"written backup for {old_output} to {xml_path}"</span>, <span class="org-builtin">file</span>=sys.stderr<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">change videoscreen node to content of backup file</span>
<span class="org-variable-name">xml_path</span> = os.path.join<span class="org-rainbow-delimiters-depth-1">(</span>CACHE_DIR, f<span class="org-string">'{output}-videoscreen.xml'</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">videodir_xml</span> = parse_template<span class="org-rainbow-delimiters-depth-1">(</span>xml_path, VIDEOSCREEN_TEMPLATE, output<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">videodir_root</span> = videodir_xml.getroot<span class="org-rainbow-delimiters-depth-1">()</span>
<span class="org-variable-name">videoscreen</span> = videodir_root.find<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">"./setting[@id='videoscreen.monitor']"</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">copy videoscreen.* elements from Backup</span>
<span class="org-variable-name">videoscreen_elements</span> = videodir_root.xpath<span class="org-rainbow-delimiters-depth-1">(</span>
<span class="org-string">"./setting[starts-with(@id, 'videoscreen.')]"</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">for</span> element <span class="org-keyword">in</span> videoscreen_elements:
<span class="org-variable-name">new_element</span> = copy.deepcopy<span class="org-rainbow-delimiters-depth-1">(</span>element<span class="org-rainbow-delimiters-depth-1">)</span>
root.append<span class="org-rainbow-delimiters-depth-1">(</span>new_element<span class="org-rainbow-delimiters-depth-1">)</span>
guisettings.write<span class="org-rainbow-delimiters-depth-1">(</span>GUISETTINGS<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">if</span> <span class="org-builtin">__name__</span> == <span class="org-string">'__main__'</span>:
create_cache_dir<span class="org-rainbow-delimiters-depth-1">()</span>
<span class="org-variable-name">output</span> = get_output_name<span class="org-rainbow-delimiters-depth-1">()</span>
<span class="org-keyword">try</span>:
main<span class="org-rainbow-delimiters-depth-1">(</span>output<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">except</span> <span class="org-type">Exception</span> <span class="org-keyword">as</span> e:
<span class="org-keyword">print</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">"Could not change videoscreen.* settings:"</span>, <span class="org-builtin">str</span><span class="org-rainbow-delimiters-depth-2">(</span>e<span class="org-rainbow-delimiters-depth-2">)</span>, <span class="org-builtin">file</span>=sys.stderr<span class="org-rainbow-delimiters-depth-1">)</span>
</pre>
</div>
</div>
</li>
</ol>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org372e49d" class="outline-4">
<h4 id="org372e49d"><span class="section-number-4">7.32.3</span> files</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-32-3">
<p>
Those configuration files provide a preconfiguration for kodi which overrides the system wide configuration
</p>
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="orgf52685e"></a>Lircmap.xml<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-32-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>
2019-05-20 21:36:57 +02:00
<li><a id="org62b500f"></a>keymaps<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-32-3-2">
<p>
This file maps the keys defined in Lircmap.xml to actions within kodi.
</p>
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="orge1be02f"></a>remote.xml<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-6" id="text-7-32-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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgb71cd97" class="outline-3">
<h3 id="orgb71cd97"><span class="section-number-3">7.33</span> dvd</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-33">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org772b8f3" class="outline-4">
<h4 id="org772b8f3"><span class="section-number-4">7.33.1</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-33-1">
</div>
<ul class="org-ul">
2019-05-20 21:36:57 +02:00
<li><a id="orgc9d1528"></a>install libdvd-pkg, allow programs to eject optical media<br />
<div class="outline-text-5" id="text-orgc9d1528">
2019-05-15 19:55:51 +02:00
<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>: libdvd-pkg
<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">name</span>: reconfigure libdvd-pkg
<span class="org-variable-name">dpkg_reconfigure</span>:
<span class="org-variable-name">pkg</span>: libdvd-pkg
<span class="org-variable-name">answers</span>:
<span class="org-variable-name">libdvd-pkg/post-invoke_hook-install</span>: boolean true
<span class="org-variable-name">libdvd-pkg/build</span>: boolean true
- <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
<span class="org-variable-name">warn</span>: <span class="org-constant">false</span>
</pre>
</div>
</div>
</li>
</ul>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org5b6092d" class="outline-3">
<h3 id="org5b6092d"><span class="section-number-3">7.34</span> vdr-epg-daemon</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-34">
<p>
This role installs the vdr-epg-daemon
</p>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org562087d" class="outline-4">
<h4 id="org562087d"><span class="section-number-4">7.34.1</span> defaults</h4>
2019-05-15 19:55:51 +02:00
<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/epgd/defaults/main.yml</span>
<span class="org-variable-name">epgd_dbhost</span>: localhost
<span class="org-variable-name">epgd_dbport</span>: 3306
<span class="org-variable-name">epgd_dbname</span>: epg2vdr
<span class="org-variable-name">epgd_dbuser</span>: epg2vdr
<span class="org-variable-name">epgd_dbpass</span>: epg
<span class="org-variable-name">epgd_epgview</span>: eventsview.sql
<span class="org-variable-name">epgd_epgviewweb</span>: eventsviewplain.sql
<span class="org-variable-name">epgd_thetvdbview</span>: thetvdbview.sql
<span class="org-variable-name">epgd_checkinitial</span>: 1
<span class="org-variable-name">epgd_daysinadvance</span>: 8
<span class="org-variable-name">epgd_daystoupdate</span>: 4
<span class="org-variable-name">epgd_updatetime</span>: 12
<span class="org-variable-name">epgd_updatethreshold</span>: 500
<span class="org-variable-name">epgd_xmlstoretofs</span>: 0
<span class="org-variable-name">epgd_getepgimages</span>: 1
<span class="org-comment-delimiter"># </span><span class="org-comment">EpgImageSize</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">0 = 174x130</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">1 = 329x245</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">2 = 525x400</span>
<span class="org-variable-name">epgd_epgimagesize</span>: 2
<span class="org-variable-name">epgd_maximagesperevent</span>: 1
<span class="org-variable-name">epgd_seriesenabled</span>: 1
<span class="org-variable-name">epgd_seriesport</span>: 2006
<span class="org-variable-name">epgd_seriesstoretofs</span>: 0
<span class="org-variable-name">epgd_seriesurl</span>: www.eplists.de
<span class="org-variable-name">epgd_scrapepg</span>: 1
<span class="org-variable-name">epgd_scrapRecordings</span>: 1
<span class="org-comment-delimiter">#</span><span class="org-comment">epgd_scrapmoviedbapikey: ""</span>
<span class="org-variable-name">epgd_cachepath</span>: /var/cache/epgd/
<span class="org-variable-name">epgd_epghttpd_port</span>: 9999
<span class="org-comment-delimiter">#</span><span class="org-comment">epgd_httpproxy: 127.0.0.1:8000</span>
<span class="org-variable-name">epgd_httpproxy_username</span>: <span class="org-string">""</span>
<span class="org-variable-name">epgd_httpproxy_password</span>: <span class="org-string">""</span>
<span class="org-variable-name">epgd_LogLevel</span>: 1
<span class="org-variable-name">epgd_epgdata_url</span>: http://www.epgdata.com
<span class="org-variable-name">epgd_epgdata_pin</span>: insert-your-pin-here
<span class="org-variable-name">epgd_epgdata_timeout</span>: 180
</pre>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgd1381d4" class="outline-4">
<h4 id="orgd1381d4"><span class="section-number-4">7.34.2</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-34-2">
<div class="org-src-container">
<pre class="src src-yml">---
# file: roles/epgd/tasks/main.yml
#Installing mariadb, epg-daemon and epg2vdr.
#bind-address is set to 0.0.0.0 --&gt; 99-epgd.cnf.
#The root SQL password is only stored (NONE), because the epgd-tool
#is expecting it. But it is not really used,
#because the connection is established via a socket without a password.
#Normal users must use sudo if they want to access mysql as root.
#TODO:
# - Create channelmap if channels.conf is present.
# (the script already exists at mld.)
# - because skindesigner-logos delivers only svg-logos, logoSuffix svg should be the preset --&gt; vdr-epg-daemon / lib / parameters.c
# - customize epgd-tool for mariadb
- name: MariaDB and Plugin | install
apt:
name: ['mariadb-server', 'mariadb-plugin-epglv', 'python-pymysql']
state: present
- name: copy file | epgd mariadb config
template:
src: templates/etc_mysql_mariadb.conf.d_99-epgd.cnf.j2
dest: /etc/mysql/mariadb.conf.d/99-epgd.cnf
owner: root
group: root
- name: create /root/.ssh if it doesn't exist yes
file:
path: /root/.ssh
state: directory
owner: root
group: root
mode: 0700
- name: copy file | mysqlpasswd
template:
src: templates/root_.ssh_mysqlpasswd.j2
dest: /root/.ssh/mysqlpasswd
owner: root
group: root
mode: 0600
backup: yes
- name: Restart mariadb
systemd:
name: mariadb.service
state: restarted
enabled: yes
masked: no
- name: Create a new database for epgd
mysql_db:
name: "{{ epgd_dbname }}"
encoding: utf8
state: present
login_unix_socket: /var/run/mysqld/mysqld.sock
- name: Create User for epgd database
mysql_user:
name: "{{ epgd_dbuser }}"
password: "{{ epgd_dbpass }}"
host: '%'
priv: '{{ epgd_dbname }}.*:ALL'
state: present
login_unix_socket: /var/run/mysqld/mysqld.sock
- name: Create User for epgd database
mysql_user:
name: "{{ epgd_dbuser }}"
password: "{{ epgd_dbpass }}"
host: 'localhost'
priv: '{{ epgd_dbname }}.*:ALL'
state: present
login_unix_socket: /var/run/mysqld/mysqld.sock
- name: create epgd config folder
file:
path: /etc/epgd
state: directory
- name: epgd config
template:
src: templates/etc_epgd_epgd.conf.j2
dest: /etc/epgd/epgd.conf
- name: epgd | install
apt:
name: ['vdr-epg-daemon', 'vdr-plugin-epg2vdr', 'skindesigner-logos']
state: present
#- name: epgd | start
#systemd:
#name: epgd_service
#state: started
#enabled: yes
#masked: no
</pre>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org1da8a46" class="outline-4">
<h4 id="org1da8a46"><span class="section-number-4">7.34.3</span> templates</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-34-3">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="orga125ad9"></a>Template for /etc/mysql/mariadb.conf.d/99-epgd.cnf<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-34-3-1">
<p>
to allow Database access from all hosts on network
<code>file: roles/epgd/templates/etc_mysql_mariadb.conf.d_99-epgd.cnf.j2</code>
</p>
<div class="org-src-container">
<pre class="src src-jinja2"><span class="org-type">{{</span> <span class="org-variable-name">ansible_managed </span><span class="org-keyword">| </span><span class="org-warning">comment</span> <span class="org-type">}}</span>
[mysqld]
bind-address = 0.0.0.0
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="orge093728"></a>template for <code>/root/.ssh/mysqlpasswd</code> so epgd-tool is happy<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-34-3-2">
<p>
<code>file: roles/epgd/templates/root_.ssh_mysqlpasswd.j2</code>
</p>
<div class="org-src-container">
<pre class="src src-jinja2"><span class="org-type">{{</span> <span class="org-variable-name">ansible_managed </span><span class="org-keyword">| </span><span class="org-warning">comment</span> <span class="org-type">}}</span>
PASSWORD=<span class="org-builtin">NONE</span>
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="org06a9abf"></a>template for /etc/epgd/epgd.conf<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-34-3-3">
<p>
<code>file: roles/epgd/templates/etc_epgd_epgd.conf.j2</code>
</p>
<div class="org-src-container">
<pre class="src src-jinja2"><span class="org-type">{{</span> <span class="org-variable-name">ansible_managed </span><span class="org-keyword">| </span><span class="org-warning">comment</span> <span class="org-type">}}</span>
# ------------------------------------
# Configuration of EPG Daemon
# ------------------------------------
DbHost = <span class="org-type">{{</span> <span class="org-variable-name">epgd_dbhost</span> <span class="org-type">}}</span>
DbPort = <span class="org-type">{{</span> <span class="org-variable-name">epgd_dbport</span> <span class="org-type">}}</span>
DbName = <span class="org-type">{{</span> <span class="org-variable-name">epgd_dbname</span> <span class="org-type">}}</span>
DbUser = <span class="org-type">{{</span> <span class="org-variable-name">epgd_dbuser</span> <span class="org-type">}}</span>
DbPass = <span class="org-type">{{</span> <span class="org-variable-name">epgd_dbpass</span> <span class="org-type">}}</span>
EpgView = <span class="org-type">{{</span> <span class="org-variable-name">epgd_epgview</span> <span class="org-type">}}</span>
EpgViewWeb = <span class="org-type">{{</span> <span class="org-variable-name">epgd_epgviewweb</span> <span class="org-type">}}</span>
TheTvDBView = <span class="org-type">{{</span> <span class="org-variable-name">epgd_thetvdbview</span> <span class="org-type">}}</span>
CheckInitial = <span class="org-type">{{</span> <span class="org-variable-name">epgd_checkinitial</span> <span class="org-type">}}</span>
DaysInAdvance = <span class="org-type">{{</span> <span class="org-variable-name">epgd_daysinadvance</span> <span class="org-type">}}</span>
DaysToUpdate = <span class="org-type">{{</span> <span class="org-variable-name">epgd_daystoupdate</span> <span class="org-type">}}</span>
UpdateTime = <span class="org-type">{{</span> <span class="org-variable-name">epgd_updatetime</span> <span class="org-type">}}</span>
UpdateThreshold = <span class="org-type">{{</span> <span class="org-variable-name">epgd_updatethreshold</span> <span class="org-type">}}</span>
XmlStoreToFs = <span class="org-type">{{</span> <span class="org-variable-name">epgd_xmlstoretofs</span> <span class="org-type">}}</span>
GetEPGImages = <span class="org-type">{{</span> <span class="org-variable-name">epgd_getepgimages</span> <span class="org-type">}}</span>
# EpgImageSize
# 0 = 174x130
# 1 = 329x245
# 2 = 525x400
EpgImageSize = <span class="org-type">{{</span> <span class="org-variable-name">epgd_epgimagesize</span> <span class="org-type">}}</span>
MaxImagesPerEvent = <span class="org-type">{{</span> <span class="org-variable-name">epgd_maximagesperevent</span> <span class="org-type">}}</span>
SeriesEnabled = <span class="org-type">{{</span> <span class="org-variable-name">epgd_seriesenabled</span> <span class="org-type">}}</span>
SeriesPort = <span class="org-type">{{</span> <span class="org-variable-name">epgd_seriesport</span> <span class="org-type">}}</span>
SeriesStoreToFs = <span class="org-type">{{</span> <span class="org-variable-name">epgd_seriesstoretofs</span> <span class="org-type">}}</span>
SeriesUrl = <span class="org-type">{{</span> <span class="org-variable-name">epgd_seriesurl</span> <span class="org-type">}}</span>
ScrapEpg = <span class="org-type">{{</span> <span class="org-variable-name">epgd_scrapepg</span> <span class="org-type">}}</span>
ScrapRecordings = <span class="org-type">{{</span> <span class="org-variable-name">epgd_scrapRecordings</span> <span class="org-type">}}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">if</span> epgd_scrapmoviedbapikey <span class="org-builtin">is</span> defined <span class="org-function-name">%}</span>
ScapMovieDbApiKey = <span class="org-type">{{</span> <span class="org-variable-name">epgd_scrapmoviedbapikey</span> <span class="org-type">}}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">else</span> <span class="org-function-name">%}</span>
#ScrapMovieDbApiKey =
<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">if</span> epgd_netdevice <span class="org-builtin">is</span> defined <span class="org-function-name">%}</span>
NetDevice = <span class="org-type">{{</span> <span class="org-variable-name">epgd_netdevice</span> <span class="org-type">}}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">else</span> <span class="org-function-name">%}</span>
# NetDevice = eth0
<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>
CachePath = <span class="org-type">{{</span> <span class="org-variable-name">epgd_cachepath</span> <span class="org-type">}}</span>
HttpPort = <span class="org-type">{{</span> <span class="org-variable-name">epgd_epghttpd_port</span> <span class="org-type">}}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">if</span> epgd_httpproxy <span class="org-builtin">is</span> defined <span class="org-function-name">%}</span>
HttpProxy = <span class="org-type">{{</span> <span class="org-variable-name">epgd_httpproxy</span> <span class="org-type">}}</span>
UserName = <span class="org-type">{{</span> <span class="org-variable-name">epgd_httpproxy_username</span> <span class="org-type">}}</span>
Password = <span class="org-type">{{</span> <span class="org-variable-name">epgd_httpproxy_password</span> <span class="org-type">}}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">else</span> <span class="org-function-name">%}</span>
# HttpProxy = 127.0.0.1:8000
# UserName =
# Password =
<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>
LogLevel = <span class="org-type">{{</span> <span class="org-variable-name">epgd_LogLevel</span> <span class="org-type">}}</span>
# ---------------
# epgdata plugin
# ---------------
epgdata.<span class="org-builtin">url</span> = <span class="org-type">{{</span> <span class="org-variable-name">epgd_epgdata_url</span> <span class="org-type">}}</span>
epgdata.pin = <span class="org-type">{{</span> <span class="org-variable-name">epgd_epgdata_pin</span> <span class="org-type">}}</span>
# Download timeout <span class="org-builtin">in</span> seconds (default 180)
epgdata.timeout = <span class="org-type">{{</span> <span class="org-variable-name">epgd_epgdata_timeout</span> <span class="org-type">}}</span>
</pre>
</div>
</div>
</li>
</ol>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgbcdde5f" class="outline-3">
<h3 id="orgbcdde5f"><span class="section-number-3">7.35</span> install-sundtek</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-35">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org9110073" class="outline-4">
<h4 id="org9110073"><span class="section-number-4">7.35.1</span> dependencies</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-35-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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org4d25b29" class="outline-4">
<h4 id="org4d25b29"><span class="section-number-4">7.35.2</span> defaults</h4>
2019-05-15 19:55:51 +02:00
<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-comment-delimiter"># </span><span class="org-comment">file: roles/install-sundtek/defaults/main.yml</span>
<span class="org-variable-name">sundtek</span>:
<span class="org-variable-name">install</span>: auto
<span class="org-variable-name">wait_for_devices</span>: <span class="org-constant">true</span>
<span class="org-variable-name">wait_for_network</span>: <span class="org-constant">false</span>
</pre>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgcd28937" class="outline-4">
<h4 id="orgcd28937"><span class="section-number-4">7.35.3</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-35-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/install-sundtek/tasks/main.yml</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">TODO: include LD_PRELOAD and other dependencies in yavdr-hardware-sundtek package</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">- name: apt | install yavdr-hardware-sundtek</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">apt:</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">name: yavdr-hardware-sundtek</span>
- <span class="org-variable-name">name</span>: expand template for custom sundtek.service
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/systemd/sundtek.service.j2
<span class="org-variable-name">dest</span>: /etc/systemd/systemd/sundtek.service
<span class="org-variable-name">when</span>: sundtek.install
- <span class="org-variable-name">name</span>: apt | install sundtek dvb driver
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>: dvb-driver-sundtek
<span class="org-variable-name">state</span>: present
<span class="org-variable-name">when</span>: sundtek.install
<span class="org-comment-delimiter"># </span><span class="org-comment">TODO: state should depend on sundtek.install:</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">'{{ "present" if sundtek.install else "absent" }}'</span>
- <span class="org-variable-name">name</span>: apt | install vdr-plugins for dynamic sundtek configuration else uninstall
<span class="org-variable-name">apt</span>:
<span class="org-variable-name">name</span>:
- vdr-plugin-dynamite
- vdr-plugin-sundtek
<span class="org-variable-name">state</span>: <span class="org-string">'{{ "absent" if sundtek.wait_for_devices else "present" }}'</span>
<span class="org-variable-name">when</span>: sundtek.install
- <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">when</span>: sundtek.install
<span class="org-comment-delimiter"># </span><span class="org-comment">TODO: Scan for local and remote sundtek sticks and create</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">/etc/sundtek.conf - needs yavdr-hardware-sundtek</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">- name: detect local and remote sundtek devices</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">command: scansundtek</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">register: sundtek_scan</span>
<span class="org-comment-delimiter"># </span>
<span class="org-comment-delimiter"># </span><span class="org-comment">- name: set variable sundtek_scan</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">set_fact:</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">sundtek_devices: "{{ sundtek_scan.stdout | from_json }}"</span>
<span class="org-comment-delimiter">#</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">- name: create /etc/sundtek.conf</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">template:</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">src: templates/sundtek.conf.j2</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">dest: /etc/sundtek.conf</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">notify: Restart sundtek.service</span>
- <span class="org-variable-name">name</span>: set LD_PRELOAD for sundtek driver to VDR's environment
<span class="org-variable-name">template</span>:
<span class="org-variable-name">src</span>: templates/systemd/vdr.service.d/sundtek.conf.j2
<span class="org-variable-name">dest</span>: /etc/systemd/system/vdr.service.d/sundtek_LD_PRELOAD.conf
<span class="org-variable-name">notify</span>: [<span class="org-string">'Restart VDR'</span>]
<span class="org-comment-delimiter"># </span><span class="org-comment">TODO: enable sundtek-avahi-mounter (needs to be ported to python3 and </span>
<span class="org-comment-delimiter"># </span><span class="org-comment">work indenpendently of yavdrhw.db files)</span>
<span class="org-comment-delimiter">#</span><span class="org-comment">- name: systemd | start sundtek-avahi-mounter.service</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">systemd:</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">name: sundtek-avahi-mounter.service</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">state: started</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">masked: no</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">enabled: yes</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">daemon-reload: yes</span>
</pre>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgdd61c87" class="outline-4">
<h4 id="orgdd61c87"><span class="section-number-4">7.35.4</span> templates</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-35-4">
</div>
<ol class="org-ol">
2019-05-20 21:36:57 +02:00
<li><a id="orgd042880"></a>LD_PRELOAD for vdr.service<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-35-4-1">
<div class="org-src-container">
<pre class="src src-systemd">{{ ansible_managed | comment }}
{% if sundtek.install %}
<span class="org-type">[Service]</span>
<span class="org-keyword">Environment</span>=LD_PRELOAD=/opt/lib/libmediaclient.so
{% endif %}
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="org41877c4"></a>/etc/systemd/system/sundtek.service<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-35-4-2">
<div class="org-src-container">
<pre class="src src-systemd">{{ ansible_managed | comment }}
<span class="org-type">[Unit]</span>
<span class="org-keyword">Description</span>=Sundtek mediasrv
{% if sundtek.wait_for_network %}
<span class="org-keyword">After</span>=network-online.target
{% endif %}
<span class="org-keyword">Before</span>=vdr.service
<span class="org-type">[Service]</span>
<span class="org-keyword">Type</span>=<span class="org-builtin">forking</span>
<span class="org-keyword">ExecStart</span>=/opt/bin/mediasrv -d --pluginpath=/opt/bin {% if sundtek.wait_for_devices %}--wait-for-devices{% endif%}
<span class="org-keyword">ExecStop</span>=/opt/bin/mediaclient --shutdown
<span class="org-keyword">Restart</span>=<span class="org-builtin">on-failure</span>
<span class="org-type">[Install]</span>
<span class="org-keyword">WantedBy</span>=multi-user.target
</pre>
</div>
</div>
</li>
2019-05-20 21:36:57 +02:00
<li><a id="org34902e8"></a>/etc/sundtek.conf<br />
2019-05-15 19:55:51 +02:00
<div class="outline-text-5" id="text-7-35-4-3">
<div class="org-src-container">
<pre class="src src-jinja2"><span class="org-type">{{</span> <span class="org-variable-name">ansible_managed </span><span class="org-keyword">| </span><span class="org-warning">comment</span> <span class="org-type">}}</span>
# ----- GLOBAL SECTION -----
#<span class="org-builtin">Set</span> loglevel <span class="org-keyword">for</span> logging to /var/log/mediasrv.log
#autoupdate=[on<span class="org-keyword">|</span><span class="org-warning">off</span>] #enable automatic driver update, default off
autoupdate=off
#loglevel=[off<span class="org-keyword">|</span><span class="org-warning">min</span><span class="org-keyword">|</span><span class="org-warning">full</span>] #default: off
#max .. little bit more
loglevel=off
#pluginpath=/path/to/drivers #<span class="org-builtin">set</span> path to drivers
#dvb_api_version=x.y #default API version will be parsed <span class="org-builtin">from</span>
#/usr/<span class="org-builtin">include</span>/linux/dvb/version.h, <span class="org-keyword">if</span> no such file <span class="org-builtin">is</span>
#available the latest internally supported API ::version will be
#used (which will be quite new)
#audio_skip_bytes=N #when changing analogTV channels,
#skip N bytes to suppress audio noise
#bulk_notification[on<span class="org-keyword">|</span><span class="org-warning">off</span>] #default off, bulk_notification will only trigger device_attach once
#after the the first device scan when the driver <span class="org-builtin">is</span> started up
#after this first scan, the notification will be triggered
#normally again <span class="org-keyword">for</span> each device.
#
#<span class="org-keyword">for</span> example when 2 devices are attached to the system only one
#notification will be triggered initially, any at a later time
#attached device will generate another device_attach notification
#by default each device will <span class="org-keyword">call</span> the script which <span class="org-builtin">is</span> <span class="org-builtin">set</span> up <span class="org-keyword">with</span>
#device_attach
#use_tvvideo=[on<span class="org-keyword">|</span><span class="org-warning">off</span>] #use /dev/tvvideoN instead of /dev/video
#this works around a new Adobe Flash bug <span class="org-builtin">in</span> 2012, where flash crashes
#<span class="org-keyword">if</span> files (/dev/videoN) other than /dev/video0 are available
#use_hwpidfilter=[on<span class="org-keyword">|</span><span class="org-warning">off</span>] #<span class="org-keyword">For</span> DVB-C, DVB-T, DVB-S/S2
#enable PID <span class="org-keyword">filter</span>, please be careful <span class="org-keyword">with</span> that, there are only 15 HW Pid filters available
#when more than 15 pids are <span class="org-builtin">set</span> up the pid <span class="org-keyword">filter</span> will be disabled automatically
#dmhwpidfilter=[on<span class="org-keyword">|</span><span class="org-warning">off</span>] #default on, <span class="org-builtin">in</span> some cases off might be useful to disable hw pid <span class="org-keyword">filter</span> <span class="org-keyword">for</span> settopboxes
#<span class="org-keyword">if</span> you get a black image when capturing a TV channel <span class="org-builtin">and</span> watching another channel on the
#same transponder - try this option <span class="org-builtin">and</span> reboot
#usb_transaction_delay=[0-20] #throttle the USB setup transactions, this can solve problems <span class="org-keyword">with</span> weak USB stacks <span class="org-keyword">for</span>
#example <span class="org-keyword">for</span> embedded boards, unit <span class="org-builtin">is</span> milliseconds
#usb_timeout=[0 - N] #USB timeout <span class="org-keyword">for</span> each transaction <span class="org-builtin">in</span> milliseconds, 0 default infinite
#voltage_tone_off=[1 <span class="org-builtin">or</span> 0] #0 .. default, normal behaviour
#1 .. force DVB-S/S2 to <span class="org-builtin">not</span> use any Voltage <span class="org-builtin">or</span> Tone (<span class="org-builtin">ignore</span> any user parameters)
#ir_disabled=[1 <span class="org-builtin">or</span> 0] #0 .. enable remote control polling, the driver will permanently check <span class="org-keyword">for</span> remote control keys
#1 .. disable remote control polling, might fix bugs <span class="org-keyword">with</span> weak USB stacks on embedded boards
#
#Enable listening on network
#enablenetwork=[on<span class="org-keyword">|</span><span class="org-warning">off</span>] #default: off
#Lowest adapter number to start <span class="org-keyword">with</span>, e.g. /dev/dvb/adapter5/frontend0
#first_adapter=5
#<span class="org-keyword">Call</span> attach script when new device appears
#device_attach=[PATH_TO_SCRIPT] [PARAMETER<span class="org-keyword">|</span><span class="org-warning">DEVID</span>] #"DEVID" will automatically be replaced <span class="org-keyword">with</span> the device ID
device_attach=/usr/bin/sundtek_attach
#<span class="org-keyword">Call</span> detach script when device disappears
#device_detach=[PATH_TO_SCRIPT] [PARAMETER<span class="org-keyword">|</span><span class="org-warning">DEVID</span>] #"DEVID" will automatically be replaced <span class="org-keyword">with</span> the device ID
device_detach=/usr/bin/sundtek_detach
<span class="org-function-name">{%</span> <span class="org-keyword">if</span> sundtek_devices <span class="org-builtin">is</span> definded <span class="org-function-name">%}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">for</span> device <span class="org-builtin">in</span> sundtek_devices.local <span class="org-function-name">%}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">if</span> device.serial <span class="org-builtin">is</span> defined <span class="org-function-name">%}</span>
[<span class="org-type">{{</span> <span class="org-variable-name">device.serial</span> <span class="org-type">}}</span>]
#Infrared protocol to use
#ir_protocol=[RC5<span class="org-keyword">|</span><span class="org-warning">NEC</span><span class="org-keyword">|</span><span class="org-warning">RC6</span>] #default: NEC
<span class="org-function-name">{%</span> <span class="org-keyword">if</span> device.ir_protocol<span class="org-keyword">|</span><span class="org-function-name">default</span>(<span class="org-string">""</span>) <span class="org-function-name">%}</span>
ir_protocol=<span class="org-type">{{</span> <span class="org-variable-name">device.ir_protocol</span> <span class="org-type">}}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>
#Keymap to use, e.g. "/lib/udev/rc_keymaps/vp702x"
#rcmap=[PATH_TO_KEYMAP] #default: keymap which comes <span class="org-keyword">with</span> the device
<span class="org-function-name">{%</span> <span class="org-keyword">if</span> device.rcmap<span class="org-keyword">|</span><span class="org-function-name">default</span>(<span class="org-string">""</span>) <span class="org-function-name">%}</span>
rcmap=<span class="org-type">{{</span> <span class="org-variable-name">device.rcmap</span> <span class="org-type">}}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>
#Choose initial DVB mode <span class="org-keyword">for</span> hybrid DVB-T/DVB-C devices only
#initial_dvb_mode=[DVBC<span class="org-keyword">|</span><span class="org-warning">DVBT</span>]
<span class="org-function-name">{%</span> <span class="org-keyword">if</span> device.initial_dvb_mode<span class="org-keyword">|</span><span class="org-function-name">default</span>(<span class="org-string">""</span>) <span class="org-function-name">%}</span>
initial_dvb_mode=<span class="org-type">{{</span> <span class="org-variable-name">device.dvb_mode</span> <span class="org-type">}}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>
#<span class="org-keyword">Call</span> attach script when new device appears
#device_attach=[PATH_TO_SCRIPT] [PARAMETER<span class="org-keyword">|</span><span class="org-warning">DEVID</span>] #"DEVID" will automatically be replaced <span class="org-keyword">with</span> the device ID
device_attach=/usr/bin/sundtek_attach
#<span class="org-keyword">Call</span> detach script when device disappears
#device_detach=[PATH_TO_SCRIPT] [PARAMETER<span class="org-keyword">|</span><span class="org-warning">DEVID</span>] #"DEVID" will automatically be replaced <span class="org-keyword">with</span> the device ID
device_detach=/usr/bin/sundtek_detach
<span class="org-function-name">{%</span> <span class="org-keyword">if</span> device.capabilites.analog_tv <span class="org-function-name">%}</span>
disable_analogtv=1 #disable initialization of analogTV Frontend
<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">endfor</span> <span class="org-function-name">%}</span>
<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>
</pre>
</div>
</div>
</li>
</ol>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org631985b" class="outline-3">
<h3 id="org631985b"><span class="section-number-3">7.36</span> template-test</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-36">
<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"><span class="org-rainbow-delimiters-depth-1">{</span><span class="org-rainbow-delimiters-depth-2">{</span> ansible_managed | comment <span class="org-rainbow-delimiters-depth-2">}</span><span class="org-rainbow-delimiters-depth-1">}</span>
Section <span class="org-string">"ServerLayout"</span>
Identifier <span class="org-string">"Layout0"</span>
Screen 0 <span class="org-string">"Screen0"</span>
<span class="org-rainbow-delimiters-depth-1">{</span>% if system.x11.dualhead.enabled %<span class="org-rainbow-delimiters-depth-1">}</span>
Screen 1 <span class="org-string">"Screen1"</span> RightOf <span class="org-string">"Screen0"</span>
<span class="org-rainbow-delimiters-depth-1">{</span>% endif %<span class="org-rainbow-delimiters-depth-1">}</span>
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>
<span class="org-rainbow-delimiters-depth-1">{</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> %<span class="org-rainbow-delimiters-depth-1">}</span>
HorizSync 14-17
VertRefresh 49-61
<span class="org-rainbow-delimiters-depth-1">{</span>% if system.x11.display.0.default == <span class="org-string">"VGA2Scart_4_3"</span> %<span class="org-rainbow-delimiters-depth-1">}</span>
Modeline <span class="org-string">"VGA2Scart_4_3"</span> 13.875 720 744 808 888 576 580 585 625 -HSync -Vsync interlace
<span class="org-rainbow-delimiters-depth-1">{</span>% elif system.x11.display.0.default == <span class="org-string">"VGA2Scart_16_9"</span> %<span class="org-rainbow-delimiters-depth-1">}</span>
Modeline <span class="org-string">"VGA2Scart_16_9"</span> 19 1024 1032 1120 1216 576 581 586 625 -Hsync -Vsync interlace
<span class="org-rainbow-delimiters-depth-1">{</span>% endif %<span class="org-rainbow-delimiters-depth-1">}</span>
<span class="org-rainbow-delimiters-depth-1">{</span>% endif %<span class="org-rainbow-delimiters-depth-1">}</span>
Option <span class="org-string">"DPMS"</span>
Option <span class="org-string">"ExactModeTimingsDVI"</span> <span class="org-string">"True"</span>
EndSection
<span class="org-rainbow-delimiters-depth-1">{</span>% if system.x11.dualhead.enabled == <span class="org-string">"1"</span> %<span class="org-rainbow-delimiters-depth-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>
<span class="org-rainbow-delimiters-depth-1">{</span>% if system.x11.display.1.default<span class="org-keyword"> in</span> <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">"VGA2Scart_4_3"</span>, <span class="org-string">"VGA2Scart_16_9"</span><span class="org-rainbow-delimiters-depth-2">)</span> %<span class="org-rainbow-delimiters-depth-1">}</span>
HorizSync 14-17
VertRefresh 49-61
<span class="org-rainbow-delimiters-depth-1">{</span>% if system.x11.display.1.default == <span class="org-string">"VGA2Scart_4_3"</span> %<span class="org-rainbow-delimiters-depth-1">}</span>
Modeline <span class="org-string">"VGA2Scart_4_3"</span> 13.875 720 744 808 888 576 580 585 625 -HSync -Vsync interlace
<span class="org-rainbow-delimiters-depth-1">{</span>% elif system.x11.display.1.default == <span class="org-string">"VGA2Scart_16_9"</span> %<span class="org-rainbow-delimiters-depth-1">}</span>
Modeline <span class="org-string">"VGA2Scart_16_9"</span> 19 1024 1032 1120 1216 576 581 586 625 -Hsync -Vsync interlace
<span class="org-rainbow-delimiters-depth-1">{</span>% endif %<span class="org-rainbow-delimiters-depth-1">}</span>
Option <span class="org-string">"DPMS"</span>
Option <span class="org-string">"ExactModeTimingsDVI"</span> <span class="org-string">"True"</span>
<span class="org-rainbow-delimiters-depth-1">{</span>% endif %<span class="org-rainbow-delimiters-depth-1">}</span>
EndSection
<span class="org-rainbow-delimiters-depth-1">{</span>% endif %<span class="org-rainbow-delimiters-depth-1">}</span>
Section <span class="org-string">"Device"</span>
Identifier <span class="org-string">"Device0"</span>
<span class="org-rainbow-delimiters-depth-1">{</span>% if system.hardware.nvidia.detected %<span class="org-rainbow-delimiters-depth-1">}</span>
Driver <span class="org-string">"nvidia"</span>
VendorName <span class="org-string">"NVIDIA Corporation"</span>
<span class="org-rainbow-delimiters-depth-1">{</span>% endif %<span class="org-rainbow-delimiters-depth-1">}</span>
Screen 0
Option <span class="org-string">"DPI"</span> <span class="org-string">"100x100"</span>
<span class="org-rainbow-delimiters-depth-1">{</span>% if system.hardware.nvidia.busid %<span class="org-rainbow-delimiters-depth-1">}</span>
BusID <span class="org-string">"PCI: {{ system.hardware.nvidia.busid }}"</span>
<span class="org-rainbow-delimiters-depth-1">{</span>% endif %<span class="org-rainbow-delimiters-depth-1">}</span>
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
<span class="org-rainbow-delimiters-depth-1">{</span>% if system.x11.dualhead.enabled == <span class="org-string">"1"</span> %<span class="org-rainbow-delimiters-depth-1">}</span>
Section <span class="org-string">"Device"</span>
Identifier <span class="org-string">"Device1"</span>
<span class="org-rainbow-delimiters-depth-1">{</span>% if system.hardware.nvidia.detected %<span class="org-rainbow-delimiters-depth-1">}</span>
Driver <span class="org-string">"nvidia"</span>
VendorName <span class="org-string">"NVIDIA Corporation"</span>
<span class="org-rainbow-delimiters-depth-1">{</span>% endif %<span class="org-rainbow-delimiters-depth-1">}</span>
Screen 1
<span class="org-rainbow-delimiters-depth-1">{</span>% if system.hardware.nvidia.busid %<span class="org-rainbow-delimiters-depth-1">}</span>
BusID <span class="org-string">"PCI: {{ system.hardware.nvidia.busid }}"</span>
<span class="org-rainbow-delimiters-depth-1">{</span>% endif %<span class="org-rainbow-delimiters-depth-1">}</span>
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
<span class="org-rainbow-delimiters-depth-1">{</span>% endif %<span class="org-rainbow-delimiters-depth-1">}</span>
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
<span class="org-rainbow-delimiters-depth-1">{</span>% if system.x11.display.0.default is defined and system.x11.display.0.default %<span class="org-rainbow-delimiters-depth-1">}</span>
Modes <span class="org-string">"{{ system.x11.display.0.default }}"</span><span class="org-rainbow-delimiters-depth-1">{</span>% for mode<span class="org-keyword"> in</span> system.x11.display.0.mode %<span class="org-rainbow-delimiters-depth-1">}{</span>% if mode != system.x11.display.0.default %<span class="org-rainbow-delimiters-depth-1">}</span> <span class="org-string">"{{ mode }}"</span><span class="org-rainbow-delimiters-depth-1">{</span>% endif %<span class="org-rainbow-delimiters-depth-1">}{</span>% endfor %<span class="org-rainbow-delimiters-depth-1">}</span>
<span class="org-rainbow-delimiters-depth-1">{</span>% elif system.hardware.nvidia.detected == 1 %<span class="org-rainbow-delimiters-depth-1">}</span>
Modes <span class="org-string">"nvidia-auto-select"</span>
<span class="org-rainbow-delimiters-depth-1">{</span>% endif %<span class="org-rainbow-delimiters-depth-1">}</span>
EndSubSection
<span class="org-rainbow-delimiters-depth-1">{</span>% if system.x11.display.0.default or system.x11.default %<span class="org-rainbow-delimiters-depth-1">}</span>
<span class="org-rainbow-delimiters-depth-1">{</span>% if system.x11.display.0.device is defined and system.x11.display.0.device %<span class="org-rainbow-delimiters-depth-1">}</span>
Option <span class="org-string">"ConnectedMonitor"</span> <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-rainbow-delimiters-depth-2">{</span> system.x11.display.0.device <span class="org-rainbow-delimiters-depth-2">}</span><span class="org-rainbow-delimiters-depth-1">}</span>
<span class="org-rainbow-delimiters-depth-1">{</span>% else %<span class="org-rainbow-delimiters-depth-1">}</span>
Option <span class="org-string">"ConnectedMonitor"</span> <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-rainbow-delimiters-depth-2">{</span> system.x11.default <span class="org-rainbow-delimiters-depth-2">}</span><span class="org-rainbow-delimiters-depth-1">}</span>
<span class="org-rainbow-delimiters-depth-1">{</span>% endif %<span class="org-rainbow-delimiters-depth-1">}</span>
<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>
<span class="org-rainbow-delimiters-depth-1">{</span>% endif %<span class="org-rainbow-delimiters-depth-1">}</span>
EndSection
<span class="org-rainbow-delimiters-depth-1">{</span>% if system.x11.dualhead.enabled == <span class="org-string">"1"</span> %<span class="org-rainbow-delimiters-depth-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
<span class="org-rainbow-delimiters-depth-1">{</span>% if system.x11.display.0.default is defined and system.x11.display.0.default %<span class="org-rainbow-delimiters-depth-1">}</span>
Modes <span class="org-string">"{{ system.x11.display.1.default }}"</span><span class="org-rainbow-delimiters-depth-1">{</span>% for mode<span class="org-keyword"> in</span> system.x11.display.1.mode %<span class="org-rainbow-delimiters-depth-1">}{</span>% if mode != system.x11.display.1.default %<span class="org-rainbow-delimiters-depth-1">}</span> <span class="org-string">"{{ mode }}"</span><span class="org-rainbow-delimiters-depth-1">{</span>% endif %<span class="org-rainbow-delimiters-depth-1">}{</span>% endfor %<span class="org-rainbow-delimiters-depth-1">}</span>
<span class="org-rainbow-delimiters-depth-1">{</span>% elif system.hardware.nvidia.detected == <span class="org-string">"1"</span> %<span class="org-rainbow-delimiters-depth-1">}</span>
Modes <span class="org-string">"nvidia-auto-select"</span>
<span class="org-rainbow-delimiters-depth-1">{</span>% endif %<span class="org-rainbow-delimiters-depth-1">}</span>
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
<span class="org-rainbow-delimiters-depth-1">{</span>% endif %<span class="org-rainbow-delimiters-depth-1">}</span>
<span class="org-rainbow-delimiters-depth-1">{</span>% if not system.x11.use_compositing %<span class="org-rainbow-delimiters-depth-1">}</span>
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
<span class="org-rainbow-delimiters-depth-1">{</span>% endif %<span class="org-rainbow-delimiters-depth-1">}</span>
</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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org7384de1" class="outline-3">
<h3 id="org7384de1"><span class="section-number-3">7.37</span> wakeup</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-37">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgbaf8c56" class="outline-4">
<h4 id="orgbaf8c56"><span class="section-number-4">7.37.1</span> defaults</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-37-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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org264a220" class="outline-4">
<h4 id="org264a220"><span class="section-number-4">7.37.2</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-37-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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org2daa50d" class="outline-4">
<h4 id="org2daa50d"><span class="section-number-4">7.37.3</span> templates</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-37-3">
<div class="org-src-container">
<pre class="src src-jinja2"><span class="org-type">{{</span> <span class="org-variable-name">ansible_managed </span><span class="org-keyword">| </span><span class="org-warning">comment</span> <span class="org-type">}}</span>
# Activate/deactivate ACPIWakeup <span class="org-keyword">with</span> yes/no:
<span class="org-variable-name">ACPI_ENABLED</span>="<span class="org-function-name">{%</span> <span class="org-keyword">if</span> wakeup_method == 'acpiwakeup' <span class="org-function-name">%}</span>yes<span class="org-function-name">{%</span> <span class="org-keyword">else</span> <span class="org-function-name">%}</span>no<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>"
# How many minutes should the machine wake up before the timer starts:
ACPI_START_AHEAD=5
# <span class="org-keyword">If</span> you want your VDR machine to wakeup <span class="org-builtin">in</span> regular intervals (i.e. <span class="org-keyword">for</span>
# updating EPG data), specify the days of the week <span class="org-builtin">and</span> the wakeup time.
#
# Days of the week <span class="org-keyword">for</span> regular wakeup (<span class="org-builtin">not</span> <span class="org-builtin">set</span>=Disabled, 1=Monday...7=Sunday)
# <span class="org-variable-name">ACPI_REGULAR_DAYS</span>="1 2 3 4 5 6 7"
# Wakeup time
#ACPI_REGULAR_TIME=01:00 # HH:MM
</pre>
</div>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org0665d00" class="outline-3">
<h3 id="org0665d00"><span class="section-number-3">7.38</span> grub-config</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-7-38">
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org37ee2ea" class="outline-4">
<h4 id="org37ee2ea"><span class="section-number-4">7.38.1</span> default variables</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-38-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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org438cd38" class="outline-4">
<h4 id="org438cd38"><span class="section-number-4">7.38.2</span> tasks</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-38-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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org04478ca" class="outline-4">
<h4 id="org04478ca"><span class="section-number-4">7.38.3</span> templates</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-38-3">
<div class="org-src-container">
<pre class="src src-jinja2">#!/bin/sh
<span class="org-type">{{</span> <span class="org-variable-name">ansible_managed </span><span class="org-keyword">| </span><span class="org-warning">comment</span> <span class="org-type">}}</span>
exec tail -n +3 $0
<span class="org-function-name">{%</span> <span class="org-keyword">if</span> system.shutdown <span class="org-builtin">is</span> defined <span class="org-builtin">and</span> system.shutdown == 'reboot' <span class="org-function-name">%}</span>
menuentry "PowerOff" {
halt
}
<span class="org-function-name">{%</span> <span class="org-keyword">endif</span> <span class="org-function-name">%}</span>
<span class="org-keyword">if</span> [ <span class="org-string">"${recordfail}"</span> = 1 ]; then
<span class="org-builtin">set</span> timeout=<span class="org-type">{{</span> <span class="org-variable-name">3 if grub.timeout &lt; 3 else grub.timeout</span> <span class="org-type">}}</span>
<span class="org-keyword">else</span>
<span class="org-builtin">set</span> timeout=<span class="org-type">{{</span> <span class="org-variable-name">grub.timeout if grub.timeout is defined else 0</span> <span class="org-type">}}</span>
fi
</pre>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgd9579a3" class="outline-4">
<h4 id="orgd9579a3"><span class="section-number-4">7.38.4</span> handlers</h4>
2019-05-15 19:55:51 +02:00
<div class="outline-text-4" id="text-7-38-4">
<div class="org-src-container">
<pre class="src src-yaml"><span class="org-comment">---</span>
- <span class="org-variable-name">name</span>: Update Initramfs
<span class="org-variable-name">command</span>: <span class="org-string">"update-initramfs -u"</span>
<span class="org-variable-name">failed_when</span>: (<span class="org-string">'error'</span> in initramfs_register_update.stderr)
<span class="org-variable-name">register</span>: initramfs_register_update
- <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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgd01948d" class="outline-2">
<h2 id="orgd01948d"><span class="section-number-2">8</span> Modules</h2>
2019-05-15 19:55:51 +02:00
<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>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org70dcd2b" class="outline-3">
<h3 id="org70dcd2b"><span class="section-number-3">8.1</span> hardware_facts.py</h3>
2019-05-15 19:55:51 +02:00
<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-rainbow-delimiters-depth-1">(</span><span class="org-string">"PCIDevice"</span>, <span class="org-string">'idVendor idProduct idClass pciPath'</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">vendor_dict</span> = <span class="org-rainbow-delimiters-depth-1">{</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-rainbow-delimiters-depth-1">}</span>
<span class="org-keyword">def</span> <span class="org-function-name">get_pci_devices</span><span class="org-rainbow-delimiters-depth-1">()</span>:
<span class="org-keyword">for</span> device <span class="org-keyword">in</span> chain<span class="org-rainbow-delimiters-depth-1">(</span>glob.glob<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">'/sys/devices/pci*/*:*:*/'</span><span class="org-rainbow-delimiters-depth-2">)</span>, glob.glob<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">'/sys/devices/pci*/*:*:*/*:*:*/'</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>:
<span class="org-keyword">try</span>:
<span class="org-keyword">with</span> <span class="org-builtin">open</span><span class="org-rainbow-delimiters-depth-1">(</span>os.path.join<span class="org-rainbow-delimiters-depth-2">(</span>device, <span class="org-string">'device'</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> <span class="org-keyword">as</span> d:
<span class="org-variable-name">product_id</span> = <span class="org-builtin">int</span><span class="org-rainbow-delimiters-depth-1">(</span>d.read<span class="org-rainbow-delimiters-depth-2">()</span>.strip<span class="org-rainbow-delimiters-depth-2">()</span>, 16<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">with</span> <span class="org-builtin">open</span><span class="org-rainbow-delimiters-depth-1">(</span>os.path.join<span class="org-rainbow-delimiters-depth-2">(</span>device, <span class="org-string">'vendor'</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> <span class="org-keyword">as</span> d:
<span class="org-variable-name">vendor_id</span> = <span class="org-builtin">int</span><span class="org-rainbow-delimiters-depth-1">(</span>d.read<span class="org-rainbow-delimiters-depth-2">()</span>.strip<span class="org-rainbow-delimiters-depth-2">()</span>, 16<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">with</span> <span class="org-builtin">open</span><span class="org-rainbow-delimiters-depth-1">(</span>os.path.join<span class="org-rainbow-delimiters-depth-2">(</span>device, <span class="org-string">'class'</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> <span class="org-keyword">as</span> d:
<span class="org-variable-name">class_id</span> = <span class="org-builtin">int</span><span class="org-rainbow-delimiters-depth-1">(</span>d.read<span class="org-rainbow-delimiters-depth-2">()</span>.strip<span class="org-rainbow-delimiters-depth-2">()</span>, 16<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">yield</span> PCIDevice<span class="org-rainbow-delimiters-depth-1">(</span>idVendor=vendor_id, idProduct=product_id, idClass=class_id, pciPath=device<span class="org-rainbow-delimiters-depth-1">)</span>
<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><span class="org-rainbow-delimiters-depth-1">(</span>iterator<span class="org-rainbow-delimiters-depth-1">)</span>:
<span class="org-keyword">return</span> <span class="org-rainbow-delimiters-depth-1">[</span><span class="org-string">"{:04x}:{:04x}"</span>.<span class="org-builtin">format</span><span class="org-rainbow-delimiters-depth-2">(</span>d.idVendor, d.idProduct<span class="org-rainbow-delimiters-depth-2">)</span> <span class="org-keyword">for</span> d <span class="org-keyword">in</span> iterator<span class="org-rainbow-delimiters-depth-1">]</span>
<span class="org-keyword">def</span> <span class="org-function-name">format_gpu_device_list</span><span class="org-rainbow-delimiters-depth-1">(</span>iterator<span class="org-rainbow-delimiters-depth-1">)</span>:
<span class="org-keyword">def</span> <span class="org-function-name">get_entries</span><span class="org-rainbow-delimiters-depth-1">(</span>iterator<span class="org-rainbow-delimiters-depth-1">)</span>:
<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-rainbow-delimiters-depth-1">{</span><span class="org-string">"VendorName"</span>: vendor_dict.get<span class="org-rainbow-delimiters-depth-2">(</span>d.idVendor, <span class="org-string">"unknown"</span><span class="org-rainbow-delimiters-depth-2">)</span>,
<span class="org-string">"VendorID"</span>: d.idVendor, <span class="org-string">"ProductID"</span>: d.idProduct<span class="org-rainbow-delimiters-depth-1">}</span>
<span class="org-keyword">return</span> <span class="org-rainbow-delimiters-depth-1">[</span>entry <span class="org-keyword">for</span> entry <span class="org-keyword">in</span> get_entries<span class="org-rainbow-delimiters-depth-2">(</span>iterator<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">]</span>
<span class="org-keyword">def</span> <span class="org-function-name">list_acpi_power_modes</span><span class="org-rainbow-delimiters-depth-1">()</span>:
<span class="org-variable-name">acpi_power_modes</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>
<span class="org-keyword">try</span>:
<span class="org-keyword">with</span> <span class="org-builtin">open</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'/sys/power/state'</span><span class="org-rainbow-delimiters-depth-1">)</span> <span class="org-keyword">as</span> f:
<span class="org-variable-name">acpi_power_modes</span> = <span class="org-rainbow-delimiters-depth-1">[</span>l <span class="org-keyword">for</span> l <span class="org-keyword">in</span> f.readline<span class="org-rainbow-delimiters-depth-2">()</span>.split<span class="org-rainbow-delimiters-depth-2">()</span><span class="org-rainbow-delimiters-depth-1">]</span>
<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-rainbow-delimiters-depth-1">{</span>
<span class="org-string">'usb'</span>: <span class="org-builtin">dict</span><span class="org-rainbow-delimiters-depth-2">(</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-rainbow-delimiters-depth-2">)</span>,
<span class="org-string">'pci'</span>: <span class="org-builtin">dict</span><span class="org-rainbow-delimiters-depth-2">(</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-rainbow-delimiters-depth-2">)</span>,
<span class="org-string">'modules'</span>: <span class="org-builtin">dict</span><span class="org-rainbow-delimiters-depth-2">(</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-rainbow-delimiters-depth-2">)</span>,
<span class="org-string">'gpus'</span>: <span class="org-builtin">dict</span><span class="org-rainbow-delimiters-depth-2">(</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-rainbow-delimiters-depth-2">)</span>,
<span class="org-string">'acpi_power_modes'</span>: <span class="org-builtin">dict</span><span class="org-rainbow-delimiters-depth-2">(</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-rainbow-delimiters-depth-2">)</span>,
<span class="org-rainbow-delimiters-depth-1">}</span>
<span class="org-keyword">def</span> <span class="org-function-name">main</span><span class="org-rainbow-delimiters-depth-1">()</span>:
<span class="org-variable-name">module</span> = AnsibleModule<span class="org-rainbow-delimiters-depth-1">(</span>argument_spec=arg_specs, supports_check_mode=<span class="org-constant">True</span>,<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">collect_usb</span> = module.params<span class="org-rainbow-delimiters-depth-1">[</span><span class="org-string">'usb'</span><span class="org-rainbow-delimiters-depth-1">]</span>
<span class="org-variable-name">collect_pci</span> = module.params<span class="org-rainbow-delimiters-depth-1">[</span><span class="org-string">'pci'</span><span class="org-rainbow-delimiters-depth-1">]</span>
<span class="org-variable-name">collect_modules</span> = module.params<span class="org-rainbow-delimiters-depth-1">[</span><span class="org-string">'modules'</span><span class="org-rainbow-delimiters-depth-1">]</span>
<span class="org-variable-name">collect_gpus</span> = module.params<span class="org-rainbow-delimiters-depth-1">[</span><span class="org-string">'gpus'</span><span class="org-rainbow-delimiters-depth-1">]</span>
<span class="org-variable-name">collect_acpi_power_modes</span> = module.params<span class="org-rainbow-delimiters-depth-1">[</span><span class="org-string">'acpi_power_modes'</span><span class="org-rainbow-delimiters-depth-1">]</span>
<span class="org-variable-name">usb_devices</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>
<span class="org-variable-name">pci_devices</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>
<span class="org-variable-name">modules</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>
<span class="org-variable-name">gpus</span> = <span class="org-rainbow-delimiters-depth-1">[]</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-rainbow-delimiters-depth-1">[]</span>
<span class="org-keyword">if</span> collect_usb:
<span class="org-variable-name">usb_devices</span> = format_device_list<span class="org-rainbow-delimiters-depth-1">(</span>usb.core.find<span class="org-rainbow-delimiters-depth-2">(</span>find_all=<span class="org-constant">True</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">if</span> collect_pci:
<span class="org-variable-name">pci_devices</span> = format_device_list<span class="org-rainbow-delimiters-depth-1">(</span>get_pci_devices<span class="org-rainbow-delimiters-depth-2">()</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">if</span> collect_modules:
<span class="org-variable-name">k</span> = kmodpy.Kmod<span class="org-rainbow-delimiters-depth-1">()</span>
<span class="org-variable-name">modules</span> = <span class="org-rainbow-delimiters-depth-1">[</span>m<span class="org-rainbow-delimiters-depth-2">[</span>0<span class="org-rainbow-delimiters-depth-2">]</span> <span class="org-keyword">for</span> m <span class="org-keyword">in</span> k.loaded<span class="org-rainbow-delimiters-depth-2">()</span><span class="org-rainbow-delimiters-depth-1">]</span>
<span class="org-keyword">if</span> collect_gpus:
<span class="org-variable-name">gpus</span> = format_gpu_device_list<span class="org-rainbow-delimiters-depth-1">(</span>get_pci_devices<span class="org-rainbow-delimiters-depth-2">()</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">nvidia_detected</span> = <span class="org-builtin">any</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">(</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-rainbow-delimiters-depth-3">[</span><span class="org-string">'VendorName'</span><span class="org-rainbow-delimiters-depth-3">]</span> == <span class="org-string">'nvidia'</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">intel_detected</span> = <span class="org-builtin">any</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">(</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-rainbow-delimiters-depth-3">[</span><span class="org-string">'VendorName'</span><span class="org-rainbow-delimiters-depth-3">]</span> == <span class="org-string">'intel'</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">amd_detected</span> = <span class="org-builtin">any</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">(</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-rainbow-delimiters-depth-3">[</span><span class="org-string">'VendorName'</span><span class="org-rainbow-delimiters-depth-3">]</span> == <span class="org-string">'amd'</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">virtualbox_detected</span> = <span class="org-builtin">any</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">(</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-rainbow-delimiters-depth-3">[</span><span class="org-string">'VendorName'</span><span class="org-rainbow-delimiters-depth-3">]</span> == <span class="org-string">'virtualbox'</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</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-rainbow-delimiters-depth-1">()</span>
<span class="org-variable-name">data</span> = <span class="org-rainbow-delimiters-depth-1">{</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<span class="org-rainbow-delimiters-depth-1">}</span>
module.exit_json<span class="org-rainbow-delimiters-depth-1">(</span>changed=<span class="org-constant">False</span>, ansible_facts=data, msg=data<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">if</span> <span class="org-builtin">__name__</span> == <span class="org-string">'__main__'</span>:
main<span class="org-rainbow-delimiters-depth-1">()</span>
</pre>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org4d08ecc" class="outline-3">
<h3 id="org4d08ecc"><span class="section-number-3">8.2</span> pci_facts.py</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-8-2">
<div class="org-src-container">
<pre class="src src-python">
<span class="org-comment-delimiter"># </span><span class="org-comment">This module parses the output of lspci for detailed information about available (sub) devices.</span>
<span class="org-variable-name">DOCUMENTATION</span> = <span class="org-string">'''</span>
<span class="org-string"> ---</span>
<span class="org-string"> module: pci_facts</span>
<span class="org-string"> short_description: parses lspci output for detailed (sub) devices data</span>
<span class="org-string"> description:</span>
<span class="org-string"> - This module parses the output of lspci for detailed information about available (sub) devices.</span>
<span class="org-string"> - returns a list with a dict for each device</span>
<span class="org-string">notes:</span>
<span class="org-string"> - requires lspci (package pciutils)</span>
<span class="org-string">'''</span>
<span class="org-variable-name">EXAMPLES</span> = <span class="org-string">'''</span>
<span class="org-string">- name: get detailled pci device infos</span>
<span class="org-string"> pci_facts:</span>
<span class="org-string">- debug:</span>
<span class="org-string"> var: pci_devices</span>
<span class="org-string">'''</span>
<span class="org-keyword">import</span> argparse
<span class="org-keyword">import</span> shlex
<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-keyword">def</span> <span class="org-function-name">convert2hex</span><span class="org-rainbow-delimiters-depth-1">(</span>arg<span class="org-rainbow-delimiters-depth-1">)</span>:
<span class="org-variable-name">arg</span> = arg.strip<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'"'</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">if</span> arg:
<span class="org-keyword">return</span> <span class="org-builtin">int</span><span class="org-rainbow-delimiters-depth-1">(</span>arg, 16<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">else</span>:
<span class="org-keyword">return</span> <span class="org-constant">None</span>
<span class="org-keyword">def</span> <span class="org-function-name">parse_lspci_data</span><span class="org-rainbow-delimiters-depth-1">()</span>:
<span class="org-variable-name">parser</span> = argparse.ArgumentParser<span class="org-rainbow-delimiters-depth-1">()</span>
parser.add_argument<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'-r'</span>, <span class="org-string">'--revision'</span>, <span class="org-builtin">help</span>=<span class="org-string">'revision'</span>, <span class="org-builtin">type</span>=convert2hex<span class="org-rainbow-delimiters-depth-1">)</span>
parser.add_argument<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'-p'</span>, <span class="org-string">'--progif'</span>, <span class="org-builtin">help</span>=<span class="org-string">'proginf'</span>, <span class="org-builtin">type</span>=convert2hex<span class="org-rainbow-delimiters-depth-1">)</span>
parser.add_argument<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'slot'</span><span class="org-rainbow-delimiters-depth-1">)</span>
parser.add_argument<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'device_class'</span>, <span class="org-builtin">type</span>=convert2hex<span class="org-rainbow-delimiters-depth-1">)</span>
parser.add_argument<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'vendor_id'</span>, <span class="org-builtin">type</span>=convert2hex<span class="org-rainbow-delimiters-depth-1">)</span>
parser.add_argument<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'device_id'</span>, <span class="org-builtin">type</span>=convert2hex<span class="org-rainbow-delimiters-depth-1">)</span>
parser.add_argument<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'sub_vendor_id'</span>, <span class="org-builtin">type</span>=convert2hex<span class="org-rainbow-delimiters-depth-1">)</span>
parser.add_argument<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'sub_device_id'</span>, <span class="org-builtin">type</span>=convert2hex<span class="org-rainbow-delimiters-depth-1">)</span>
parser.add_argument<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'other'</span>, nargs=<span class="org-string">'*'</span>, default=<span class="org-rainbow-delimiters-depth-2">[]</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">devices</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>
<span class="org-keyword">for</span> line <span class="org-keyword">in</span> subprocess.check_output<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span><span class="org-string">'lspci'</span>, <span class="org-string">'-nm'</span><span class="org-rainbow-delimiters-depth-2">]</span>, universal_newlines=<span class="org-constant">True</span><span class="org-rainbow-delimiters-depth-1">)</span>.splitlines<span class="org-rainbow-delimiters-depth-1">()</span>:
<span class="org-variable-name">args</span> = parser.parse_args<span class="org-rainbow-delimiters-depth-1">(</span>args=shlex.split<span class="org-rainbow-delimiters-depth-2">(</span>line<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
devices.append<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-builtin">vars</span><span class="org-rainbow-delimiters-depth-2">(</span>args<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">return</span> devices
<span class="org-keyword">def</span> <span class="org-function-name">main</span><span class="org-rainbow-delimiters-depth-1">()</span>:
<span class="org-variable-name">arg_specs</span> = <span class="org-rainbow-delimiters-depth-1">{}</span>
<span class="org-variable-name">module</span> = AnsibleModule<span class="org-rainbow-delimiters-depth-1">(</span>argument_spec=arg_specs, supports_check_mode=<span class="org-constant">True</span>,<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">try</span>:
<span class="org-variable-name">pci_devices</span> = parse_lspci_data<span class="org-rainbow-delimiters-depth-1">()</span>
<span class="org-keyword">except</span>:
module.fail_json<span class="org-rainbow-delimiters-depth-1">(</span>msg=<span class="org-string">"Something fatal happened"</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">data</span> = <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-string">'pci_devices'</span>: pci_devices<span class="org-rainbow-delimiters-depth-1">}</span>
module.exit_json<span class="org-rainbow-delimiters-depth-1">(</span>changed=<span class="org-constant">False</span>, ansible_facts=data, msg=data<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">if</span> <span class="org-builtin">__name__</span> == <span class="org-string">'__main__'</span>:
main<span class="org-rainbow-delimiters-depth-1">()</span>
</pre>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-orgfda6822" class="outline-3">
<h3 id="orgfda6822"><span class="section-number-3">8.3</span> satip_facts.py</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-8-3">
<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-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">(</span>
<span class="org-string">"M-SEARCH * HTTP/1.1"</span>,
<span class="org-string">"HOST: %s:%d"</span> % <span class="org-rainbow-delimiters-depth-3">(</span>SSDP_ADDR, SSDP_PORT<span class="org-rainbow-delimiters-depth-3">)</span>,
<span class="org-string">"MAN: \"ssdp:discover\""</span>,
<span class="org-string">"MX: %d"</span> % <span class="org-rainbow-delimiters-depth-3">(</span>SSDP_MX<span class="org-rainbow-delimiters-depth-3">)</span>,
<span class="org-string">"ST: %s"</span> % <span class="org-rainbow-delimiters-depth-3">(</span>SSDP_ST<span class="org-rainbow-delimiters-depth-3">)</span>,
<span class="org-string">"\r\n"</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-type">@contextmanager</span>
<span class="org-keyword">def</span> <span class="org-function-name">socket_manager</span><span class="org-rainbow-delimiters-depth-1">(</span>*args, **kwargs<span class="org-rainbow-delimiters-depth-1">)</span>:
<span class="org-doc">"""provide a context manager for socket"""</span>
<span class="org-variable-name">sock</span> = socket.socket<span class="org-rainbow-delimiters-depth-1">(</span>*args, **kwargs<span class="org-rainbow-delimiters-depth-1">)</span>
sock.setblocking<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-constant">False</span><span class="org-rainbow-delimiters-depth-1">)</span>
sock.setsockopt<span class="org-rainbow-delimiters-depth-1">(</span>socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2<span class="org-rainbow-delimiters-depth-1">)</span>
sock.setsockopt<span class="org-rainbow-delimiters-depth-1">(</span>socket.SOL_SOCKET, socket.SO_REUSEADDR, 1<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">try</span>:
sock.setsockopt<span class="org-rainbow-delimiters-depth-1">(</span>socket.SOL_SOCKET, socket.SO_REUSEPORT, 1<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">except</span> socket.error:
<span class="org-keyword">pass</span>
sock.settimeout<span class="org-rainbow-delimiters-depth-1">(</span>SSDP_MX + 0.5<span class="org-rainbow-delimiters-depth-1">)</span>
sock.bind<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">(</span>SSDP_BIND, SSDP_PORT<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">try</span>:
<span class="org-keyword">yield</span> sock
<span class="org-keyword">finally</span>:
sock.close<span class="org-rainbow-delimiters-depth-1">()</span>
<span class="org-keyword">def</span> <span class="org-function-name">parse_satip_xml</span><span class="org-rainbow-delimiters-depth-1">(</span>data<span class="org-rainbow-delimiters-depth-1">)</span>:
<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-rainbow-delimiters-depth-1">{</span><span class="org-string">'name'</span>: <span class="org-string">''</span>, <span class="org-string">'frontends'</span>: <span class="org-rainbow-delimiters-depth-2">{}</span><span class="org-rainbow-delimiters-depth-1">}</span>
<span class="org-keyword">if</span> data:
<span class="org-variable-name">root</span> = ET.fromstring<span class="org-rainbow-delimiters-depth-1">(</span>data<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">name</span> = root.find<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'.//*/{urn:schemas-upnp-org:device-1-0}friendlyName'</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">result</span><span class="org-rainbow-delimiters-depth-1">[</span><span class="org-string">'name'</span><span class="org-rainbow-delimiters-depth-1">]</span> = name.text
<span class="org-variable-name">satipcap</span> = root.find<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'.//*/{urn:ses-com:satip}X_SATIPCAP'</span><span class="org-rainbow-delimiters-depth-1">)</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-rainbow-delimiters-depth-1">(</span><span class="org-string">"Invalid SAT&gt;IP device description"</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">caps</span> = <span class="org-rainbow-delimiters-depth-1">{}</span>
<span class="org-keyword">for</span> system <span class="org-keyword">in</span> satipcap.text.split<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">","</span><span class="org-rainbow-delimiters-depth-1">)</span>:
<span class="org-variable-name">cap</span> = system.split<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">"-"</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">if</span> cap:
<span class="org-variable-name">count</span> = <span class="org-builtin">int</span><span class="org-rainbow-delimiters-depth-1">(</span>cap<span class="org-rainbow-delimiters-depth-2">[</span>1<span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">if</span> cap<span class="org-rainbow-delimiters-depth-1">[</span>0<span class="org-rainbow-delimiters-depth-1">]</span> <span class="org-keyword">in</span> caps:
<span class="org-variable-name">count</span> = count + caps<span class="org-rainbow-delimiters-depth-1">[</span>cap<span class="org-rainbow-delimiters-depth-2">[</span>0<span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">]</span>
caps<span class="org-rainbow-delimiters-depth-1">[</span>cap<span class="org-rainbow-delimiters-depth-2">[</span>0<span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">]</span> = count
<span class="org-variable-name">result</span><span class="org-rainbow-delimiters-depth-1">[</span><span class="org-string">'frontends'</span><span class="org-rainbow-delimiters-depth-1">]</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-rainbow-delimiters-depth-1">()</span>:
<span class="org-variable-name">description_urls</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>
<span class="org-variable-name">device_list</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>
<span class="org-variable-name">module</span> = AnsibleModule<span class="org-rainbow-delimiters-depth-1">(</span>argument_spec=<span class="org-rainbow-delimiters-depth-2">{}</span>, supports_check_mode=<span class="org-constant">True</span>,<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">with</span> socket_manager<span class="org-rainbow-delimiters-depth-1">(</span>socket.AF_INET, socket.SOCK_DGRAM<span class="org-rainbow-delimiters-depth-1">)</span> <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><span class="org-rainbow-delimiters-depth-1">(</span>3<span class="org-rainbow-delimiters-depth-1">)</span>:
sock.sendto<span class="org-rainbow-delimiters-depth-1">(</span>ssdpRequest, <span class="org-rainbow-delimiters-depth-2">(</span>SSDP_ADDR, SSDP_PORT<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
time.sleep<span class="org-rainbow-delimiters-depth-1">(</span>0.03<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">try</span>:
<span class="org-variable-name">response</span> = sock.recv<span class="org-rainbow-delimiters-depth-1">(</span>1024<span class="org-rainbow-delimiters-depth-1">)</span>
<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-rainbow-delimiters-depth-1">()</span>:
<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<span class="org-rainbow-delimiters-depth-1">()[</span>-1<span class="org-rainbow-delimiters-depth-1">]</span>.strip<span class="org-rainbow-delimiters-depth-1">()</span>
<span class="org-keyword">if</span> url <span class="org-keyword">not</span> <span class="org-keyword">in</span> description_urls:
description_urls.append<span class="org-rainbow-delimiters-depth-1">(</span>url<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">info</span> = requests.get<span class="org-rainbow-delimiters-depth-1">(</span>url, timeout=2<span class="org-rainbow-delimiters-depth-1">)</span>
device_list.append<span class="org-rainbow-delimiters-depth-1">(</span>parse_satip_xml<span class="org-rainbow-delimiters-depth-2">(</span>info.text<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">else</span>:
<span class="org-keyword">raise</span> <span class="org-type">ValueError</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'No satip server detected'</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">except</span> <span class="org-rainbow-delimiters-depth-1">(</span>socket.timeout, <span class="org-type">ValueError</span>, ET.ParseError<span class="org-rainbow-delimiters-depth-1">)</span>:
<span class="org-keyword">pass</span>
module.exit_json<span class="org-rainbow-delimiters-depth-1">(</span>changed=<span class="org-constant">False</span>, ansible_facts=<span class="org-rainbow-delimiters-depth-2">{</span><span class="org-string">'satip_devices'</span>: device_list<span class="org-rainbow-delimiters-depth-2">}</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">if</span> <span class="org-builtin">__name__</span> == <span class="org-string">'__main__'</span>:
main<span class="org-rainbow-delimiters-depth-1">()</span>
</pre>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org7415e1d" class="outline-3">
<h3 id="org7415e1d"><span class="section-number-3">8.4</span> xrandr_facts.py</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-8-4">
<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-comment-delimiter">#</span><span class="org-comment">!/usr/bin/env python2</span>
<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> os
<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> glob <span class="org-keyword">import</span> glob
<span class="org-keyword">from</span> ansible.module_utils.basic <span class="org-keyword">import</span> AnsibleModule
<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</span>
<span class="org-string"> order to successfully call xrandr. Returns the dictionary</span>
<span class="org-string"> "xrandr", wich contains all screens with output states,</span>
<span class="org-string"> connected displays, EDID info and their modes and a</span>
<span class="org-string"> recommendation for the best fitting tv mode, the dictionary</span>
<span class="org-string"> "xorg" with a recommendation for the primary and secondary</span>
<span class="org-string"> output and a "drm" dictionary whose "primary" key associates</span>
<span class="org-string"> the primary device name of the drm subsystem with the one from</span>
<span class="org-string"> the xrandr output by comparing the edid data and a list of</span>
<span class="org-string"> "ignored_devices". Note that the proprietary nvidia driver</span>
<span class="org-string"> doesn't support KMS/drm, so in this case the dictionary is</span>
<span class="org-string"> always empty.</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", "eDP", "DVI", "VGA", "TV", "Virtual"]</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"> - the dictionary "drm" can only be filled with data if write_edids is enabled</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">- debug:</span>
<span class="org-string"> var: drm</span>
<span class="org-string">'''</span>
<span class="org-variable-name">ARG_SPECS</span> = <span class="org-rainbow-delimiters-depth-1">{</span>
<span class="org-string">'display'</span>: <span class="org-builtin">dict</span><span class="org-rainbow-delimiters-depth-2">(</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-rainbow-delimiters-depth-2">)</span>,
<span class="org-string">'preferred_outputs'</span>: <span class="org-builtin">dict</span><span class="org-rainbow-delimiters-depth-2">(</span>
default=<span class="org-rainbow-delimiters-depth-3">[</span><span class="org-string">"HDMI"</span>, <span class="org-string">"DP"</span>, <span class="org-string">"eDP"</span>, <span class="org-string">"DVI"</span>, <span class="org-string">"VGA"</span>, <span class="org-string">"TV"</span>, <span class="org-string">"Virtual"</span><span class="org-rainbow-delimiters-depth-3">]</span>, <span class="org-builtin">type</span>=<span class="org-string">'list'</span>, required=<span class="org-constant">False</span><span class="org-rainbow-delimiters-depth-2">)</span>,
<span class="org-string">'preferred_refreshrates'</span>: <span class="org-builtin">dict</span><span class="org-rainbow-delimiters-depth-2">(</span>
default=<span class="org-rainbow-delimiters-depth-3">[</span>50, 60, 75, 30, 25<span class="org-rainbow-delimiters-depth-3">]</span>, <span class="org-builtin">type</span>=<span class="org-string">'list'</span>, required=<span class="org-constant">False</span><span class="org-rainbow-delimiters-depth-2">)</span>,
<span class="org-string">'preferred_resolutions'</span>: <span class="org-builtin">dict</span><span class="org-rainbow-delimiters-depth-2">(</span>
default=<span class="org-rainbow-delimiters-depth-3">[</span>
<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-rainbow-delimiters-depth-3">]</span>,
<span class="org-builtin">type</span>=<span class="org-string">'list'</span>, required=<span class="org-constant">False</span><span class="org-rainbow-delimiters-depth-2">)</span>,
<span class="org-string">'write_edids'</span>: <span class="org-builtin">dict</span><span class="org-rainbow-delimiters-depth-2">(</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-rainbow-delimiters-depth-2">)</span>,
<span class="org-rainbow-delimiters-depth-1">}</span>
<span class="org-variable-name">SCREEN_REGEX</span> = re.<span class="org-builtin">compile</span><span class="org-rainbow-delimiters-depth-1">(</span>r<span class="org-string">"^(?P&lt;screen&gt;Screen\s\d+:)(?:.*)"</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">CONNECTOR_REGEX</span> = re.<span class="org-builtin">compile</span><span class="org-rainbow-delimiters-depth-1">(</span>
r<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-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">MODE_REGEX</span> = re.<span class="org-builtin">compile</span><span class="org-rainbow-delimiters-depth-1">(</span>r<span class="org-string">"^\s+(?P&lt;resolution&gt;\d{3,}x\d{3,}).*"</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">Mode</span> = namedtuple<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'Mode'</span>, <span class="org-rainbow-delimiters-depth-2">[</span><span class="org-string">'connection'</span>, <span class="org-string">'resolution'</span>, <span class="org-string">'refreshrate'</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">def</span> <span class="org-function-name">check_for_screen</span><span class="org-rainbow-delimiters-depth-1">(</span>line<span class="org-rainbow-delimiters-depth-1">)</span>:
<span class="org-doc">"""check line for screen information"""</span>
<span class="org-variable-name">match</span> = re.match<span class="org-rainbow-delimiters-depth-1">(</span>SCREEN_REGEX, line<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">if</span> match:
<span class="org-keyword">return</span> match.groupdict<span class="org-rainbow-delimiters-depth-1">()[</span><span class="org-string">'screen'</span><span class="org-rainbow-delimiters-depth-1">]</span>
<span class="org-keyword">def</span> <span class="org-function-name">check_for_connection</span><span class="org-rainbow-delimiters-depth-1">(</span>line<span class="org-rainbow-delimiters-depth-1">)</span>:
<span class="org-doc">"""check line for connection name and state"""</span>
<span class="org-variable-name">match</span> = re.match<span class="org-rainbow-delimiters-depth-1">(</span>CONNECTOR_REGEX, line<span class="org-rainbow-delimiters-depth-1">)</span>
<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-rainbow-delimiters-depth-1">()</span>
<span class="org-variable-name">connector</span> = match<span class="org-rainbow-delimiters-depth-1">[</span><span class="org-string">'connector'</span><span class="org-rainbow-delimiters-depth-1">]</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-rainbow-delimiters-depth-1">[</span><span class="org-string">'connection_state'</span><span class="org-rainbow-delimiters-depth-1">]</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><span class="org-rainbow-delimiters-depth-1">(</span>line<span class="org-rainbow-delimiters-depth-1">)</span>:
<span class="org-doc">"""return the number of leading whitespace characters"""</span>
<span class="org-keyword">return</span> <span class="org-builtin">len</span><span class="org-rainbow-delimiters-depth-1">(</span>line<span class="org-rainbow-delimiters-depth-1">)</span> - <span class="org-builtin">len</span><span class="org-rainbow-delimiters-depth-1">(</span>line.lstrip<span class="org-rainbow-delimiters-depth-2">()</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">def</span> <span class="org-function-name">sort_mode</span><span class="org-rainbow-delimiters-depth-1">(</span>mode<span class="org-rainbow-delimiters-depth-1">)</span>:
<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-rainbow-delimiters-depth-1">[</span><span class="org-string">'preferred_refreshrates'</span><span class="org-rainbow-delimiters-depth-1">]</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-rainbow-delimiters-depth-1">[</span><span class="org-string">'preferred_resolutions'</span><span class="org-rainbow-delimiters-depth-1">]</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-rainbow-delimiters-depth-1">[</span><span class="org-string">'preferred_outputs'</span><span class="org-rainbow-delimiters-depth-1">]</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><span class="org-rainbow-delimiters-depth-1">(</span>preferred_rrates<span class="org-rainbow-delimiters-depth-1">)</span> - preferred_rrates.index<span class="org-rainbow-delimiters-depth-1">(</span>mode.refreshrate<span class="org-rainbow-delimiters-depth-1">)</span>
<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><span class="org-rainbow-delimiters-depth-1">(</span>preferred_resolutions<span class="org-rainbow-delimiters-depth-1">)</span> - preferred_resolutions.index<span class="org-rainbow-delimiters-depth-1">(</span>mode.resolution<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">x_resolution</span>, <span class="org-variable-name">y_resolution</span> = <span class="org-rainbow-delimiters-depth-1">(</span><span class="org-builtin">int</span><span class="org-rainbow-delimiters-depth-2">(</span>n<span class="org-rainbow-delimiters-depth-2">)</span> <span class="org-keyword">for</span> n <span class="org-keyword">in</span> mode.resolution.split<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">'x'</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">connection</span> = mode.connection.split<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'-'</span><span class="org-rainbow-delimiters-depth-1">)[</span>0<span class="org-rainbow-delimiters-depth-1">]</span>
<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><span class="org-rainbow-delimiters-depth-1">(</span>preferred_outputs<span class="org-rainbow-delimiters-depth-1">)</span> - preferred_outputs.index<span class="org-rainbow-delimiters-depth-1">(</span>connection<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">return</span> <span class="org-rainbow-delimiters-depth-1">(</span>rrate_score, resolution_score, x_resolution, y_resolution, connection_score<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">def</span> <span class="org-function-name">parse_xrandr_verbose</span><span class="org-rainbow-delimiters-depth-1">(</span>iterator<span class="org-rainbow-delimiters-depth-1">)</span>:
<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-rainbow-delimiters-depth-1">{}</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-rainbow-delimiters-depth-1">(</span><span class="org-string">'Screen'</span><span class="org-rainbow-delimiters-depth-1">)</span>:
<span class="org-variable-name">screen</span> = check_for_screen<span class="org-rainbow-delimiters-depth-1">(</span>line<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">xorg</span><span class="org-rainbow-delimiters-depth-1">[</span>screen<span class="org-rainbow-delimiters-depth-1">]</span> = <span class="org-rainbow-delimiters-depth-1">{}</span>
<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<span class="org-rainbow-delimiters-depth-1">(</span>line<span class="org-rainbow-delimiters-depth-1">)</span>
xorg<span class="org-rainbow-delimiters-depth-1">[</span>screen<span class="org-rainbow-delimiters-depth-1">][</span>connector<span class="org-rainbow-delimiters-depth-1">]</span> = <span class="org-rainbow-delimiters-depth-1">{</span>
<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-rainbow-delimiters-depth-2">{}</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-rainbow-delimiters-depth-1">}</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<span class="org-rainbow-delimiters-depth-1">(</span>line<span class="org-rainbow-delimiters-depth-1">)</span>
<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><span class="org-rainbow-delimiters-depth-1">(</span>iterator<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">if</span> get_indentation<span class="org-rainbow-delimiters-depth-1">(</span>line<span class="org-rainbow-delimiters-depth-1">)</span> &gt; outer_indentation:
<span class="org-variable-name">edid_str</span> += line.strip<span class="org-rainbow-delimiters-depth-1">()</span>
<span class="org-keyword">else</span>:
<span class="org-keyword">break</span>
xorg<span class="org-rainbow-delimiters-depth-1">[</span>screen<span class="org-rainbow-delimiters-depth-1">][</span>connector<span class="org-rainbow-delimiters-depth-1">][</span><span class="org-string">'EDID'</span><span class="org-rainbow-delimiters-depth-1">]</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-string">"Interlace"</span> <span class="org-keyword">not</span> <span class="org-keyword">in</span> line:
<span class="org-variable-name">match</span> = re.match<span class="org-rainbow-delimiters-depth-1">(</span>MODE_REGEX, line<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">if</span> match:
<span class="org-variable-name">match</span> = match.groupdict<span class="org-rainbow-delimiters-depth-1">()</span>
<span class="org-variable-name">preferred</span> = <span class="org-builtin">bool</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">"+preferred"</span> <span class="org-keyword">in</span> line<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">current</span> = <span class="org-builtin">bool</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">"*current"</span> <span class="org-keyword">in</span> line<span class="org-rainbow-delimiters-depth-1">)</span>
<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><span class="org-rainbow-delimiters-depth-1">(</span>iterator<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">if</span> line.strip<span class="org-rainbow-delimiters-depth-1">()</span>.startswith<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'v:'</span><span class="org-rainbow-delimiters-depth-1">)</span>:
<span class="org-variable-name">refresh_rate</span> = ast.literal_eval<span class="org-rainbow-delimiters-depth-1">(</span>line.split<span class="org-rainbow-delimiters-depth-2">()[</span>-1<span class="org-rainbow-delimiters-depth-2">][</span>:-2<span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">rrate</span> = <span class="org-builtin">int</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-builtin">round</span><span class="org-rainbow-delimiters-depth-2">(</span>refresh_rate<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">if</span> xorg<span class="org-rainbow-delimiters-depth-1">[</span>screen<span class="org-rainbow-delimiters-depth-1">][</span>connector<span class="org-rainbow-delimiters-depth-1">][</span><span class="org-string">'modes'</span><span class="org-rainbow-delimiters-depth-1">]</span>.get<span class="org-rainbow-delimiters-depth-1">(</span>match<span class="org-rainbow-delimiters-depth-2">[</span><span class="org-string">'resolution'</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span> <span class="org-keyword">is</span> <span class="org-constant">None</span>:
xorg<span class="org-rainbow-delimiters-depth-1">[</span>screen<span class="org-rainbow-delimiters-depth-1">][</span>connector<span class="org-rainbow-delimiters-depth-1">][</span><span class="org-string">'modes'</span><span class="org-rainbow-delimiters-depth-1">][</span>match<span class="org-rainbow-delimiters-depth-2">[</span><span class="org-string">'resolution'</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">]</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>
<span class="org-keyword">if</span> rrate <span class="org-keyword">not</span> <span class="org-keyword">in</span> xorg<span class="org-rainbow-delimiters-depth-1">[</span>screen<span class="org-rainbow-delimiters-depth-1">][</span>connector<span class="org-rainbow-delimiters-depth-1">][</span><span class="org-string">'modes'</span><span class="org-rainbow-delimiters-depth-1">][</span>match<span class="org-rainbow-delimiters-depth-2">[</span><span class="org-string">'resolution'</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">]</span>:
xorg<span class="org-rainbow-delimiters-depth-1">[</span>screen<span class="org-rainbow-delimiters-depth-1">][</span>connector<span class="org-rainbow-delimiters-depth-1">][</span><span class="org-string">'modes'</span><span class="org-rainbow-delimiters-depth-1">][</span>match<span class="org-rainbow-delimiters-depth-2">[</span><span class="org-string">'resolution'</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">]</span>.append<span class="org-rainbow-delimiters-depth-1">(</span>rrate<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">if</span> preferred:
xorg<span class="org-rainbow-delimiters-depth-1">[</span>screen<span class="org-rainbow-delimiters-depth-1">][</span>connector<span class="org-rainbow-delimiters-depth-1">][</span><span class="org-string">'preferred'</span><span class="org-rainbow-delimiters-depth-1">]</span> = <span class="org-string">"{}_{}"</span>.<span class="org-builtin">format</span><span class="org-rainbow-delimiters-depth-1">(</span>
match<span class="org-rainbow-delimiters-depth-2">[</span><span class="org-string">'resolution'</span><span class="org-rainbow-delimiters-depth-2">]</span>, rrate<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">if</span> current:
xorg<span class="org-rainbow-delimiters-depth-1">[</span>screen<span class="org-rainbow-delimiters-depth-1">][</span>connector<span class="org-rainbow-delimiters-depth-1">][</span><span class="org-string">'current'</span><span class="org-rainbow-delimiters-depth-1">]</span> = <span class="org-string">"{}_{}"</span>.<span class="org-builtin">format</span><span class="org-rainbow-delimiters-depth-1">(</span>
match<span class="org-rainbow-delimiters-depth-2">[</span><span class="org-string">'resolution'</span><span class="org-rainbow-delimiters-depth-2">]</span>, rrate<span class="org-rainbow-delimiters-depth-1">)</span>
<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><span class="org-rainbow-delimiters-depth-1">(</span>edid<span class="org-rainbow-delimiters-depth-1">)</span>:
<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-variable-name">modelines</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>
<span class="org-keyword">try</span>:
<span class="org-variable-name">data</span> = subprocess.check_output<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">"parse-edid &lt; {}"</span>.<span class="org-builtin">format</span><span class="org-rainbow-delimiters-depth-2">(</span>edid<span class="org-rainbow-delimiters-depth-2">)</span>,
shell=<span class="org-constant">True</span>, universal_newlines=<span class="org-constant">True</span><span class="org-rainbow-delimiters-depth-1">)</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-rainbow-delimiters-depth-1">()</span>:
<span class="org-variable-name">line</span> = line.strip<span class="org-rainbow-delimiters-depth-1">()</span>
<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.split<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'"'</span><span class="org-rainbow-delimiters-depth-1">)[</span>1<span class="org-rainbow-delimiters-depth-1">]</span>
<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.split<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'"'</span><span class="org-rainbow-delimiters-depth-1">)[</span>1<span class="org-rainbow-delimiters-depth-1">]</span>
<span class="org-keyword">if</span> <span class="org-string">"Modeline"</span> <span class="org-keyword">in</span> line:
<span class="org-keyword">print</span><span class="org-rainbow-delimiters-depth-1">(</span>line<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">_</span>, <span class="org-variable-name">_</span>, <span class="org-variable-name">line</span> = line.split<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'"'</span>, 2<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">if</span> <span class="org-keyword">not</span> line:
<span class="org-keyword">print</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">"no timing information"</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">continue</span>
<span class="org-keyword">try</span>:
<span class="org-variable-name">FF</span>, <span class="org-variable-name">H1</span>, <span class="org-variable-name">H2</span>, <span class="org-variable-name">H3</span>, <span class="org-variable-name">H4</span>, <span class="org-variable-name">V1</span>, <span class="org-variable-name">V2</span>, <span class="org-variable-name">V3</span>, <span class="org-variable-name">V4</span>, <span class="org-variable-name">FLAGS</span> = line.split<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-constant">None</span>, 9<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">except</span> <span class="org-type">ValueError</span>:
<span class="org-keyword">print</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">"invalid timing information"</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">continue</span>
<span class="org-keyword">print</span><span class="org-rainbow-delimiters-depth-1">(</span>FF, H1, H2, H3, H4, V1, V2, V3, V4, FLAGS<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">refresh</span> = <span class="org-builtin">round</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-builtin">float</span><span class="org-rainbow-delimiters-depth-2">(</span>FF<span class="org-rainbow-delimiters-depth-2">)</span> * 1E6 / <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-builtin">float</span><span class="org-rainbow-delimiters-depth-3">(</span>H4<span class="org-rainbow-delimiters-depth-3">)</span> * <span class="org-builtin">float</span><span class="org-rainbow-delimiters-depth-3">(</span>V4<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">interlaced</span> = <span class="org-string">"interlaced"</span> <span class="org-keyword">in</span> FLAGS
<span class="org-keyword">if</span> interlaced:
<span class="org-variable-name">refresh</span> /= 2
<span class="org-variable-name">refresh</span> = <span class="org-builtin">int</span><span class="org-rainbow-delimiters-depth-1">(</span>refresh<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">modeline_name</span> = <span class="org-string">'"{}x{}_{}{}"'</span>.<span class="org-builtin">format</span><span class="org-rainbow-delimiters-depth-1">(</span>H1, V1, refresh, <span class="org-string">"i"</span> <span class="org-keyword">if</span> interlaced <span class="org-keyword">else</span> <span class="org-string">''</span><span class="org-rainbow-delimiters-depth-1">)</span>
modelines.append<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">" "</span>.join<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">"Modeline"</span>, modeline_name,
FF, H1, H2, H3, H4, V1, V2, V3, V4, FLAGS<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">return</span> vendor, model, modelines
<span class="org-keyword">def</span> <span class="org-function-name">collect_nvidia_data</span><span class="org-rainbow-delimiters-depth-1">()</span>:
<span class="org-variable-name">BusID_RE</span> = re.<span class="org-builtin">compile</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">(</span>
r<span class="org-string">'(?P&lt;domain&gt;[0-9a-fA-F]+)'</span>
r<span class="org-string">':'</span>
r<span class="org-string">'(?P&lt;bus&gt;[0-9a-fA-F]+)'</span>
r<span class="org-string">':'</span>
r<span class="org-string">'(?P&lt;device&gt;[0-9a-fA-F]+)'</span>
r<span class="org-string">'\.'</span>
r<span class="org-string">'(?P&lt;function&gt;[0-9a-fA-F]+)'</span>
<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">try</span>:
<span class="org-variable-name">data</span> = subprocess.check_output<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span><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><span class="org-rainbow-delimiters-depth-2">]</span>, universal_newlines=<span class="org-constant">True</span><span class="org-rainbow-delimiters-depth-1">)</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<span class="org-rainbow-delimiters-depth-1">(</span>data.splitlines<span class="org-rainbow-delimiters-depth-2">()</span>, delimiter=<span class="org-string">','</span>, skipinitialspace=<span class="org-constant">True</span><span class="org-rainbow-delimiters-depth-1">)</span>:
<span class="org-variable-name">name</span> = row<span class="org-rainbow-delimiters-depth-1">[</span><span class="org-string">'name'</span><span class="org-rainbow-delimiters-depth-1">]</span>
<span class="org-variable-name">bus_id</span> = row<span class="org-rainbow-delimiters-depth-1">[</span><span class="org-string">'pci.bus_id'</span><span class="org-rainbow-delimiters-depth-1">]</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<span class="org-rainbow-delimiters-depth-1">(</span>bus_id<span class="org-rainbow-delimiters-depth-1">)</span>
<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-rainbow-delimiters-depth-1">(</span><span class="org-builtin">int</span><span class="org-rainbow-delimiters-depth-2">(</span>n, 16<span class="org-rainbow-delimiters-depth-2">)</span> <span class="org-keyword">for</span> n <span class="org-keyword">in</span> match.groups<span class="org-rainbow-delimiters-depth-2">()</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">bus_id</span> = <span class="org-string">"PCI:{:d}@{:d}:{:d}:{:d}"</span>.<span class="org-builtin">format</span><span class="org-rainbow-delimiters-depth-1">(</span>bus, domain, device, function<span class="org-rainbow-delimiters-depth-1">)</span>
<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">find_drm_connectors</span><span class="org-rainbow-delimiters-depth-1">(</span>connections<span class="org-rainbow-delimiters-depth-1">)</span>:
<span class="org-doc">"""</span>
<span class="org-doc"> returns a dict with the following schema (secondary may be empty):</span>
<span class="org-doc"> {</span>
<span class="org-doc"> 'primary': {</span>
<span class="org-doc"> 'edid': 'edid.HDMI-1.bin',</span>
<span class="org-doc"> 'drm_connector': 'HDMI-A-1',</span>
<span class="org-doc"> 'xrandr_connector': 'HDMI-1',</span>
<span class="org-doc"> },</span>
<span class="org-doc"> 'secondary': {</span>
<span class="org-doc"> 'edid': 'edid.eDP-1.bin',</span>
<span class="org-doc"> 'drm_connector': 'eDP-1',</span>
<span class="org-doc"> 'xrandr_connector': 'eDP-1',</span>
<span class="org-doc"> }</span>
<span class="org-doc"> 'ignored_outputs': ['HDMI-A-2', 'DP-1']</span>
<span class="org-doc"> }</span>
<span class="org-doc"> """</span>
<span class="org-variable-name">STATUS_GLOB</span> = <span class="org-string">'/sys/class/drm/card0*/status'</span>
<span class="org-variable-name">CONNECTOR_RE</span> = re.<span class="org-builtin">compile</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'card0-(?P&lt;connector&gt;[^/]+)/status'</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">def</span> <span class="org-function-name">read_edid_bytes</span><span class="org-rainbow-delimiters-depth-1">(</span>edid_file<span class="org-rainbow-delimiters-depth-1">)</span>:
<span class="org-variable-name">edid_bytes</span> = b<span class="org-string">''</span>
<span class="org-keyword">try</span>:
<span class="org-keyword">with</span> <span class="org-builtin">open</span><span class="org-rainbow-delimiters-depth-1">(</span>edid_file, <span class="org-string">'rb'</span><span class="org-rainbow-delimiters-depth-1">)</span> <span class="org-keyword">as</span> f:
<span class="org-variable-name">edid_bytes</span> = f.read<span class="org-rainbow-delimiters-depth-1">()</span>
<span class="org-keyword">except</span> <span class="org-type">IOError</span>:
<span class="org-keyword">pass</span>
<span class="org-keyword">return</span> edid_bytes
<span class="org-variable-name">xrandr_edid_bytes</span> = read_edid_bytes<span class="org-rainbow-delimiters-depth-1">(</span>connections.get<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">'primary'</span>, <span class="org-rainbow-delimiters-depth-3">{}</span><span class="org-rainbow-delimiters-depth-2">)</span>.get<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">'edid'</span>, <span class="org-string">""</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">secondary_xrandr_edid_bytes</span> = read_edid_bytes<span class="org-rainbow-delimiters-depth-1">(</span>connections.get<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">'secondary'</span>, <span class="org-rainbow-delimiters-depth-3">{}</span><span class="org-rainbow-delimiters-depth-2">)</span>.get<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">'edid'</span>, <span class="org-string">''</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">drm</span> = <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-string">'primary'</span>: <span class="org-rainbow-delimiters-depth-2">{}</span>, <span class="org-string">'secondary'</span>: <span class="org-rainbow-delimiters-depth-2">{}</span>, <span class="org-string">'ignored_outputs'</span>: <span class="org-rainbow-delimiters-depth-2">[]</span><span class="org-rainbow-delimiters-depth-1">}</span>
<span class="org-keyword">for</span> status_p <span class="org-keyword">in</span> glob<span class="org-rainbow-delimiters-depth-1">(</span>STATUS_GLOB<span class="org-rainbow-delimiters-depth-1">)</span>:
<span class="org-variable-name">match</span> = re.search<span class="org-rainbow-delimiters-depth-1">(</span>CONNECTOR_RE, status_p<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">if</span> match:
<span class="org-variable-name">drm_connector</span> = match.group<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'connector'</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">else</span>:
<span class="org-keyword">continue</span>
<span class="org-keyword">try</span>:
<span class="org-keyword">with</span> <span class="org-builtin">open</span><span class="org-rainbow-delimiters-depth-1">(</span>status_p<span class="org-rainbow-delimiters-depth-1">)</span> <span class="org-keyword">as</span> f:
<span class="org-variable-name">connected</span> = f.read<span class="org-rainbow-delimiters-depth-1">()</span>.strip<span class="org-rainbow-delimiters-depth-1">()</span> == <span class="org-string">'connected'</span>
<span class="org-keyword">except</span> <span class="org-type">IOError</span>:
<span class="org-keyword">continue</span>
<span class="org-keyword">if</span> connected:
<span class="org-variable-name">edid</span> = read_edid_bytes<span class="org-rainbow-delimiters-depth-1">(</span>os.path.join<span class="org-rainbow-delimiters-depth-2">(</span>
os.path.dirname<span class="org-rainbow-delimiters-depth-3">(</span>status_p<span class="org-rainbow-delimiters-depth-3">)</span>, <span class="org-string">'edid'</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">if</span> edid:
<span class="org-keyword">if</span> edid == xrandr_edid_bytes:
<span class="org-variable-name">drm</span><span class="org-rainbow-delimiters-depth-1">[</span><span class="org-string">'primary'</span><span class="org-rainbow-delimiters-depth-1">]</span> = <span class="org-rainbow-delimiters-depth-1">{</span>
<span class="org-string">'edid'</span>: os.path.basename<span class="org-rainbow-delimiters-depth-2">(</span>connections<span class="org-rainbow-delimiters-depth-3">[</span><span class="org-string">'primary'</span><span class="org-rainbow-delimiters-depth-3">]</span>.get<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">'edid'</span>, <span class="org-string">""</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span>,
<span class="org-string">'drm_connector'</span>: drm_connector,
<span class="org-string">'xrandr_connector'</span>: connections<span class="org-rainbow-delimiters-depth-2">[</span><span class="org-string">'primary'</span><span class="org-rainbow-delimiters-depth-2">]</span>.get<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">'connector'</span>,<span class="org-string">''</span><span class="org-rainbow-delimiters-depth-2">)</span>,
<span class="org-rainbow-delimiters-depth-1">}</span>
<span class="org-keyword">continue</span>
<span class="org-keyword">if</span> secondary_xrandr_edid_bytes:
<span class="org-variable-name">drm</span><span class="org-rainbow-delimiters-depth-1">[</span><span class="org-string">'secondary'</span><span class="org-rainbow-delimiters-depth-1">]</span> = <span class="org-rainbow-delimiters-depth-1">{</span>
<span class="org-string">'edid'</span>: os.path.basename<span class="org-rainbow-delimiters-depth-2">(</span>connections.get<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">'secondary'</span><span class="org-rainbow-delimiters-depth-3">)</span>.get<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">'edid'</span>, <span class="org-string">''</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span>,
<span class="org-string">'drm_connector'</span>: drm_connector,
<span class="org-string">'xrandr_connector'</span>: connections<span class="org-rainbow-delimiters-depth-2">[</span><span class="org-string">'secondary'</span><span class="org-rainbow-delimiters-depth-2">]</span>.get<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">'connector'</span>,<span class="org-string">''</span><span class="org-rainbow-delimiters-depth-2">)</span>,
<span class="org-rainbow-delimiters-depth-1">}</span>
<span class="org-keyword">continue</span>
drm<span class="org-rainbow-delimiters-depth-1">[</span><span class="org-string">'ignored_outputs'</span><span class="org-rainbow-delimiters-depth-1">]</span>.append<span class="org-rainbow-delimiters-depth-1">(</span>drm_connector<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">return</span> drm
<span class="org-keyword">def</span> <span class="org-function-name">output_data</span><span class="org-rainbow-delimiters-depth-1">(</span>data, write_edids=<span class="org-constant">True</span><span class="org-rainbow-delimiters-depth-1">)</span>:
<span class="org-variable-name">result</span> = <span class="org-rainbow-delimiters-depth-1">{}</span>
<span class="org-variable-name">drm</span> = <span class="org-rainbow-delimiters-depth-1">{}</span>
<span class="org-keyword">if</span> data:
<span class="org-variable-name">modes</span> = <span class="org-rainbow-delimiters-depth-1">[]</span>
<span class="org-keyword">for</span> _, screen_data <span class="org-keyword">in</span> data.items<span class="org-rainbow-delimiters-depth-1">()</span>:
<span class="org-keyword">for</span> connector, connection_data <span class="org-keyword">in</span> screen_data.items<span class="org-rainbow-delimiters-depth-1">()</span>:
<span class="org-keyword">if</span> connection_data.get<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'EDID'</span><span class="org-rainbow-delimiters-depth-1">)</span> <span class="org-keyword">and</span> write_edids:
<span class="org-keyword">with</span> <span class="org-builtin">open</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'/etc/X11/edid.{}.bin'</span>.<span class="org-builtin">format</span><span class="org-rainbow-delimiters-depth-2">(</span>connector<span class="org-rainbow-delimiters-depth-2">)</span>, <span class="org-string">'wb'</span><span class="org-rainbow-delimiters-depth-1">)</span> <span class="org-keyword">as</span> edid:
edid.write<span class="org-rainbow-delimiters-depth-1">(</span>binascii.a2b_hex<span class="org-rainbow-delimiters-depth-2">(</span>connection_data<span class="org-rainbow-delimiters-depth-3">[</span><span class="org-string">'EDID'</span><span class="org-rainbow-delimiters-depth-3">]</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">for</span> resolution, refreshrates <span class="org-keyword">in</span> connection_data<span class="org-rainbow-delimiters-depth-1">[</span><span class="org-string">'modes'</span><span class="org-rainbow-delimiters-depth-1">]</span>.items<span class="org-rainbow-delimiters-depth-1">()</span>:
<span class="org-keyword">for</span> refreshrate <span class="org-keyword">in</span> refreshrates:
modes.append<span class="org-rainbow-delimiters-depth-1">(</span>Mode<span class="org-rainbow-delimiters-depth-2">(</span>connector, resolution, refreshrate<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">if</span> modes:
<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-rainbow-delimiters-depth-1">()</span>
<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><span class="org-rainbow-delimiters-depth-1">(</span>my_dict, name, connector, resolution, refreshrate, vendor, model, modelines<span class="org-rainbow-delimiters-depth-1">)</span>:
<span class="org-variable-name">my_dict</span><span class="org-rainbow-delimiters-depth-1">[</span>name<span class="org-rainbow-delimiters-depth-1">]</span> = <span class="org-rainbow-delimiters-depth-1">{</span>
<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><span class="org-rainbow-delimiters-depth-2">(</span>connector<span class="org-rainbow-delimiters-depth-2">)</span>,
<span class="org-string">'mode'</span>: <span class="org-string">"{}_{}"</span>.<span class="org-builtin">format</span><span class="org-rainbow-delimiters-depth-2">(</span>resolution, refreshrate<span class="org-rainbow-delimiters-depth-2">)</span>,
<span class="org-string">'vendor'</span>: vendor,
<span class="org-string">'model'</span>: model,
<span class="org-string">'modelines'</span>: modelines,
<span class="org-rainbow-delimiters-depth-1">}</span>
<span class="org-keyword">if</span> gpu_name <span class="org-keyword">and</span> bus_id:
result<span class="org-rainbow-delimiters-depth-1">[</span>name<span class="org-rainbow-delimiters-depth-1">][</span><span class="org-string">'gpu_name'</span><span class="org-rainbow-delimiters-depth-1">]</span> = gpu_name
result<span class="org-rainbow-delimiters-depth-1">[</span>name<span class="org-rainbow-delimiters-depth-1">][</span><span class="org-string">'bus_id'</span><span class="org-rainbow-delimiters-depth-1">]</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><span class="org-rainbow-delimiters-depth-1">(</span>modes, key=sort_mode<span class="org-rainbow-delimiters-depth-1">)[</span>:3<span class="org-rainbow-delimiters-depth-1">]</span>
<span class="org-variable-name">connector_0_edid</span> = <span class="org-string">'/etc/X11/edid.{}.bin'</span>.<span class="org-builtin">format</span><span class="org-rainbow-delimiters-depth-1">(</span>connector_0<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">vendor_0</span>, <span class="org-variable-name">model_0</span>, <span class="org-variable-name">modelines_0</span> = parse_edid_data<span class="org-rainbow-delimiters-depth-1">(</span>connector_0_edid<span class="org-rainbow-delimiters-depth-1">)</span>
create_entry<span class="org-rainbow-delimiters-depth-1">(</span>result, <span class="org-string">'primary'</span>, connector_0, resolution_0,
refreshrate_0, vendor_0, model_0, modelines_0<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">check if additional monitors exist</span>
<span class="org-variable-name">other_modes</span> = <span class="org-rainbow-delimiters-depth-1">[</span>mode <span class="org-keyword">for</span> mode <span class="org-keyword">in</span> modes <span class="org-keyword">if</span> mode<span class="org-rainbow-delimiters-depth-2">[</span>0<span class="org-rainbow-delimiters-depth-2">]</span> != connector_0<span class="org-rainbow-delimiters-depth-1">]</span>
<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><span class="org-rainbow-delimiters-depth-1">(</span>other_modes, key=sort_mode<span class="org-rainbow-delimiters-depth-1">)[</span>:3<span class="org-rainbow-delimiters-depth-1">]</span>
<span class="org-variable-name">connector_1_edid</span> = <span class="org-string">'/etc/X11/edid.{}.bin'</span>.<span class="org-builtin">format</span><span class="org-rainbow-delimiters-depth-1">(</span>connector_1<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">vendor_1</span>, <span class="org-variable-name">model_1</span>, <span class="org-variable-name">modelines_1</span> = parse_edid_data<span class="org-rainbow-delimiters-depth-1">(</span>connector_1_edid<span class="org-rainbow-delimiters-depth-1">)</span>
create_entry<span class="org-rainbow-delimiters-depth-1">(</span>result, <span class="org-string">'secondary'</span>, connector_1, resolution_1,
refreshrate_1, vendor_1, model_1, modelines_1<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">if</span> write_edids:
<span class="org-variable-name">drm</span> = find_drm_connectors<span class="org-rainbow-delimiters-depth-1">(</span>result<span class="org-rainbow-delimiters-depth-1">)</span>
module.exit_json<span class="org-rainbow-delimiters-depth-1">(</span>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-rainbow-delimiters-depth-2">{</span><span class="org-string">'xrandr'</span>: data, <span class="org-string">'xorg'</span>: result, <span class="org-string">'drm'</span>: drm<span class="org-rainbow-delimiters-depth-2">}</span><span class="org-rainbow-delimiters-depth-1">)</span>
<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<span class="org-rainbow-delimiters-depth-1">(</span>argument_spec=ARG_SPECS, supports_check_mode=<span class="org-constant">False</span>,<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">try</span>:
<span class="org-variable-name">d</span> = subprocess.check_output<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span><span class="org-string">'xrandr'</span>, <span class="org-string">'-d'</span>, module.params<span class="org-rainbow-delimiters-depth-3">[</span><span class="org-string">'display'</span><span class="org-rainbow-delimiters-depth-3">]</span>, <span class="org-string">'--verbose'</span><span class="org-rainbow-delimiters-depth-2">]</span>,
universal_newlines=<span class="org-constant">True</span><span class="org-rainbow-delimiters-depth-1">)</span>.splitlines<span class="org-rainbow-delimiters-depth-1">()</span>
<span class="org-keyword">except</span> subprocess.CalledProcessError:
<span class="org-variable-name">xorg_data</span> = <span class="org-rainbow-delimiters-depth-1">{}</span>
<span class="org-keyword">else</span>:
<span class="org-variable-name">xorg_data</span> = parse_xrandr_verbose<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-builtin">iter</span><span class="org-rainbow-delimiters-depth-2">(</span>d<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span>
output_data<span class="org-rainbow-delimiters-depth-1">(</span>xorg_data, module.params<span class="org-rainbow-delimiters-depth-2">[</span><span class="org-string">'write_edids'</span><span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>
</pre>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org45eb8d4" class="outline-3">
<h3 id="org45eb8d4"><span class="section-number-3">8.5</span> rmmod.py</h3>
2019-05-15 19:55:51 +02:00
<div class="outline-text-3" id="text-8-5">
<div class="org-src-container">
<pre class="src src-python"><span class="org-comment-delimiter">#</span><span class="org-comment">!/usr/bin/python</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">-*- coding: utf-8 -*-</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Copyright: (c) 2019, Alexander Grothe <a href="mailto:seahawk1986%40gmx.de">&lt;seahawk1986@gmx.de&gt;</a></span>
<span class="org-comment-delimiter"># </span><span class="org-comment">GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)</span>
<span class="org-keyword">from</span> __future__ <span class="org-keyword">import</span> absolute_import, division, print_function
<span class="org-variable-name">__metaclass__</span> = <span class="org-builtin">type</span>
<span class="org-keyword">import</span> traceback
<span class="org-keyword">from</span> ansible.module_utils.basic <span class="org-keyword">import</span> AnsibleModule
<span class="org-keyword">from</span> ansible.module_utils._text <span class="org-keyword">import</span> to_native
<span class="org-variable-name">ANSIBLE_METADATA</span> = <span class="org-rainbow-delimiters-depth-1">{</span><span class="org-string">'metadata_version'</span>: <span class="org-string">'1.1'</span>,
<span class="org-string">'status'</span>: <span class="org-rainbow-delimiters-depth-2">[</span><span class="org-string">'preview'</span><span class="org-rainbow-delimiters-depth-2">]</span>,
<span class="org-string">'supported_by'</span>: <span class="org-string">'community'</span><span class="org-rainbow-delimiters-depth-1">}</span>
<span class="org-variable-name">DOCUMENTATION</span> = <span class="org-string">'''</span>
<span class="org-string">---</span>
<span class="org-string">module: rmmod</span>
<span class="org-string">short_description: unload kernel modules with rmmod</span>
<span class="org-string">version_added: 2.7</span>
<span class="org-string">author:</span>
<span class="org-string"> - Alexander Grothe</span>
<span class="org-string">description:</span>
<span class="org-string"> - Unload kernel modules with rmmod.</span>
<span class="org-string"> - Builtin kernel modules can't be removed (will do nothing in this case).</span>
<span class="org-string">options:</span>
<span class="org-string"> name:</span>
<span class="org-string"> required: true</span>
<span class="org-string"> description:</span>
<span class="org-string"> - Name of kernel module to remove.</span>
<span class="org-string">'''</span>
<span class="org-variable-name">EXAMPLES</span> = <span class="org-string">'''</span>
<span class="org-string">- name: Unload nouveau module</span>
<span class="org-string"> rmmod:</span>
<span class="org-string"> name: nouveau</span>
<span class="org-string">'''</span>
<span class="org-keyword">def</span> <span class="org-function-name">main</span><span class="org-rainbow-delimiters-depth-1">()</span>:
<span class="org-variable-name">module</span> = AnsibleModule<span class="org-rainbow-delimiters-depth-1">(</span>
argument_spec=<span class="org-builtin">dict</span><span class="org-rainbow-delimiters-depth-2">(</span>
name=<span class="org-builtin">dict</span><span class="org-rainbow-delimiters-depth-3">(</span><span class="org-builtin">type</span>=<span class="org-string">'str'</span>, required=<span class="org-constant">True</span><span class="org-rainbow-delimiters-depth-3">)</span>,
<span class="org-rainbow-delimiters-depth-2">)</span>,
supports_check_mode=<span class="org-constant">True</span>,
<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">name</span> = module.params<span class="org-rainbow-delimiters-depth-1">[</span><span class="org-string">'name'</span><span class="org-rainbow-delimiters-depth-1">]</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">FIXME: Adding all parameters as result values is useless</span>
<span class="org-variable-name">result</span> = <span class="org-builtin">dict</span><span class="org-rainbow-delimiters-depth-1">(</span>
changed=<span class="org-constant">False</span>,
name=name,
<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">Check if module is loaded</span>
<span class="org-keyword">try</span>:
<span class="org-variable-name">is_loaded</span> = <span class="org-constant">False</span>
<span class="org-keyword">with</span> <span class="org-builtin">open</span><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'/proc/modules'</span><span class="org-rainbow-delimiters-depth-1">)</span> <span class="org-keyword">as</span> modules:
<span class="org-variable-name">module_name</span> = name.replace<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-string">'-'</span>, <span class="org-string">'_'</span><span class="org-rainbow-delimiters-depth-1">)</span> + <span class="org-string">' '</span>
<span class="org-keyword">for</span> line <span class="org-keyword">in</span> modules:
<span class="org-keyword">if</span> line.startswith<span class="org-rainbow-delimiters-depth-1">(</span>module_name<span class="org-rainbow-delimiters-depth-1">)</span>:
<span class="org-variable-name">is_loaded</span> = <span class="org-constant">True</span>
<span class="org-keyword">break</span>
<span class="org-keyword">except</span> <span class="org-type">IOError</span> <span class="org-keyword">as</span> e:
module.fail_json<span class="org-rainbow-delimiters-depth-1">(</span>msg=to_native<span class="org-rainbow-delimiters-depth-2">(</span>e<span class="org-rainbow-delimiters-depth-2">)</span>, exception=traceback.format_exc<span class="org-rainbow-delimiters-depth-2">()</span>, **result<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-comment-delimiter"># </span><span class="org-comment">remove module if it is loaded</span>
<span class="org-keyword">if</span> is_loaded:
<span class="org-keyword">if</span> <span class="org-keyword">not</span> module.check_mode:
<span class="org-variable-name">rc</span>, <span class="org-variable-name">out</span>, <span class="org-variable-name">err</span> = module.run_command<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-rainbow-delimiters-depth-2">[</span>module.get_bin_path<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">'rmmod'</span>, <span class="org-constant">True</span><span class="org-rainbow-delimiters-depth-3">)</span>, name<span class="org-rainbow-delimiters-depth-2">]</span><span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">if</span> rc != 0:
module.fail_json<span class="org-rainbow-delimiters-depth-1">(</span>msg=err, rc=rc, stdout=out, stderr=err, **result<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-variable-name">result</span><span class="org-rainbow-delimiters-depth-1">[</span><span class="org-string">'changed'</span><span class="org-rainbow-delimiters-depth-1">]</span> = <span class="org-constant">True</span>
module.exit_json<span class="org-rainbow-delimiters-depth-1">(</span>**result<span class="org-rainbow-delimiters-depth-1">)</span>
<span class="org-keyword">if</span> <span class="org-builtin">__name__</span> == <span class="org-string">'__main__'</span>:
main<span class="org-rainbow-delimiters-depth-1">()</span>
</pre>
</div>
</div>
</div>
</div>
2019-05-20 21:36:57 +02:00
<div id="outline-container-org675b603" class="outline-2">
<h2 id="org675b603"><span class="section-number-2">9</span> Handlers</h2>
2019-05-15 19:55:51 +02:00
<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
- <span class="org-variable-name">name</span>: reboot required
<span class="org-variable-name">debug</span>:
<span class="org-variable-name">msg</span>: PLEASE REBOOT YOUR SYSTEM.
</pre>
</div>
</div>
</div>
2017-03-17 11:47:31 +01:00
</div>
<div id="postamble" class="status">
<p class="author">Autor: Alexander Grothe &lt;seahawk1986@gmx.de&gt;</p>
2019-05-20 21:36:57 +02:00
<p class="date">Created: 2019-05-20 Mo 21:36</p>
2017-03-17 11:47:31 +01:00
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>
</html>