yavdr-ansible/Manual.html

5575 lines
467 KiB
HTML

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<!-- 2017-07-09 So 10:58 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Ansible Playbooks for yaVDR 0.7</title>
<meta name="generator" content="Org mode" />
<meta name="author" content="Alexander Grothe &lt;seahawk1986@gmx.de&gt;" />
<style type="text/css">
<!--/*--><![CDATA[/*><!--*/
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #ccc;
box-shadow: 3px 3px 3px #eee;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: visible;
padding-top: 1.2em;
}
pre.src:before {
display: none;
position: absolute;
background-color: white;
top: -10px;
right: 10px;
padding: 3px;
border: 1px solid black;
}
pre.src:hover:before { display: inline;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'Javascript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { width: 90%; }
/*]]>*/-->
</style>
<link rel="stylesheet" type="text/css" href="http://www.pirilampo.org/styles/readtheorg/css/htmlize.css"/>
<link rel="stylesheet" type="text/css" href="http://www.pirilampo.org/styles/readtheorg/css/readtheorg.css"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<script type="text/javascript" src="http://www.pirilampo.org/styles/lib/js/jquery.stickytableheaders.min.js"></script>
<script type="text/javascript" src="http://www.pirilampo.org/styles/readtheorg/js/readtheorg.js"></script>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2017 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
</script>
</head>
<body>
<div id="content">
<h1 class="title">Ansible Playbooks for yaVDR 0.7</h1>
<div id="table-of-contents">
<h2>Inhaltsverzeichnis</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org86448f8">1. User Stories</a>
<ul>
<li><a href="#orgfd77ac2">1.1. yavdr-full</a>
<ul>
<li><a href="#org47a8bb6">1.1.1. Using vdr, pulseaudio and xorg together</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#org31c5ae0">2. Notes</a>
<ul>
<li><a href="#org5d86bad">2.1. <span class="todo TODO">TODO</span> optimize and document data structure for xorg parsing script</a></li>
<li><a href="#orgc55634a">2.2. <span class="todo TODO">TODO</span> xorg.conf templates for intel, nvidia, noveau and radeon drivers</a>
<ul>
<li><a href="#orga15aaac">2.2.1. <span class="todo STARTED">STARTED</span> BusID für (nvidia) Grafikkarten aus lspci auslesen</a></li>
<li><a href="#org2064ef4">2.2.2. NVIDIA-Dokumentation zur BusID:</a></li>
</ul>
</li>
<li><a href="#org8adf277">2.3. <span class="todo TODO">TODO</span> plan for customization of xorg settings by the user</a></li>
<li><a href="#org430bea2">2.4. <span class="todo SOMEDAY">SOMEDAY</span> select best frontend based on GPU</a></li>
</ul>
</li>
<li><a href="#org282a006">3. Introduction</a></li>
<li><a href="#org82e3b8f">4. Installing and configuring yaVDR with Ansible</a>
<ul>
<li><a href="#org6189889">4.1. Install script for local usage</a></li>
</ul>
</li>
<li><a href="#org3e08e38">5. Playbooks</a>
<ul>
<li><a href="#org0da7f47">5.1. yavdr07.yml</a></li>
<li><a href="#org2fcfe8e">5.2. yavdr07-headless.yml</a></li>
</ul>
</li>
<li><a href="#org8af2d97">6. Hosts</a></li>
<li><a href="#orgb65fff6">7. Group Variables</a>
<ul>
<li><a href="#org2ecee7b">7.1. default text for templates used by ansible</a></li>
<li><a href="#orge86cd61">7.2. PPAs</a></li>
<li><a href="#org2865cff">7.3. VDR user, directories, special configuration and plugins</a></li>
<li><a href="#orga835956">7.4. Media directories</a></li>
<li><a href="#org262cfdf">7.5. NFS</a></li>
<li><a href="#org6bd86de">7.6. Samba</a></li>
<li><a href="#org6af080d">7.7. Additional packages</a></li>
<li><a href="#org88d8f73">7.8. System pre-configuration</a></li>
</ul>
</li>
<li><a href="#org39d9921">8. Roles</a>
<ul>
<li><a href="#org5594d1b">8.1. install-dependencies</a>
<ul>
<li><a href="#orge076d38">8.1.1. tasks</a></li>
</ul>
</li>
<li><a href="#org99c177e">8.2. nvidia-381 drivers</a>
<ul>
<li><a href="#org6e50a5c">8.2.1. tasks</a></li>
</ul>
</li>
<li><a href="#org34d0d7e">8.3. yavdr-common</a>
<ul>
<li><a href="#orga7f371a">8.3.1. default variables</a></li>
<li><a href="#org36e79e2">8.3.2. tasks</a></li>
<li><a href="#org08342aa">8.3.3. templates</a></li>
</ul>
</li>
<li><a href="#org103b432">8.4. vdr</a>
<ul>
<li><a href="#org99db756">8.4.1. tasks</a></li>
<li><a href="#orgc35e409">8.4.2. templates</a></li>
<li><a href="#orge8ae2bf">8.4.3. files</a></li>
</ul>
</li>
<li><a href="#orga069a43">8.5. <span class="todo STARTED">STARTED</span> yavdr-network</a>
<ul>
<li><a href="#org75053dd">8.5.1. default variables</a></li>
<li><a href="#org7a595ed">8.5.2. tasks</a></li>
</ul>
</li>
<li><a href="#orgfbf8c34">8.6. nfs-server</a>
<ul>
<li><a href="#orgeda33ba">8.6.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="#org61e31f2">8.6.2. tasks</a></li>
<li><a href="#orgf686991">8.6.3. templates</a></li>
</ul>
</li>
<li><a href="#orgf6d68de">8.7. <span class="todo TODO">TODO</span> yavdr-remote</a>
<ul>
<li><a href="#orgaed55b9">8.7.1. default variables</a></li>
<li><a href="#orgac92f3f">8.7.2. tasks</a></li>
<li><a href="#org34fd078">8.7.3. templates</a></li>
<li><a href="#org16b771d">8.7.4. files</a></li>
</ul>
</li>
<li><a href="#org74ecc16">8.8. pulseaudio</a>
<ul>
<li><a href="#orgc2270b4">8.8.1. tasks</a></li>
<li><a href="#orgae41b07">8.8.2. templates</a></li>
</ul>
</li>
<li><a href="#orgdce9b1c">8.9. yavdr-xorg</a>
<ul>
<li><a href="#org6cbd648">8.9.1. <span class="todo TODO">TODO</span> automatic X-server configuration</a></li>
<li><a href="#org6af89db">8.9.2. default variables</a></li>
<li><a href="#orgd518a9f">8.9.3. tasks</a></li>
<li><a href="#orga7afbb7">8.9.4. templates</a></li>
</ul>
</li>
<li><a href="#org98b4849">8.10. samba-install</a>
<ul>
<li><a href="#orgcce73c5">8.10.1. tasks</a></li>
</ul>
</li>
<li><a href="#orgf007f43">8.11. samba-config</a>
<ul>
<li><a href="#org2061752">8.11.1. tasks</a></li>
<li><a href="#org01065c5">8.11.2. templates</a></li>
</ul>
</li>
<li><a href="#org681bc44">8.12. <span class="todo STARTED">STARTED</span> autoinstall-drivers</a>
<ul>
<li><a href="#org7a93da3">8.12.1. <span class="todo TODO">TODO</span> sundtek for Sundtek devices (local or network connection)</a></li>
<li><a href="#org76855cd">8.12.2. <span class="todo TODO">TODO</span> dddvb-dkms if only newer DD cards are detected</a></li>
<li><a href="#org513868e">8.12.3. <span class="todo TODO">TODO</span> media-build-experimental (up to kernel 4.8) for &bdquo;old&ldquo; cards like TT S2-6400 FF</a></li>
<li><a href="#org6b176ba">8.12.4. <span class="todo TODO">TODO</span> newly merged DD drivers</a></li>
</ul>
</li>
<li><a href="#org9fbb77f">8.13. autoinstall-ubuntu-drivers</a>
<ul>
<li><a href="#org58a3e53">8.13.1. tasks</a></li>
</ul>
</li>
<li><a href="#org0f11154">8.14. autoinstall-satip</a>
<ul>
<li><a href="#orgd42b084">8.14.1. tasks</a></li>
</ul>
</li>
<li><a href="#org6af150c">8.15. autoinstall-targavfd</a>
<ul>
<li><a href="#orgd699a60">8.15.1. tasks</a></li>
</ul>
</li>
<li><a href="#org31d2637">8.16. autoinstall-imonlcd</a>
<ul>
<li><a href="#org0c45f82">8.16.1. tasks</a></li>
</ul>
</li>
<li><a href="#org89e031a">8.17. autoinstall-libcecdaemon</a>
<ul>
<li><a href="#org3e26e81">8.17.1. tasks</a></li>
</ul>
</li>
<li><a href="#org4c3c08c">8.18. autoinstall-pvr350</a>
<ul>
<li><a href="#org1bf551d">8.18.1. tasks</a></li>
</ul>
</li>
<li><a href="#org586ee61">8.19. <span class="todo TODO">TODO</span> autoinstall-dvbhddevice</a>
<ul>
<li><a href="#orgedd8aa3">8.19.1. tasks</a></li>
</ul>
</li>
<li><a href="#orgc3f3ee3">8.20. autoinstall-dvbsddevice</a>
<ul>
<li><a href="#org6b9b52a">8.20.1. tasks</a></li>
</ul>
</li>
<li><a href="#org68417c3">8.21. kodi</a>
<ul>
<li><a href="#orgee0bf4d">8.21.1. tasks</a></li>
<li><a href="#orgad03d20">8.21.2. templates</a></li>
<li><a href="#org55d3a2e">8.21.3. files</a></li>
</ul>
</li>
<li><a href="#orgd72c29d">8.22. dvd</a>
<ul>
<li><a href="#org1b6796c">8.22.1. tasks</a></li>
</ul>
</li>
<li><a href="#org407952c">8.23. template-test</a></li>
<li><a href="#org26960b4">8.24. grub-config</a>
<ul>
<li><a href="#org4a8102e">8.24.1. default variables</a></li>
<li><a href="#org188b604">8.24.2. tasks</a></li>
<li><a href="#org2994081">8.24.3. templates</a></li>
<li><a href="#org7d58a91">8.24.4. handlers</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#org875f5b7">9. Modules</a>
<ul>
<li><a href="#orgaecaf37">9.1. hardware_facts.py</a></li>
<li><a href="#org1b209d3">9.2. satip_facts.py</a></li>
<li><a href="#orgf126714">9.3. xrandr_facts.py</a></li>
</ul>
</li>
<li><a href="#orgb81ba9d">10. Handlers</a></li>
</ul>
</div>
</div>
<div id="outline-container-org86448f8" class="outline-2">
<h2 id="org86448f8"><span class="section-number-2">1</span> User Stories</h2>
<div class="outline-text-2" id="text-1">
</div><div id="outline-container-orgfd77ac2" class="outline-3">
<h3 id="orgfd77ac2"><span class="section-number-3">1.1</span> yavdr-full</h3>
<div class="outline-text-3" id="text-1-1">
<p>
A User wants to install yaVDR without customization and relies on full automation.
</p>
<p>
After installing a supported Ubuntu Server version and (if needed) setting up the network connection, the install script is downloaded and started.
</p>
<p>
The install script adds the ansible PPA, installs ansible and other basic dependencies and runs the automated installation process.
</p>
<p>
Several roles are used to tie everything together:
</p>
<dl class="org-dl">
<dt>yavdr-common</dt><dd>installs the basic set of packages needed and preconfigures the system (package sources, package manager settings, entires for network ports, directory structure etc.). Also collects information about the system</dd>
<dt>autoinstall-ubuntu-drivers</dt><dd>uses Ubuntu&rsquo;s automatic detection for additional drivers (e.g. proprietary nvidia driver, microcode updates, VirtualBox guest additions)</dd>
<dt>vdr</dt><dd>install the vdr package and required plugins</dd>
<dt>pulseaudio</dt><dd>install and preconfigure pulseaudio</dd>
<dt>yavdr-network</dt><dd>configure WOL, add nfs client capabilites, install avahi-linker</dd>
<dt>samba-server</dt><dd>install and preconfigure a samba server</dd>
<dt>nfs-server</dt><dd>install nfs-kernelserver and preconfigure nfs exports (and avahi-announcements)</dd>
<dt>autoinstall-satip</dt><dd>install vdr-plugin-satip if a Sat&gt;IP server has been found</dd>
<dt>autoinstall-targavfd</dt><dd>install vdr-plugin-targavfd if display is connected</dd>
<dt>autoinstall-imonlcd</dt><dd>install vdr-plugin-imonlcd if a matchind display is connected</dd>
<dt>yavdr-xorg</dt><dd>install and configure a systemd user session with a running X-server. A frontend script will manage VDR&rsquo;s frontend and other applications like KODI. Also choose the best possible output plugin.</dd>
<dt>grub-config</dt><dd>update grub configuration based on executed roles</dd>
</dl>
</div>
<div id="outline-container-org47a8bb6" class="outline-4">
<h4 id="org47a8bb6"><span class="section-number-4">1.1.1</span> Using vdr, pulseaudio and xorg together</h4>
</div>
</div>
</div>
<div id="outline-container-org31c5ae0" class="outline-2">
<h2 id="org31c5ae0"><span class="section-number-2">2</span> Notes</h2>
<div class="outline-text-2" id="text-2">
<p>
:export nil
</p>
</div>
<div id="outline-container-org5d86bad" class="outline-3">
<h3 id="org5d86bad"><span class="section-number-3">2.1</span> <span class="todo TODO">TODO</span> optimize and document data structure for xorg parsing script</h3>
</div>
<div id="outline-container-orgc55634a" class="outline-3">
<h3 id="orgc55634a"><span class="section-number-3">2.2</span> <span class="todo TODO">TODO</span> xorg.conf templates for intel, nvidia, noveau and radeon drivers</h3>
<div class="outline-text-3" id="text-2-2">
</div><div id="outline-container-orga15aaac" class="outline-4">
<h4 id="orga15aaac"><span class="section-number-4">2.2.1</span> <span class="todo STARTED">STARTED</span> BusID für (nvidia) Grafikkarten aus lspci auslesen</h4>
<div class="outline-text-4" id="text-2-2-1">
<p>
Format: &bdquo;%d:%d:%d&ldquo; (lspci liefert es als &bdquo;%04x:%02x:%02x.%x&ldquo;, domain, bus, device, function)
</p>
<ul class="org-ul">
<li>Wie mit mehreren GPUs umgehen? Priorität bzw. Reihenfolge?</li>
<li>Was ist mit NVidia Optimus/Bumblebee (AFAIK keine VDPAU-Funktionalität)?</li>
<li>Wie BusID der xrandr-Ausgabe zuordnen?</li>
</ul>
</div>
</div>
<div id="outline-container-org2064ef4" class="outline-4">
<h4 id="org2064ef4"><span class="section-number-4">2.2.2</span> NVIDIA-Dokumentation zur BusID:</h4>
<div class="outline-text-4" id="text-2-2-2">
</div><ol class="org-ol"><li><a id="org5b9fb02"></a>What is the format of a PCI Bus ID?<br /><div class="outline-text-5" id="text-2-2-2-1">
<p>
Different tools have different formats for the PCI Bus ID of a PCI device.
</p>
<p>
The X server&rsquo;s &bdquo;BusID&ldquo; X configuration file option interprets the BusID string in the format &bdquo;bus@domain:device:function&ldquo; (the &bdquo;@domain&ldquo; portion is only needed if the PCI domain is non-zero), in decimal. More specifically,
</p>
<p>
&bdquo;%d@%d:%d:%d&ldquo;, bus, domain, device, function
in printf(3) syntax. NVIDIA X driver logging, nvidia-xconfig, and nvidia-settings match the X configuration file BusID convention.
</p>
<p>
The lspci(8) utility, in contrast, reports the PCI BusID of a PCI device in the format &bdquo;domain:bus:device.function&ldquo;, printing the values in hexadecimal. More specifically,
</p>
<p>
&bdquo;%04x:%02x:%02x.%x&ldquo;, domain, bus, device, function
in printf(3) syntax. The &bdquo;Bus Location&ldquo; reported in the /proc/driver/nvidia/gpus/0..N/information files matches the lspci format.
</p>
</div></li>
<li><a id="org7c2fae2"></a>Parsen der /proc/driver/nvidia/gpus/*/information Dateien<br /><div class="outline-text-5" id="text-2-2-2-2">
<div class="org-src-container">
<pre class="src src-python"><span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">read the BusID for nvidia cards and the model name</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">from the /proc/driver/nvidia/gpus/*/information file(s)</span>
<span style="color: #0000FF;">from</span> __future__ <span style="color: #0000FF;">import</span> print_function
<span style="color: #0000FF;">import</span> glob
<span style="color: #0000FF;">import</span> re
<span style="color: #BA36A5;">BusID_RE</span> = re.<span style="color: #006FE0;">compile</span>((
<span style="color: #008000;">'(?P&lt;domain&gt;[0-9a-fA-F]+)'</span>
<span style="color: #008000;">':'</span>
<span style="color: #008000;">'(?P&lt;bus&gt;[0-9a-fA-F]+)'</span>
<span style="color: #008000;">':'</span>
<span style="color: #008000;">'(?P&lt;device&gt;[0-9a-fA-F]+)'</span>
<span style="color: #008000;">'\.'</span>
<span style="color: #008000;">'(?P&lt;function&gt;[0-9a-fA-F]+)'</span>
))
<span style="color: #BA36A5;">Model_RE</span> = re.<span style="color: #006FE0;">compile</span>(<span style="color: #008000;">'Model:\s+(.*)'</span>)
<span style="color: #0000FF;">def</span> <span style="color: #006699;">get_BusIDs</span>():
<span style="color: #0000FF;">for</span> gpu_info <span style="color: #0000FF;">in</span> glob.glob(<span style="color: #008000;">'/proc/driver/nvidia/gpus/*/information'</span>):
<span style="color: #0000FF;">with</span> <span style="color: #006FE0;">open</span>(gpu_info) <span style="color: #0000FF;">as</span> f:
<span style="color: #BA36A5;">data</span> = f.read()
<span style="color: #BA36A5;">match</span> = BusID_RE.search(data)
<span style="color: #0000FF;">if</span> match:
<span style="color: #BA36A5;">BusID</span> = <span style="color: #008000;">"{:d}@{:d}:{:d}:{:d}"</span>.<span style="color: #006FE0;">format</span>(*(<span style="color: #006FE0;">int</span>(n, 16) <span style="color: #0000FF;">for</span> n <span style="color: #0000FF;">in</span> match.groups()))
<span style="color: #0000FF;">yield</span> BusID, Model_RE.match(data).groups()[0]
<span style="color: #0000FF;">if</span> <span style="color: #006FE0;">__name__</span> == <span style="color: #008000;">'__main__'</span>:
<span style="color: #BA36A5;">BusIDs</span> = [BusID <span style="color: #0000FF;">for</span> BusID <span style="color: #0000FF;">in</span> get_BusIDs()]
<span style="color: #0000FF;">print</span>(BusIDs)
</pre>
</div>
</div></li></ol>
</div>
</div>
<div id="outline-container-org8adf277" class="outline-3">
<h3 id="org8adf277"><span class="section-number-3">2.3</span> <span class="todo TODO">TODO</span> plan for customization of xorg settings by the user</h3>
<div class="outline-text-3" id="text-2-3">
<p>
either directly or using a configuration wizard or a web frontend
</p>
</div>
</div>
<div id="outline-container-org430bea2" class="outline-3">
<h3 id="org430bea2"><span class="section-number-3">2.4</span> <span class="todo SOMEDAY">SOMEDAY</span> select best frontend based on GPU</h3>
<div class="outline-text-3" id="text-2-4">
<dl class="org-dl">
<dt>intel</dt><dd>softhddevice-vpp</dd>
<dt>amd</dt><dd>softhddevice-vpp</dd>
<dt>nvidia</dt><dd>softhddevice-openglosd (if no HEVC channels are needed)</dd>
</dl>
</div>
</div>
</div>
<div id="outline-container-org282a006" class="outline-2">
<h2 id="org282a006"><span class="section-number-2">3</span> Introduction</h2>
<div class="outline-text-2" id="text-3">
<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 himself so point releases, kernel versions and additional drivers can be chosen deliberately. After the basic setup is complete (and a working internet connection is available), a fully customizable install script completes the yaVDR installation.
</p>
</div>
</div>
<div id="outline-container-org82e3b8f" class="outline-2">
<h2 id="org82e3b8f"><span class="section-number-2">4</span> Installing and configuring yaVDR with Ansible</h2>
<div class="outline-text-2" id="text-4">
<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 style="color: #006FE0;">cd</span> yavdr-ansible
sudo ./install-yavdr.sh
</pre>
</div>
</div>
<div id="outline-container-org6189889" class="outline-3">
<h3 id="org6189889"><span class="section-number-3">4.1</span> Install script for local usage</h3>
<div class="outline-text-3" id="text-4-1">
<div class="org-src-container">
<pre class="src src-shell"><span style="color: #0000FF;">if</span> (( $<span style="color: #BA36A5;">EUID</span> != 0 )); <span style="color: #0000FF;">then</span>
<span style="color: #006FE0;">echo</span> <span style="color: #008000;">"This script must be run using sudo or as root"</span>
<span style="color: #0000FF;">exit</span>
<span style="color: #0000FF;">fi</span>
apt-get -y install software-properties-common
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Add repository for ansible</span>
add-apt-repository -y ppa:ansible/ansible
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">update packages</span>
apt-get update
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">install required packages</span>
apt-get -y install ansible
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">TODO: run ansible on local host</span>
ansible-playbook yavdr07.yml -b -i <span style="color: #008000;">'localhost_inventory'</span> --connection=local
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org3e08e38" class="outline-2">
<h2 id="org3e08e38"><span class="section-number-2">5</span> Playbooks</h2>
<div class="outline-text-2" id="text-5">
</div><div id="outline-container-org0da7f47" class="outline-3">
<h3 id="org0da7f47"><span class="section-number-3">5.1</span> yavdr07.yml</h3>
<div class="outline-text-3" id="text-5-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 style="color: #8D8D84; font-style: italic;">---</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">file: yavdr07.yml</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">this playbook sets up a complete yaVDR 0.7 installation</span>
- <span style="color: #BA36A5;">name</span>: set up yaVDR
<span style="color: #BA36A5;">hosts</span>: all
<span style="color: #BA36A5;">become</span>: <span style="color: #D0372D;">true</span>
<span style="color: #BA36A5;">roles</span>:
- yavdr-common <span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">install and configure the basic system</span>
- autoinstall-ubuntu-drivers <span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">use ubuntu-drivers to install proprietary dirvers</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">(e.g. nvidia, virtualbox)</span>
- vdr <span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">install vdr and related packages</span>
- yavdr-network <span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">enable network client capabilities</span>
- samba-install <span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">install samba server</span>
- samba-config <span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">configure samba server</span>
- nfs-server <span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">install nfs server</span>
- pulseaudio <span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">install pulseaudio</span>
- yavdr-xorg <span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">graphical session</span>
- yavdr-remote <span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">remote configuration files, services and scripts</span>
- autoinstall-satip <span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">install vdr-plugin-satip if a Sat&gt;IP server has been found</span>
- autoinstall-targavfd <span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">install vdr-plugin-targavfd if display is connected</span>
- autoinstall-imonlcd <span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">install vdr-plugin-imonlcd if a matchind display is connected</span>
- autoinstall-pvr350 <span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">install vdr-plugin-pvr350 if a matching card is detected</span>
- autoinstall-dvbsddevice <span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">install vdr-plugin-dvbsddevice if a matching card is detected</span>
- kodi
- dvd <span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">set up packages and a udev rule to allow kodi and other players</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">to play and eject optical media</span>
- grub-config <span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">configure grub</span>
<span style="color: #BA36A5;">handlers</span>:
- <span style="color: #BA36A5;">include</span>: handlers/main.yml
</pre>
</div>
</div>
</div>
<div id="outline-container-org2fcfe8e" class="outline-3">
<h3 id="org2fcfe8e"><span class="section-number-3">5.2</span> yavdr07-headless.yml</h3>
<div class="outline-text-3" id="text-5-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 style="color: #8D8D84; font-style: italic;">---</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">file: yavdr07-headless.yml</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">this playbook set up a headless yaVDR 0.7 installation</span>
- <span style="color: #BA36A5;">name</span>: set up a headless yaVDR server
<span style="color: #BA36A5;">hosts</span>: all
<span style="color: #BA36A5;">become</span>: <span style="color: #D0372D;">true</span>
<span style="color: #BA36A5;">roles</span>:
- yavdr-common
- vdr
- yavdr-network
- samba-server
- samba-config
- nfs-server
- grub-config
- autoinstall-satip
<span style="color: #BA36A5;">handlers</span>:
- <span style="color: #BA36A5;">include</span>: handlers/main.yml
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org8af2d97" class="outline-2">
<h2 id="org8af2d97"><span class="section-number-2">6</span> Hosts</h2>
<div class="outline-text-2" id="text-6">
<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 style="color: #6434A3;">localhost</span>]
<span style="color: #BA36A5;">localhost connection</span>=local
</pre>
</div>
</div>
</div>
<div id="outline-container-orgb65fff6" class="outline-2">
<h2 id="orgb65fff6"><span class="section-number-2">7</span> Group Variables</h2>
<div class="outline-text-2" id="text-7">
</div><div id="outline-container-org2ecee7b" class="outline-3">
<h3 id="org2ecee7b"><span class="section-number-3">7.1</span> default text for templates used by ansible</h3>
<div class="outline-text-3" id="text-7-1">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84; font-style: italic;">---</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">file: group_vars/all</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">this is the standard text to put in templates</span>
<span style="color: #BA36A5;">ansible_managed_file</span>: <span style="color: #008000;">"*** YAVDR: ANSIBLE MANAGED FILE ***"</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orge86cd61" class="outline-3">
<h3 id="orge86cd61"><span class="section-number-3">7.2</span> PPAs</h3>
<div class="outline-text-3" id="text-7-2">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #BA36A5;">branch</span>: unstable
<span style="color: #BA36A5;">ppa_owner</span>: <span style="color: #008000;">'ppa:yavdr'</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">a list of all package repositories to be added to the installation</span>
<span style="color: #BA36A5;">repositories</span>:
- <span style="color: #008000;">'{{ ppa_owner }}/main'</span>
- <span style="color: #008000;">'{{ ppa_owner }}/unstable-main'</span>
- <span style="color: #008000;">'{{ ppa_owner }}/{{branch}}-vdr'</span>
- <span style="color: #008000;">'{{ ppa_owner }}/{{branch}}-yavdr'</span>
- <span style="color: #008000;">'{{ ppa_owner }}/{{branch}}-kodi'</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org2865cff" class="outline-3">
<h3 id="org2865cff"><span class="section-number-3">7.3</span> VDR user, directories, special configuration and plugins</h3>
<div class="outline-text-3" id="text-7-3">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">properties of the user vdr and vdr-related options</span>
<span style="color: #BA36A5;">vdr</span>:
<span style="color: #BA36A5;">user</span>: vdr
<span style="color: #BA36A5;">group</span>: vdr
<span style="color: #BA36A5;">uid</span>: 666
<span style="color: #BA36A5;">gid</span>: 666
<span style="color: #BA36A5;">home</span>: /var/lib/vdr
<span style="color: #BA36A5;">confdir</span>: /var/lib/vdr
<span style="color: #BA36A5;">recdir</span>: /srv/vdr/video
<span style="color: #BA36A5;">hide_first_recording_level</span>: <span style="color: #D0372D;">false</span>
<span style="color: #BA36A5;">safe_dirnames</span>: true <span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">escape characters (useful for windows clients and FAT/NTFS file systems)</span>
<span style="color: #BA36A5;">override_vdr_charset</span>: <span style="color: #D0372D;">false</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">add the vdr plugins you want to install</span>
<span style="color: #BA36A5;">vdr_plugins</span>:
- vdr-plugin-devstatus
- vdr-plugin-markad
- vdr-plugin-restfulapi
- vdr-plugin-softhddevice
</pre>
</div>
</div>
</div>
<div id="outline-container-orga835956" class="outline-3">
<h3 id="orga835956"><span class="section-number-3">7.4</span> Media directories</h3>
<div class="outline-text-3" id="text-7-4">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">dictionary of directories for (shared) files. Automatically exported via NFS and Samba if those roles are enabled</span>
<span style="color: #BA36A5;">media_dirs</span>:
<span style="color: #BA36A5;">audio</span>: /srv/audio
<span style="color: #BA36A5;">video</span>: /srv/audio
<span style="color: #BA36A5;">pictures</span>: /srv/picture
<span style="color: #BA36A5;">files</span>: /srv/files
<span style="color: #BA36A5;">backups</span>: /srv/backups
<span style="color: #BA36A5;">recordings</span>: <span style="color: #008000;">'{{ vdr.recdir }}'</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org262cfdf" class="outline-3">
<h3 id="org262cfdf"><span class="section-number-3">7.5</span> NFS</h3>
<div class="outline-text-3" id="text-7-5">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #BA36A5;">nfs</span>:
<span style="color: #BA36A5;">insecure</span>: false <span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">set to true for OS X clients or if you plan to use libnfs as unprivileged user (e.g. KODI)</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org6bd86de" class="outline-3">
<h3 id="org6bd86de"><span class="section-number-3">7.6</span> Samba</h3>
<div class="outline-text-3" id="text-7-6">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #BA36A5;">samba</span>:
<span style="color: #BA36A5;">workgroup</span>: YAVDR
<span style="color: #BA36A5;">windows_compatible</span>: <span style="color: #008000;">'{{ vdr.safe_dirnames }}'</span> <span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">set to true to disable unix extensions, enable follow symlinks and wide links</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org6af080d" class="outline-3">
<h3 id="org6af080d"><span class="section-number-3">7.7</span> Additional packages</h3>
<div class="outline-text-3" id="text-7-7">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">additional packages you want to install</span>
<span style="color: #BA36A5;">extra_packages</span>:
- vim
- tree
- w-scan
- bpython
- bpython3
</pre>
</div>
</div>
</div>
<div id="outline-container-org88d8f73" class="outline-3">
<h3 id="org88d8f73"><span class="section-number-3">7.8</span> System pre-configuration</h3>
<div class="outline-text-3" id="text-7-8">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">system:</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">shutdown: poweroff</span>
<span style="color: #BA36A5;">grub</span>:
<span style="color: #BA36A5;">timeout</span>: 0
<span style="color: #BA36A5;">boot_options</span>: quiet nosplash
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org39d9921" class="outline-2">
<h2 id="org39d9921"><span class="section-number-2">8</span> Roles</h2>
<div class="outline-text-2" id="text-8">
</div><div id="outline-container-org5594d1b" class="outline-3">
<h3 id="org5594d1b"><span class="section-number-3">8.1</span> install-dependencies</h3>
<div class="outline-text-3" id="text-8-1">
</div><div id="outline-container-orge076d38" class="outline-4">
<h4 id="orge076d38"><span class="section-number-4">8.1.1</span> tasks</h4>
<div class="outline-text-4" id="text-8-1-1">
</div><ol class="org-ol"><li><a id="orgdf16d34"></a>main.yml<br /><div class="outline-text-5" id="text-8-1-1-1">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84; font-style: italic;">---</span>
- <span style="color: #BA36A5;">name</span>: apt | install packages
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">name</span>: <span style="color: #008000;">'{{ item }}'</span>
<span style="color: #BA36A5;">state</span>: present
<span style="color: #BA36A5;">install_recommends</span>: <span style="color: #D0372D;">no</span>
<span style="color: #BA36A5;">with_items</span>:
<span style="color: #008000;">'{{ packages }}'</span>
</pre>
</div>
</div></li></ol>
</div>
</div>
<div id="outline-container-org99c177e" class="outline-3">
<h3 id="org99c177e"><span class="section-number-3">8.2</span> nvidia-381 drivers</h3>
<div class="outline-text-3" id="text-8-2">
<p>
install nvidia-381 from ppa:graphics-drivers/ppa
</p>
</div>
<div id="outline-container-org6e50a5c" class="outline-4">
<h4 id="org6e50a5c"><span class="section-number-4">8.2.1</span> tasks</h4>
<div class="outline-text-4" id="text-8-2-1">
</div><ol class="org-ol"><li><a id="org9e77c9f"></a>main.yml<br /><div class="outline-text-5" id="text-8-2-1-1">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84; font-style: italic;">---</span>
- <span style="color: #BA36A5;">name</span>: add ppa:graphics-drivers/ppa
<span style="color: #BA36A5;">apt_repository</span>:
<span style="color: #BA36A5;">repo</span>: <span style="color: #008000;">'ppa:graphics-drivers/ppa'</span>
<span style="color: #BA36A5;">state</span>: present
<span style="color: #BA36A5;">update_cache</span>: <span style="color: #D0372D;">yes</span>
- <span style="color: #BA36A5;">name</span>: install nvidia-381 and other required packages
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">name</span>: <span style="color: #008000;">'{{ item }}'</span>
<span style="color: #BA36A5;">state</span>: present
<span style="color: #BA36A5;">install_recommends</span>: <span style="color: #D0372D;">no</span>
<span style="color: #BA36A5;">with_items</span>:
- nvidia-381
- nvidia-settings
</pre>
</div>
</div></li></ol>
</div>
</div>
<div id="outline-container-org34d0d7e" class="outline-3">
<h3 id="org34d0d7e"><span class="section-number-3">8.3</span> yavdr-common</h3>
<div class="outline-text-3" id="text-8-3">
<p>
This role is used to set up a basic yaVDR installation. It creates the directories, installs the vdr and other useful packages.
</p>
</div>
<div id="outline-container-orga7f371a" class="outline-4">
<h4 id="orga7f371a"><span class="section-number-4">8.3.1</span> default variables</h4>
<div class="outline-text-4" id="text-8-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 style="color: #8D8D84; font-style: italic;">---</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">file: roles/yavdr-common/defaults/main.yml</span>
</pre>
</div>
</div>
<ol class="org-ol"><li><a id="orgfe88e58"></a>Repositories<br /><div class="outline-text-5" id="text-8-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 style="color: #BA36A5;">branch</span>: unstable
<span style="color: #BA36A5;">repositories</span>:
- <span style="color: #008000;">'ppa:yavdr/main'</span>
- <span style="color: #008000;">'ppa:yavdr/unstable-main'</span>
- <span style="color: #008000;">'ppa:yavdr/{{branch}}-vdr'</span>
- <span style="color: #008000;">'ppa:yavdr/{{branch}}-kodi'</span>
- <span style="color: #008000;">'ppa:yavdr/{{branch}}-yavdr'</span>
</pre>
</div>
</div></li>
<li><a id="org962fb9b"></a>Drivers<br /><div class="outline-text-5" id="text-8-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 style="color: #BA36A5;">drivers</span>:
<span style="color: #BA36A5;">sundtek</span>: auto
<span style="color: #BA36A5;">ddvb-dkms</span>: auto
</pre>
</div>
</div></li>
<li><a id="org1e40160"></a>Additional Packages<br /><div class="outline-text-5" id="text-8-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 style="color: #BA36A5;">extra_packages</span>:
- vim
- tree
- w-scan
</pre>
</div>
</div></li>
<li><a id="orga9e56be"></a>VDR<br /><div class="outline-text-5" id="text-8-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 style="color: #BA36A5;">vdr</span>:
<span style="color: #BA36A5;">user</span>: vdr
<span style="color: #BA36A5;">group</span>: vdr
<span style="color: #BA36A5;">uid</span>: 666
<span style="color: #BA36A5;">gid</span>: 666
<span style="color: #BA36A5;">home</span>: /var/lib/vdr
<span style="color: #BA36A5;">recdir</span>: /srv/vdr/video
<span style="color: #BA36A5;">hide_first_recording_level</span>: <span style="color: #D0372D;">false</span>
<span style="color: #BA36A5;">safe_dirnames</span>: <span style="color: #D0372D;">true</span>
<span style="color: #BA36A5;">override_vdr_charset</span>: <span style="color: #D0372D;">false</span>
</pre>
</div>
</div></li></ol>
</div>
<div id="outline-container-org36e79e2" class="outline-4">
<h4 id="org36e79e2"><span class="section-number-4">8.3.2</span> tasks</h4>
<div class="outline-text-4" id="text-8-3-2">
<p>
yavdr-common executes the following tasks:
</p>
</div>
<ol class="org-ol"><li><a id="orga1ac414"></a>main.yml<br /><ol class="org-ol"><li><a id="org2b6560d"></a>Disable default installation of recommended packages<br /><div class="outline-text-6" id="text-8-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 style="color: #8D8D84; font-style: italic;">---</span>
- <span style="color: #BA36A5;">name</span>: apt | prevent automatic installation of recommended packages
<span style="color: #BA36A5;">template</span>:
<span style="color: #BA36A5;">src</span>: templates/90-norecommends.j2
<span style="color: #BA36A5;">dest</span>: /etc/apt/apt.conf.d/90norecommends
</pre>
</div>
</div></li>
<li><a id="orga41fbc8"></a>Use bash instead of dash<br /><div class="outline-text-6" id="text-8-3-2-1-2">
<div class="org-src-container">
<pre class="src src-yaml">- <span style="color: #BA36A5;">name</span>: use bash instead of dash
<span style="color: #BA36A5;">shell</span>: |
echo <span style="color: #008000;">"set dash/sh false"</span> | debconf-communicate
<span style="color: #008000;"> dpkg-reconfigure -f noninteractive dash</span>
</pre>
</div>
</div></li>
<li><a id="org93fc7c0"></a>create user vdr<br /></li>
<li><a id="org58808f6"></a>Disable release-upgrade notifications<br /><div class="outline-text-6" id="text-8-3-2-1-4">
<div class="org-src-container">
<pre class="src src-yaml">- <span style="color: #BA36A5;">name</span>: disable release-upgrade notifications
<span style="color: #BA36A5;">lineinfile</span>:
<span style="color: #BA36A5;">dest</span>: /etc/update-manager/release-upgrades
<span style="color: #BA36A5;">backrefs</span>: <span style="color: #D0372D;">yes</span>
<span style="color: #BA36A5;">state</span>: present
<span style="color: #BA36A5;">regexp</span>: <span style="color: #008000;">'^(Prompt=).*$'</span>
<span style="color: #BA36A5;">line</span>: <span style="color: #008000;">'\1never'</span>
</pre>
</div>
</div></li>
<li><a id="org8c8f2e8"></a>Set up package repositories<br /><div class="outline-text-6" id="text-8-3-2-1-5">
<div class="org-src-container">
<pre class="src src-yaml">- <span style="color: #BA36A5;">name</span>: add yaVDR PPAs
<span style="color: #BA36A5;">apt_repository</span>:
<span style="color: #BA36A5;">repo</span>: <span style="color: #008000;">'{{ item }}'</span>
<span style="color: #BA36A5;">state</span>: present
<span style="color: #BA36A5;">update_cache</span>: <span style="color: #D0372D;">yes</span>
<span style="color: #BA36A5;">with_items</span>: <span style="color: #008000;">'{{ repositories }}'</span>
- <span style="color: #BA36A5;">name</span>: upgrade existing packages
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">upgrade</span>: dist
<span style="color: #BA36A5;">update_cache</span>: <span style="color: #D0372D;">yes</span>
</pre>
</div>
</div></li>
<li><a id="org3da00a2"></a>Install essential packages<br /><div class="outline-text-6" id="text-8-3-2-1-6">
<div class="org-src-container">
<pre class="src src-yaml">- <span style="color: #BA36A5;">name</span>: apt | install basic packages
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">name</span>: <span style="color: #008000;">'{{ item }}'</span>
<span style="color: #BA36A5;">state</span>: present
<span style="color: #BA36A5;">install_recommends</span>: <span style="color: #D0372D;">no</span>
<span style="color: #BA36A5;">with_items</span>:
- anacron
- at
- bash-completion
<span style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">- biosdevname # caution: may change device names after a minimal installation!</span>
- debconf-utils
- linux-firmware
- psmisc
- python-kmodpy
- python-usb
- python3-usb
- software-properties-common
- ssh
- wget
- wpasupplicant
- usbutils
- xfsprogs
</pre>
</div>
</div></li>
<li><a id="orgd94e917"></a>Install additional packages (user defined)<br /><div class="outline-text-6" id="text-8-3-2-1-7">
<div class="org-src-container">
<pre class="src src-yaml">- <span style="color: #BA36A5;">name</span>: apt | install extra packages
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">name</span>: <span style="color: #008000;">'{{ item }}'</span>
<span style="color: #BA36A5;">state</span>: present
<span style="color: #BA36A5;">install_recommends</span>: <span style="color: #D0372D;">no</span>
<span style="color: #BA36A5;">with_items</span>:
<span style="color: #008000;">'{{ extra_packages }}'</span>
</pre>
</div>
</div></li>
<li><a id="org5015e3e"></a>Gather facts with custom modules<br /><div class="outline-text-6" id="text-8-3-2-1-8">
<div class="org-src-container">
<pre class="src src-yaml">- <span style="color: #BA36A5;">name</span>: get information about usb and pci hardware and loaded kernel modules
<span style="color: #BA36A5;">hardware_facts</span>:
<span style="color: #BA36A5;">usb</span>: <span style="color: #D0372D;">True</span>
<span style="color: #BA36A5;">pci</span>: <span style="color: #D0372D;">True</span>
<span style="color: #BA36A5;">modules</span>: <span style="color: #D0372D;">True</span>
<span style="color: #BA36A5;">gpus</span>: <span style="color: #D0372D;">True</span>
- <span style="color: #BA36A5;">debug</span>:
<span style="color: #BA36A5;">var</span>: usb
<span style="color: #BA36A5;">verbosity</span>: 1
- <span style="color: #BA36A5;">debug</span>:
<span style="color: #BA36A5;">var</span>: pci
<span style="color: #BA36A5;">verbosity</span>: 1
- <span style="color: #BA36A5;">debug</span>:
<span style="color: #BA36A5;">var</span>: modules
<span style="color: #BA36A5;">verbosity</span>: 1
- <span style="color: #BA36A5;">debug</span>:
<span style="color: #BA36A5;">var</span>: gpus
<span style="color: #BA36A5;">verbosity</span>: 1
</pre>
</div>
</div></li>
<li><a id="org3d14fd4"></a>create media directories<br /></li></ol></li></ol>
</div>
<div id="outline-container-org08342aa" class="outline-4">
<h4 id="org08342aa"><span class="section-number-4">8.3.3</span> templates</h4>
<div class="outline-text-4" id="text-8-3-3">
<div class="org-src-container">
<pre class="src src-c">{{ ansible_managed_file | comment(<span style="color: #008000;">'c'</span>) }}
<span style="color: #8D8D84;">// </span><span style="color: #8D8D84; font-style: italic;">Recommends are as of now still abused in many packages</span>
APT::Install-Recommends <span style="color: #008000;">"0"</span>;
APT::Install-Suggests <span style="color: #008000;">"0"</span>;
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org103b432" class="outline-3">
<h3 id="org103b432"><span class="section-number-3">8.4</span> vdr</h3>
<div class="outline-text-3" id="text-8-4">
</div><div id="outline-container-org99db756" class="outline-4">
<h4 id="org99db756"><span class="section-number-4">8.4.1</span> tasks</h4>
<div class="outline-text-4" id="text-8-4-1">
</div><ol class="org-ol"><li><a id="org41deeda"></a>install the basic vdr packages<br /><div class="outline-text-5" id="text-8-4-1-1">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84; font-style: italic;">---</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">file: roles/vdr/tasks/main.yml</span>
- <span style="color: #BA36A5;">name</span>: apt | install basic vdr packages
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">name</span>: <span style="color: #008000;">'{{ item }}'</span>
<span style="color: #BA36A5;">state</span>: present
<span style="color: #BA36A5;">install_recommends</span>: <span style="color: #D0372D;">no</span>
<span style="color: #BA36A5;">with_items</span>:
- vdr
- vdrctl
- vdr-plugin-dbus2vdr
</pre>
</div>
</div></li>
<li><a id="org9c80d97"></a>Add svdrp/svdrp-disc to /etc/services<br /><div class="outline-text-5" id="text-8-4-1-2">
<div class="org-src-container">
<pre class="src src-yaml">- <span style="color: #BA36A5;">name</span>: add svdrp and svdrp-disc to /etc/services
<span style="color: #BA36A5;">lineinfile</span>:
<span style="color: #BA36A5;">dest</span>: /etc/services
<span style="color: #BA36A5;">state</span>: present
<span style="color: #BA36A5;">line</span>: <span style="color: #008000;">"{{ item }}"</span>
<span style="color: #BA36A5;">with_items</span>:
- <span style="color: #008000;">"svdrp 6419/tcp"</span>
- <span style="color: #008000;">"svdrp-disc 6419/udp"</span>
</pre>
</div>
</div></li>
<li><a id="org3bb6fde"></a>Set up the recording directory for the vdr user<br /><div class="outline-text-5" id="text-8-4-1-3">
<div class="org-src-container">
<pre class="src src-yaml">- <span style="color: #BA36A5;">name</span>: create vdr recdir
<span style="color: #BA36A5;">file</span>:
<span style="color: #BA36A5;">state</span>: directory
<span style="color: #BA36A5;">owner</span>: <span style="color: #008000;">'{{ vdr.user }}'</span>
<span style="color: #BA36A5;">group</span>: <span style="color: #008000;">'{{ vdr.group }}'</span>
<span style="color: #BA36A5;">mode</span>: 0775
<span style="color: #BA36A5;">dest</span>: <span style="color: #008000;">'{{ vdr.recdir }}'</span>
- <span style="color: #BA36A5;">name</span>: set option to use hide-first-recording-level patch
<span style="color: #BA36A5;">blockinfile</span>:
<span style="color: #BA36A5;">dest</span>: /etc/vdr/conf.d/04-vdr-hide-first-recordinglevel.conf
<span style="color: #BA36A5;">create</span>: <span style="color: #D0372D;">true</span>
<span style="color: #BA36A5;">block</span>: |
<span style="color: #008000;">[vdr]</span>
<span style="color: #008000;"> --hide-first-recording-level</span>
<span style="color: #BA36A5;">when</span>:
vdr.hide_first_recording_level
- <span style="color: #BA36A5;">name</span>: create local dir in recdir
<span style="color: #BA36A5;">file</span>:
<span style="color: #BA36A5;">state</span>: directory
<span style="color: #BA36A5;">owner</span>: <span style="color: #008000;">'{{ vdr.user }}'</span>
<span style="color: #BA36A5;">group</span>: <span style="color: #008000;">'{{ vdr.group }}'</span>
<span style="color: #BA36A5;">mode</span>: <span style="color: #008000;">'0775'</span>
<span style="color: #BA36A5;">dest</span>: <span style="color: #008000;">'{{ vdr.recdir }}/local'</span>
<span style="color: #BA36A5;">when</span>:
vdr.hide_first_recording_level
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">TODO: set recdir, user etc. in /etc/vdr/conf.d/</span>
</pre>
</div>
</div></li>
<li><a id="orgfe3497c"></a>Install additional vdr plugins<br /><div class="outline-text-5" id="text-8-4-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 style="color: #BA36A5;">name</span>: apt | install additional vdr plugins
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">name</span>: <span style="color: #008000;">'{{ item }}'</span>
<span style="color: #BA36A5;">state</span>: present
<span style="color: #BA36A5;">install_recommends</span>: <span style="color: #D0372D;">no</span>
<span style="color: #BA36A5;">with_items</span>:
<span style="color: #008000;">'{{ vdr_plugins | default({}) }}'</span>
<span style="color: #BA36A5;">notify</span>: [ <span style="color: #008000;">'Restart VDR'</span> ]
</pre>
</div>
</div></li>
<li><a id="org4b7a9ad"></a>copy vdr configuration files (if they don&rsquo;t exist yet)<br /><div class="outline-text-5" id="text-8-4-1-5">
<div class="org-src-container">
<pre class="src src-yaml">- <span style="color: #BA36A5;">name</span>: ensure vdr is stopped
<span style="color: #BA36A5;">systemd</span>:
<span style="color: #BA36A5;">name</span>: vdr.service
<span style="color: #BA36A5;">state</span>: stopped
<span style="color: #BA36A5;">notify</span>: [ <span style="color: #008000;">'Start VDR'</span> ]
- <span style="color: #BA36A5;">name</span>: <span style="color: #008000;">"vdr configuration | copy remote.conf if it doesn't exist yet"</span>
<span style="color: #BA36A5;">copy</span>:
<span style="color: #BA36A5;">src</span>: files/remote.conf
<span style="color: #BA36A5;">dest</span>: <span style="color: #008000;">'{{ vdr.confdir }}/remote.conf'</span>
<span style="color: #BA36A5;">owner</span>: <span style="color: #008000;">'{{ vdr.user }}'</span>
<span style="color: #BA36A5;">group</span>: <span style="color: #008000;">'{{ vdr.group }}'</span>
<span style="color: #BA36A5;">mode</span>: 0644
<span style="color: #BA36A5;">force</span>: <span style="color: #D0372D;">no</span>
- <span style="color: #BA36A5;">name</span>: <span style="color: #008000;">"vdr configuration | copy keymacros.conf if it doesn't exist yet"</span>
<span style="color: #BA36A5;">copy</span>:
<span style="color: #BA36A5;">src</span>: files/keymacros.conf
<span style="color: #BA36A5;">dest</span>: <span style="color: #008000;">'{{ vdr.confdir }}/keymacros.conf'</span>
<span style="color: #BA36A5;">owner</span>: <span style="color: #008000;">'{{ vdr.user }}'</span>
<span style="color: #BA36A5;">group</span>: <span style="color: #008000;">'{{ vdr.group }}'</span>
<span style="color: #BA36A5;">mode</span>: 0644
<span style="color: #BA36A5;">force</span>: <span style="color: #D0372D;">no</span>
</pre>
</div>
</div></li></ol>
</div>
<div id="outline-container-orgc35e409" class="outline-4">
<h4 id="orgc35e409"><span class="section-number-4">8.4.2</span> templates</h4>
</div>
<div id="outline-container-orge8ae2bf" class="outline-4">
<h4 id="orge8ae2bf"><span class="section-number-4">8.4.3</span> files</h4>
<div class="outline-text-4" id="text-8-4-3">
</div><ol class="org-ol"><li><a id="org0d456e3"></a>remote.conf<br /><div class="outline-text-5" id="text-8-4-3-1">
<div class="org-src-container">
<pre class="src src-conf">LIRC.Up KEY_UP
LIRC.Down KEY_DOWN
LIRC.Menu KEY_MENU
LIRC.Ok KEY_OK
LIRC.Back KEY_ESC
LIRC.Left KEY_LEFT
LIRC.Right KEY_RIGHT
LIRC.Red KEY_RED
LIRC.Green KEY_GREEN
LIRC.Yellow KEY_YELLOW
LIRC.Blue KEY_BLUE
LIRC.0 KEY_0
LIRC.1 KEY_1
LIRC.2 KEY_2
LIRC.3 KEY_3
LIRC.4 KEY_4
LIRC.5 KEY_5
LIRC.6 KEY_6
LIRC.7 KEY_7
LIRC.8 KEY_8
LIRC.9 KEY_9
LIRC.Info KEY_INFO
LIRC.Play KEY_PLAY
LIRC.Pause KEY_PAUSE
LIRC.Play/Pause KEY_PLAYPAUSE
LIRC.Stop KEY_STOP
LIRC.Record KEY_RECORD
LIRC.FastFwd KEY_FASTFORWARD
LIRC.FastRew KEY_REWIND
LIRC.Next KEY_NEXT
LIRC.Prev KEY_BACK
LIRC.Power KEY_POWER2
LIRC.Channel+ KEY_CHANNELUP
LIRC.Channel- KEY_CHANNELDOWN
LIRC.PrevChannel KEY_PREVIOUS
LIRC.Volume+ KEY_VOLUMEUP
LIRC.Volume- KEY_VOLUMEDOWN
LIRC.Mute KEY_MUTE
LIRC.Subtitles KEY_SUBTITLE
LIRC.Schedule KEY_EPG
LIRC.Channels KEY_CHANNEL
LIRC.Commands KEY_FAVORITES
LIRC.Audio KEY_MODE
LIRC.Timers KEY_TIME
LIRC.Recordings KEY_PVR
LIRC.Setup KEY_SETUP
LIRC.User0 KEY_TEXT
LIRC.User1 KEY_PROG1
LIRC.User2 KEY_PROG2
LIRC.User3 KEY_PROG3
LIRC.User4 KEY_PROG4
LIRC.User5 KEY_AUDIO
LIRC.User6 KEY_VIDEO
LIRC.User7 KEY_IMAGES
LIRC.User8 KEY_FN
LIRC.User9 KEY_SCREEN
XKeySym.Up Up
XKeySym.Down Down
XKeySym.Menu Home
XKeySym.Menu Tab
XKeySym.Menu KP_Home
XKeySym.Ok Return
XKeySym.Ok KP_Enter
XKeySym.Back BackSpace
XKeySym.Back KP_Separator
XKeySym.Left Left
XKeySym.Right Right
XKeySym.Up KP_Up
XKeySym.Down KP_Down
XKeySym.Left KP_Left
XKeySym.Right KP_Right
XKeySym.Red F1
XKeySym.Green F2
XKeySym.Yellow F3
XKeySym.Blue F4
XKeySym.0 0
XKeySym.1 1
XKeySym.2 2
XKeySym.3 3
XKeySym.4 4
XKeySym.5 5
XKeySym.6 6
XKeySym.7 7
XKeySym.8 8
XKeySym.9 9
XKeySym.0 KP_0
XKeySym.1 KP_1
XKeySym.2 KP_2
XKeySym.3 KP_3
XKeySym.4 KP_4
XKeySym.5 KP_5
XKeySym.6 KP_6
XKeySym.7 KP_7
XKeySym.8 KP_8
XKeySym.9 KP_9
XKeySym.Info End
XKeySym.Info KP_End
XKeySym.Pause F9
XKeySym.FastFwd F6
XKeySym.FastRew F5
XKeySym.Power Pause
XKeySym.Volume+ F12
XKeySym.Volume- F11
XKeySym.Volume+ KP_Add
XKeySym.Volume- KP_Subtract
XKeySym.Mute F10
XKeySym.User1 F5
XKeySym.User2 F6
XKeySym.User3 F7
XKeySym.User4 F8
XKeySym.User5 Print
XKeySym.User6 Scroll_Lock
XKeySym.User7 Insert
XKeySym.User8 KP_Divide
XKeySym.User9 KP_Multiply
XKeySym.Audio Menu
XKeySym.Channel+ Prior
XKeySym.Channel- Next
XKeySym.Channel+ KP_Prior
XKeySym.Channel- KP_Next
XKeySym.Volume+ XF86AudioRaiseVolume
XKeySym.Volume- XF86AudioLowerVolume
XKeySym.Mute XF86AudioMute
XKeySym.Stop XF86AudioStop
XKeySym.Play/Pause XF86AudioPlay
XKeySym.Prev XF86AudioPrev
XKeySym.Next XF86AudioNext
</pre>
</div>
</div></li>
<li><a id="org30ca33d"></a>keymacros.conf<br /><div class="outline-text-5" id="text-8-4-3-2">
<div class="org-src-container">
<pre class="src src-conf"><span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Remote control key macros for VDR</span>
<span style="color: #8D8D84;">#</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Format:</span>
<span style="color: #8D8D84;">#</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">macrokey key1 key2 key3...</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">macrokey @plugin key1 key2 key3...</span>
<span style="color: #8D8D84;">#</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">See man vdr(5)</span>
Red Recordings
Green Schedule
Yellow Info
Blue Timers
User0 @osdteletext
</pre>
</div>
</div></li></ol>
</div>
</div>
<div id="outline-container-orga069a43" class="outline-3">
<h3 id="orga069a43"><span class="section-number-3">8.5</span> <span class="todo STARTED">STARTED</span> yavdr-network</h3>
<div class="outline-text-3" id="text-8-5">
</div><div id="outline-container-org75053dd" class="outline-4">
<h4 id="org75053dd"><span class="section-number-4">8.5.1</span> default variables</h4>
<div class="outline-text-4" id="text-8-5-1">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #BA36A5;">install_avahi</span>: <span style="color: #D0372D;">true</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org7a595ed" class="outline-4">
<h4 id="org7a595ed"><span class="section-number-4">8.5.2</span> tasks</h4>
<div class="outline-text-4" id="text-8-5-2">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84; font-style: italic;">---</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">this playbook sets up network services for a yaVDR installation</span>
- <span style="color: #BA36A5;">name</span>: apt |install packages for network services
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">name</span>: <span style="color: #008000;">'{{ item }}'</span>
<span style="color: #BA36A5;">state</span>: present
<span style="color: #BA36A5;">install_recommends</span>: <span style="color: #D0372D;">no</span>
<span style="color: #BA36A5;">with_items</span>:
- avahi-daemon
- avahi-utils
- biosdevname
- ethtool
- nfs-common
- vdr-addon-avahi-linker
- wakeonlan
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Does this really work? We need a way to check if an interface supports WOL - Python Skript?</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">- name: check WOL capabilities of network interfaces</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">shell: 'ethtool {{ item }} | grep -Po "(?&lt;=Supports\sWake-on:\s).*$"'</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">register: wol</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">with_items: '{% for interface in ansible_interfaces if interface != 'lo' and interface != 'bond0' %}'</span>
- <span style="color: #BA36A5;">name</span>: restart autofs if running
<span style="color: #BA36A5;">systemd</span>:
<span style="color: #BA36A5;">name</span>: autofs
<span style="color: #BA36A5;">state</span>: restarted
<span style="color: #BA36A5;">enabled</span>: <span style="color: #D0372D;">yes</span>
<span style="color: #BA36A5;">masked</span>: <span style="color: #D0372D;">no</span>
- <span style="color: #BA36A5;">name</span>: ensure autofs is running
<span style="color: #BA36A5;">systemd</span>:
<span style="color: #BA36A5;">name</span>: autofs
<span style="color: #BA36A5;">state</span>: started
<span style="color: #BA36A5;">enabled</span>: <span style="color: #D0372D;">yes</span>
<span style="color: #BA36A5;">masked</span>: <span style="color: #D0372D;">no</span>
- <span style="color: #BA36A5;">name</span>: restart avahi-linker if running
<span style="color: #BA36A5;">systemd</span>:
<span style="color: #BA36A5;">name</span>: avahi-linker
<span style="color: #BA36A5;">state</span>: restarted
<span style="color: #BA36A5;">enabled</span>: <span style="color: #D0372D;">yes</span>
<span style="color: #BA36A5;">masked</span>: <span style="color: #D0372D;">no</span>
- <span style="color: #BA36A5;">name</span>: start avahi-linker
<span style="color: #BA36A5;">systemd</span>:
<span style="color: #BA36A5;">name</span>: avahi-linker
<span style="color: #BA36A5;">state</span>: started
<span style="color: #BA36A5;">enabled</span>: <span style="color: #D0372D;">yes</span>
<span style="color: #BA36A5;">masked</span>: <span style="color: #D0372D;">no</span>
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgfbf8c34" class="outline-3">
<h3 id="orgfbf8c34"><span class="section-number-3">8.6</span> nfs-server</h3>
<div class="outline-text-3" id="text-8-6">
</div><div id="outline-container-orgeda33ba" class="outline-4">
<h4 id="orgeda33ba"><span class="section-number-4">8.6.1</span> <span class="todo TODO">TODO</span> avahi-services für NFS beim Stoppen des nfs-kernel-servers depublizieren, beim Start wieder announcen</h4>
</div>
<div id="outline-container-org61e31f2" class="outline-4">
<h4 id="org61e31f2"><span class="section-number-4">8.6.2</span> tasks</h4>
<div class="outline-text-4" id="text-8-6-2">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84; font-style: italic;">---</span>
- <span style="color: #BA36A5;">name</span>: install nfs server packages
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">name</span>: <span style="color: #008000;">'{{ item }}'</span>
<span style="color: #BA36A5;">state</span>: present
<span style="color: #BA36A5;">install_recommends</span>: <span style="color: #D0372D;">no</span>
<span style="color: #BA36A5;">with_items</span>:
- nfs-kernel-server
- nfs-common
- <span style="color: #BA36A5;">name</span>: create /etc/exports
<span style="color: #BA36A5;">template</span>:
<span style="color: #BA36A5;">src</span>: templates/nfs-exports.j2
<span style="color: #BA36A5;">dest</span>: /etc/exports
<span style="color: #BA36A5;">notify</span>: [ <span style="color: #008000;">'Restart NFS Kernel Server'</span> ]
- <span style="color: #BA36A5;">name</span>: populate /etc/avahi/services
<span style="color: #BA36A5;">template</span>:
<span style="color: #BA36A5;">src</span>: templates/avahi/service.j2
<span style="color: #BA36A5;">dest</span>: <span style="color: #008000;">'/etc/avahi/services/yavdr-{{ item.key }}.service'</span>
<span style="color: #BA36A5;">with_dict</span>: <span style="color: #008000;">'{{ media_dirs }}'</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-orgf686991" class="outline-4">
<h4 id="orgf686991"><span class="section-number-4">8.6.3</span> templates</h4>
<div class="outline-text-4" id="text-8-6-3">
</div><ol class="org-ol"><li><a id="org2218ffb"></a>/etc/exports<br /><div class="outline-text-5" id="text-8-6-3-1">
<div class="org-src-container">
<pre class="src src-conf"><span style="color: #BA36A5;">/srv *(rw,fsid</span>=0,sync,no_subtree_check,all_squash,anongid={{ vdr.gid }},anonuid={{ vdr.uid }})
{% for name, path in media_dirs.iteritems() %}
<span style="color: #BA36A5;">{{ path }} *(rw,fsid</span>={{ loop.index }},sync,no_subtree_check,all_squash,anongid={{ vdr.gid }},anonuid={{ vdr.uid }}{{ <span style="color: #008000;">',insecure'</span> if nfs.insecure else <span style="color: #008000;">''</span> }})
{% endfor %}
</pre>
</div>
</div></li>
<li><a id="orgbc18c20"></a>avahi services<br /><div class="outline-text-5" id="text-8-6-3-2">
<div class="org-src-container">
<pre class="src src-xml">&lt;?<span style="color: #0000FF;">xml</span> <span style="color: #BA36A5;">version</span>=<span style="color: #008000;">"</span><span style="color: #008000;">1.0</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">standalone</span>=<span style="color: #008000;">'</span><span style="color: #008000;">no</span><span style="color: #008000;">'</span>?&gt;
&lt;!<span style="color: #0000FF;">DOCTYPE</span> service-group <span style="color: #0000FF;">SYSTEM</span> <span style="color: #036A07;">"</span><span style="color: #036A07;">avahi-service.dtd</span><span style="color: #036A07;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">service-group</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">name</span> <span style="color: #BA36A5;">replace-wildcards</span>=<span style="color: #008000;">"</span><span style="color: #008000;">yes</span><span style="color: #008000;">"</span>&gt;{{ item.key|capitalize }} on %h&lt;/<span style="color: #000088; background-color: #DEDEDE;">name</span>&gt; ## Name
&lt;<span style="color: #000088; background-color: #DEDEDE;">service</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">type</span>&gt;_nfs._tcp&lt;/<span style="color: #000088; background-color: #DEDEDE;">type</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">port</span>&gt;2049&lt;/<span style="color: #000088; background-color: #DEDEDE;">port</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">txt-record</span>&gt;path={{ item.value }}&lt;/<span style="color: #000088; background-color: #DEDEDE;">txt-record</span>&gt; ## path to shared Folder
&lt;<span style="color: #000088; background-color: #DEDEDE;">txt-record</span>&gt;subtype={{ 'vdr' if item.key == 'recordings' else item.key }}&lt;/<span style="color: #000088; background-color: #DEDEDE;">txt-record</span>&gt; ## subtype
&lt;/<span style="color: #000088; background-color: #DEDEDE;">service</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">service-group</span>&gt;
</pre>
</div>
</div></li></ol>
</div>
</div>
<div id="outline-container-orgf6d68de" class="outline-3">
<h3 id="orgf6d68de"><span class="section-number-3">8.7</span> <span class="todo TODO">TODO</span> yavdr-remote</h3>
<div class="outline-text-3" id="text-8-7">
</div><div id="outline-container-orgaed55b9" class="outline-4">
<h4 id="orgaed55b9"><span class="section-number-4">8.7.1</span> default variables</h4>
</div>
<div id="outline-container-orgac92f3f" class="outline-4">
<h4 id="orgac92f3f"><span class="section-number-4">8.7.2</span> tasks</h4>
<div class="outline-text-4" id="text-8-7-2">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84; font-style: italic;">---</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">This role is used to set up the yaVDR remote control configuration.</span>
- <span style="color: #BA36A5;">name</span>: apt | install yavdr-remote
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">name</span>: yavdr-remote
<span style="color: #BA36A5;">state</span>: present
- <span style="color: #BA36A5;">name</span>: apt | install eventlircd
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">name</span>: eventlircd
<span style="color: #BA36A5;">state</span>: present
<span style="color: #BA36A5;">when</span>:
install_eventlircd is defined and install_eventlircd
- <span style="color: #BA36A5;">name</span>: apt | install lirc
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">name</span>: lircd
<span style="color: #BA36A5;">state</span>: present
<span style="color: #BA36A5;">when</span>:
- install_lircd is defined and install_lircd
- <span style="color: #BA36A5;">name</span>: stop, mask and disable lircd.socket and lircd.service <span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">(the default lirc configuration conflicts with eventlircd)</span>
<span style="color: #BA36A5;">systemd</span>:
<span style="color: #BA36A5;">name</span>: <span style="color: #008000;">'{{ item }}'</span>
<span style="color: #BA36A5;">enabled</span>: <span style="color: #D0372D;">no</span>
<span style="color: #BA36A5;">state</span>: stopped
<span style="color: #BA36A5;">masked</span>: <span style="color: #D0372D;">yes</span>
<span style="color: #BA36A5;">with_items</span>:
- lircd.service
- lircd.socket
<span style="color: #BA36A5;">ignore_errors</span>: <span style="color: #D0372D;">yes</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">TODO: upload lircd2uinput package to PPA</span>
<span style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">- name: install lircd2uinput</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">tag: install</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">apt:</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">name: lircd2uinput</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">state: present</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">when:</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">install_eventlircd is defined and install_eventlircd</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org34fd078" class="outline-4">
<h4 id="org34fd078"><span class="section-number-4">8.7.3</span> templates</h4>
</div>
<div id="outline-container-org16b771d" class="outline-4">
<h4 id="org16b771d"><span class="section-number-4">8.7.4</span> files</h4>
</div>
</div>
<div id="outline-container-org74ecc16" class="outline-3">
<h3 id="org74ecc16"><span class="section-number-3">8.8</span> pulseaudio</h3>
<div class="outline-text-3" id="text-8-8">
</div><div id="outline-container-orgc2270b4" class="outline-4">
<h4 id="orgc2270b4"><span class="section-number-4">8.8.1</span> tasks</h4>
<div class="outline-text-4" id="text-8-8-1">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84; font-style: italic;">---</span>
- <span style="color: #BA36A5;">name</span>: apt | install pulseaudio and pavucontrol
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">name</span>: <span style="color: #008000;">'{{ item }}'</span>
<span style="color: #BA36A5;">state</span>: present
<span style="color: #BA36A5;">install_recommends</span>: <span style="color: #D0372D;">no</span>
<span style="color: #BA36A5;">with_items</span>:
- pulseaudio
- pavucontrol
- <span style="color: #BA36A5;">name</span>: create /etc/asound.conf with pulseaudio as default device
<span style="color: #BA36A5;">template</span>:
<span style="color: #BA36A5;">src</span>: templates/alsa/asound.conf.j2
<span style="color: #BA36A5;">dest</span>: /etc/asound.conf
</pre>
</div>
</div>
</div>
<div id="outline-container-orgae41b07" class="outline-4">
<h4 id="orgae41b07"><span class="section-number-4">8.8.2</span> templates</h4>
<div class="outline-text-4" id="text-8-8-2">
<div class="org-src-container">
<pre class="src src-conf"><span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Use PulseAudio by default</span>
<span style="color: #6434A3;">pcm.!default</span> {
type pulse
fallback <span style="color: #008000;">"sysdefault"</span>
<span style="color: #6434A3;">hint</span> {
show on
description <span style="color: #008000;">"Default ALSA Output (currently PulseAudio Sound Server)"</span>
}
}
<span style="color: #6434A3;">ctl.!default</span> {
type pulse
fallback <span style="color: #008000;">"sysdefault"</span>
}
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgdce9b1c" class="outline-3">
<h3 id="orgdce9b1c"><span class="section-number-3">8.9</span> yavdr-xorg</h3>
<div class="outline-text-3" id="text-8-9">
</div><div id="outline-container-org6cbd648" class="outline-4">
<h4 id="org6cbd648"><span class="section-number-4">8.9.1</span> <span class="todo TODO">TODO</span> automatic X-server configuration</h4>
<div class="outline-text-4" id="text-8-9-1">
<ul class="org-ul">
<li class="on"><code>[X]</code> detect connected display</li>
<li class="on"><code>[X]</code> read EDID from displays</li>
<li class="off"><code>[&#xa0;]</code> create a xorg.conf for nvidia/intel/amd gpus</li>
</ul>
</div>
<ol class="org-ol"><li><a id="org760464c"></a><span class="todo HOLD">HOLD</span> Nvidia-GPUs:read EDID:<br /><div class="outline-text-5" id="text-8-9-1-1">
<div class="org-src-container">
<pre class="src src-shell">$ nvidia-xconfig --extract-edids-from-file=/var/log/Xorg.0.log --extract-edids-output-file=/tmp/edid.bin.0
Found 2 EDIDs<span style="color: #0000FF;"> in</span> <span style="color: #008000;">"/var/log/Xorg.0.log"</span>.
Wrote EDID for <span style="color: #008000;">"DELL 2407WFP (CRT-1)"</span> to <span style="color: #008000;">"/tmp/edid.bin.0.0"</span> (128 bytes)<span style="color: #006FE0;">.</span>
Wrote EDID for <span style="color: #008000;">"ADI A715 (DFP-1)"</span> to <span style="color: #008000;">"/tmp/edid.bin.0.1"</span> (128 bytes)<span style="color: #006FE0;">.</span>
$ xrandr -q
Screen 0: minimum 8 x 8, current 3200 x 1200, maximum 8192 x 8192
DVI-I-0 disconnected primary (normal left inverted right x axis y axis)
VGA-0 connected 1920x1200+1280+0 (normal left inverted right x axis y axis) 519mm x 324mm
1920x1200 59.95*+
1680x1050 59.95
1280x1024 75.02 60.02
1152x864 75.00
1024x768 75.03 60.00
800x600 75.00 60.32
640x480 75.00 59.94
DVI-I-1 disconnected (normal left inverted right x axis y axis)
HDMI-0 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 338mm x 270mm
1280x1024 60.02*+
1024x768 60.00
800x600 60.32
640x480 59.95 59.94
$ parse-edid &lt; /tmp/edid.bin.0.1
Checksum Correct
Section <span style="color: #008000;">"Monitor"</span>
Identifier <span style="color: #008000;">"ADI A715"</span>
ModelName <span style="color: #008000;">"ADI A715"</span>
VendorName <span style="color: #008000;">"ADI"</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Monitor Manufactured week 15 of 2003</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">EDID version 1.3</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Digital Display</span>
DisplaySize 330 270
Gamma 2.20
Option <span style="color: #008000;">"DPMS"</span> <span style="color: #008000;">"true"</span>
<span style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">Not giving standard mode: 640x480, 60Hz</span>
<span style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">Not giving standard mode: 800x600, 60Hz</span>
<span style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">Not giving standard mode: 1024x768, 60Hz</span>
<span style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">Not giving standard mode: 1280x1024, 60Hz</span>
Modeline <span style="color: #008000;">"Mode 0"</span> 108.00 1280 1328 1440 1688 1024 1025 1028 1066 +hsync +vsync
Modeline <span style="color: #008000;">"Mode 1"</span> 40.00 800 840 968 1056 600 601 605 628 +hsync +vsync
EndSection
$ parse-edid &lt; /tmp/edid.bin.0.0
Checksum Correct
Section <span style="color: #008000;">"Monitor"</span>
Identifier <span style="color: #008000;">"DELL 2407WFP"</span>
ModelName <span style="color: #008000;">"DELL 2407WFP"</span>
VendorName <span style="color: #008000;">"DEL"</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Monitor Manufactured week 24 of 2007</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">EDID version 1.3</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Analog Display</span>
Option <span style="color: #008000;">"SyncOnGreen"</span> <span style="color: #008000;">"true"</span>
DisplaySize 520 330
Gamma 2.20
Option <span style="color: #008000;">"DPMS"</span> <span style="color: #008000;">"true"</span>
Horizsync 30-83
VertRefresh 56-76
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Maximum pixel clock is 170MHz</span>
<span style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">Not giving standard mode: 1280x1024, 60Hz</span>
<span style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">Not giving standard mode: 1600x1200, 60Hz</span>
<span style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">Not giving standard mode: 1152x864, 75Hz</span>
<span style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">Not giving standard mode: 1680x1050, 60Hz</span>
Modeline <span style="color: #008000;">"Mode 0"</span> 154.00 1920 1968 2000 2080 1200 1203 1209 1235 +hsync -vsync
EndSection
</pre>
</div>
</div></li>
<li><a id="orgfb8ddd7"></a><span class="done DONE">DONE</span> Start X-server with debug-output<br /><div class="outline-text-5" id="text-8-9-1-2">
<div class="org-src-container">
<pre class="src src-conf"><span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">/etc/systemd/system/x-debug@.service</span>
[<span style="color: #6434A3;">Unit</span>]
<span style="color: #BA36A5;">Description</span>=X with verbose logging on %I
<span style="color: #BA36A5;">Wants</span>=graphical.target
<span style="color: #BA36A5;">Before</span>=graphical.target
<span style="color: #BA36A5;">Conflicts</span>=xlogin@vdr.service x@vt7.service
[<span style="color: #6434A3;">Service</span>]
<span style="color: #BA36A5;">Type</span>=forking
<span style="color: #BA36A5;">ExecStart</span>=/usr/bin/x-daemon -logverbose 6 -noreset %I -config xdiscover.conf
</pre>
</div>
<div class="org-src-container">
<pre class="src src-conf"><span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">/etc/X11/xdiscover.conf</span>
Section <span style="color: #008000;">"Device"</span>
Identifier <span style="color: #008000;">"nvidia"</span>
Driver <span style="color: #008000;">"nvidia"</span>
Option <span style="color: #008000;">"NoLogo"</span> <span style="color: #008000;">"true"</span>
Option <span style="color: #008000;">"DynamicTwinView"</span> <span style="color: #008000;">"true"</span>
Option <span style="color: #008000;">"NoFlip"</span> <span style="color: #008000;">"false"</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Option "FlatPanelProperties" "Scaling = Native"</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Option "ModeValidation" "NoVesaModes, NoXServerModes"</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Option "ModeDebug" "true"</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Option "HWCursor" "false"</span>
EndSection
Section <span style="color: #008000;">"Screen"</span>
Identifier <span style="color: #008000;">"screen"</span>
Device <span style="color: #008000;">"nvidia"</span>
EndSection
Section <span style="color: #008000;">"Extensions"</span>
Option <span style="color: #008000;">"Composite"</span> <span style="color: #008000;">"false"</span>
EndSection
</pre>
</div>
</div></li>
<li><a id="orgaecb3d7"></a><span class="done DONE">DONE</span> python-script for parsing xrandr &#x2013;verbose output<br /><ol class="org-ol"><li><a id="orga80959d"></a>Example output<br /><div class="outline-text-6" id="text-8-9-1-3-1">
<div class="org-src-container">
<pre class="src src-shell">$ xrandr --verbose
Screen 0: minimum 8 x 8, current 1280 x 720, maximum 8192 x 8192
VGA-0 disconnected primary (normal left inverted right x axis y axis)
Identifier: 0x1c4
Timestamp: 18571
Subpixel: unknown
Clones:
CRTCs: 0 1
Transform: 1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.000000 0.000000 1.000000
filter:
BorderDimensions: 4
supported: 4
Border: 0 0 0 0
range: (0, 65535)
SignalFormat: VGA
supported: VGA
ConnectorType: VGA
ConnectorNumber: 0
_ConnectorLocation: 1
HDMI-0 connected 1280x720+0+0 (0x1cb) normal (normal left inverted right x axis y axis) 885mm x 498mm
Identifier: 0x1c5
Timestamp: 18571
Subpixel: unknown
Gamma: 1.0:1.0:1.0
Brightness: 1.0
Clones:
CRTC: 0
CRTCs: 0 1fg
Transform: 1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.000000 0.000000 1.000000
filter:
EDID:
00ffffffffffff004c2d800100000000
2c0e01038059328c0ae2bda15b4a9824
15474a20000001010101010101010101
010101010101011d007251d01e206e28
550075f23100001e011d00bc52d01e20
b828554075f23100001e000000fd0032
3d0f2e08000a202020202020000000fc
0053414d53554e470a20202020200181
02031971468413051403122309070783
01000065030c001000011d8018711c16
20582c250075f23100009e011d80d072
1c1620102c258075f23100009e8c0ad0
8a20e02d10103e960075f2310000188c
0ad090204031200c40550075f2310000
18000000000000000000000000000000
000000000000000000000000000000ca
BorderDimensions: 4
supported: 4
Border: 39 24 41 21
range: (0, 65535)
SignalFormat: TMDS
supported: TMDS
ConnectorType: HDMI
ConnectorNumber: 1
_ConnectorLocation: 2
1280x720 (0x1c6) 74.2MHz +HSync +VSync +preferred
h: width 1280 start 1390 end 1430 total 1650 skew 0 clock 45.0KHz
v: height 720 start 725 end 730 total 750 clock 60.0Hz
1920x1080 (0x1c7) 74.2MHz +HSync +VSync Interlace
h: width 1920 start 2008 e#nd 2052 total 2200 skew 0 clock 33.8KHz
v: height 1080 start 1084 end 1094 total 1124 clock 60.1Hz
1920x1080 (0x1c8) 74.2MHz +HSync +VSync Interlace
h: width 1920 start 2008 end 2052 total 2200 skew 0 clock 33.7KHz
v: height 1080 start 1084 end 1094 total 1124 clock 60.0Hz
1920x1080 (0x1c9) 74.2MHz +HSync +VSync Interlace
h: width 1920 start 2448 end 2492 total 2640 skew 0 clock 28.1KHz
v: height 1080 start 1084 end 1094 total 1124 clock 50.0Hz
1280x720 (0x1ca) 74.2MHz +HSync +VSync
h: width 1280 start 1390 end 1430 total 1650 skew 0 clock 45.0KHz
v: height 720 start 725 end 730 total 750 clock 59.9Hz
1280x720 (0x1cb) 74.2MHz +HSync +VSync *current
h: width 1280 start 1720 end 1760 total 1980 skew 0 clock 37.5KHz
v: height 720 start 725 end 730 total 750 clock 50.0Hz
800x600 (0x1cc) 40.0MHz +HSync +VSync
h: width 800 start 840 end 968 total 1056 skew 0 clock 37.9KHz
v: height 600 start 601 end 605 total 628 clock 60.3Hz
800x600 (0x1cd) 36.0MHz +HSync +VSync
h: width 800 start 824 end 896 total 1024 skew 0 clock 35.2KHz
v: height 600 start 601 end 603 total 625 clock 56.2Hz
720x576 (0x1ce) 27.0MHz -HSync -VSync
h: width 720 start 732 end 796 total 864 skew 0 clock 31.2KHz
v: height 576 start 581 end 586 total 625 clock 50.0Hz
720x480 (0x1cf) 27.0MHz -HSync -VSync
h: width 720 start 736 end 798 total 858 skew 0 clock 31.5KHz
v: height 480 start 489 end 495 total 525 clock 59.9Hz
640x480 (0x1d0) 25.2MHz -HSync -VSync
h: width 640 start 656 end 752 total 800 skew 0 clock 31.5KHz
v: height 480 start 490 end 492 total 525 clock 59.9Hz
320x240 (0x1d1) 12.6MHz -HSync -VSync DoubleScan
h: width 320 start 328 end 376 total 400 skew 0 clock 31.5KHz
v: height 240 start 245 end 246 total 262 clock 60.1Hz
</pre>
</div>
<div class="org-src-container">
<pre class="src src-shell">$ xrandr --verbose
Screen 0: minimum 8 x 8, current 3200 x 1200, maximum 8192 x 8192
DVI-I-0 disconnected primary (normal left inverted right x axis y axis)
Identifier: 0x1c4
Timestamp: 641679
Subpixel: unknown
Clones:
CRTCs: 0 1
Transform: 1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.000000 0.000000 1.000000
filter:
BorderDimensions: 4
supported: 4
Border: 0 0 0 0
range: (0, 65535)
SignalFormat: VGA
supported: VGA
ConnectorType: DVI-I
ConnectorNumber: 0
_ConnectorLocation: 0
VGA-0 connected 1920x1200+1280+0 (0x1c6) normal (normal left inverted right x axis y axis) 519mm x 324mm
Identifier: 0x1c5
Timestamp: 641679
Subpixel: unknown
Gamma: 1.0:1.0:1.0
Brightness: 1.0
Clones:
CRTC: 1
CRTCs: 0 1
Transform: 1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.000000 0.000000 1.000000
filter:
EDID:
00ffffffffffff0010ac16a0534b4431
181101030e342178eeee91a3544c9926
0f5054a54b008180a940714fb3000101
010101010101283c80a070b023403020
360007442100001a000000ff00555935
343537364531444b5320000000fc0044
454c4c20323430375746500a000000fd
00384c1e5311000a20202020202000f1
BorderDimensions: 4
supported: 4
Border: 0 0 0 0
range: (0, 65535)
SignalFormat: VGA
supported: VGA
ConnectorType: VGA
ConnectorNumber: 2
_ConnectorLocation: 2
1920x1200 (0x1c6) 154.000MHz +HSync -VSync *current +preferred
h: width 1920 start 1968 end 2000 total 2080 skew 0 clock 74.04KHz
v: height 1200 start 1203 end 1209 total 1235 clock 59.95Hz
1680x1050 (0x1c7) 146.250MHz -HSync +VSync
h: width 1680 start 1784 end 1960 total 2240 skew 0 clock 65.29KHz
v: height 1050 start 1053 end 1059 total 1089 clock 59.95Hz
1280x1024 (0x1c8) 135.000MHz +HSync +VSync
h: width 1280 start 1296 end 1440 total 1688 skew 0 clock 79.98KHz
v: height 1024 start 1025 end 1028 total 1066 clock 75.02Hz
1280x1024 (0x1c9) 108.000MHz +HSync +VSync
h: width 1280 start 1328 end 1440 total 1688 skew 0 clock 63.98KHz
v: height 1024 start 1025 end 1028 total 1066 clock 60.02Hz
1152x864 (0x1ca) 108.000MHz +HSync +VSync
h: width 1152 start 1216 end 1344 total 1600 skew 0 clock 67.50KHz
v: height 864 start 865 end 868 total 900 clock 75.00Hz
1024x768 (0x1cb) 78.750MHz +HSync +VSync
h: width 1024 start 1040 end 1136 total 1312 skew 0 clock 60.02KHz
v: height 768 start 769 end 772 total 800 clock 75.03Hz
1024x768 (0x1cc) 65.000MHz -HSync -VSync
h: width 1024 start 1048 end 1184 total 1344 skew 0 clock 48.36KHz
v: height 768 start 771 end 777 total 806 clock 60.00Hz
800x600 (0x1cd) 49.500MHz +HSync +VSync
h: width 800 start 816 end 896 total 1056 skew 0 clock 46.88KHz
v: height 600 start 601 end 604 total 625 clock 75.00Hz
800x600 (0x1ce) 40.000MHz +HSync +VSync
h: width 800 start 840 end 968 total 1056 skew 0 clock 37.88KHz
v: height 600 start 601 end 605 total 628 clock 60.32Hz
640x480 (0x1cf) 31.500MHz -HSync -VSync
h: width 640 start 656 end 720 total 840 skew 0 clock 37.50KHz
v: height 480 start 481 end 484 total 500 clock 75.00Hz
640x480 (0x1d0) 25.175MHz -HSync -VSync
h: width 640 start 656 end 752 total 800 skew 0 clock 31.47KHz
v: height 480 start 490 end 492 total 525 clock 59.94Hz
DVI-I-1 disconnected (normal left inverted right x axis y axis)
Identifier: 0x1d1
Timestamp: 641679
Subpixel: unknown
Clones:
CRTCs: 0 1
Transform: 1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.000000 0.000000 1.000000
filter:
BorderDimensions: 4
supported: 4
Border: 0 0 0 0
range: (0, 65535)
SignalFormat: TMDS
supported: TMDS
ConnectorType: DVI-I
ConnectorNumber: 0
_ConnectorLocation: 0
HDMI-0 connected 1280x1024+0+0 (0x1c9) normal (normal left inverted right x axis y axis) 338mm x 270mm
Identifier: 0x1d2
Timestamp: 641679
Subpixel: unknown
Gamma: 1.0:1.0:1.0
Brightness: 1.0
Clones:
CRTC: 0
CRTCs: 0 1
Transform: 1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.000000 0.000000 1.000000
filter:
EDID:
00ffffffffffff0004895d2320090000
0f0d0103e0211b782ac5c6a3574a9c23
124f5421080031404540614081800101
010101010101302a009851002a403070
1300520e1100001ea00f200031581c20
28801400520e1100001e000000ff0033
31355430324530323333360a000000fc
0041444920413731350a20202020002b
BorderDimensions: 4
supported: 4
Border: 0 0 0 0
range: (0, 65535)
SignalFormat: TMDS
supported: TMDS
ConnectorType: HDMI
ConnectorNumber: 1
_ConnectorLocation: 1
1280x1024 (0x1c9) 108.000MHz +HSync +VSync *current +preferred
h: width 1280 start 1328 end 1440 total 1688 skew 0 clock 63.98KHz
v: height 1024 start 1025 end 1028 total 1066 clock 60.02Hz
1024x768 (0x1cc) 65.000MHz -HSync -VSync
h: width 1024 start 1048 end 1184 total 1344 skew 0 clock 48.36KHz
v: height 768 start 771 end 777 total 806 clock 60.00Hz
800x600 (0x1ce) 40.000MHz +HSync +VSync
h: width 800 start 840 end 968 total 1056 skew 0 clock 37.88KHz
v: height 600 start 601 end 605 total 628 clock 60.32Hz
640x480 (0x1d3) 25.180MHz -HSync -VSync
h: width 640 start 648 end 744 total 800 skew 0 clock 31.48KHz
v: height 480 start 482 end 484 total 525 clock 59.95Hz
640x480 (0x1d0) 25.175MHz -HSync -VSync
h: width 640 start 656 end 752 total 800 skew 0 clock 31.47KHz
v: height 480 start 490 end 492 total 525 clock 59.94Hz
</pre>
</div>
</div></li>
<li><a id="orgec858e6"></a>parse hex-strings<br /><div class="outline-text-6" id="text-8-9-1-3-2">
<div class="org-src-container">
<pre class="src src-python">&gt;&gt;&gt; <span style="color: #0000FF;">import</span> binascii
&gt;&gt;&gt; <span style="color: #BA36A5;">s</span> = <span style="color: #008000;">"deadbeef"</span>
&gt;&gt;&gt; binascii.a2b_hex(s)
b<span style="color: #008000;">'\xde\xad\xbe\xef'</span>
</pre>
</div>
</div></li></ol></li></ol>
</div>
<div id="outline-container-org6af89db" class="outline-4">
<h4 id="org6af89db"><span class="section-number-4">8.9.2</span> default variables</h4>
</div>
<div id="outline-container-orgd518a9f" class="outline-4">
<h4 id="orgd518a9f"><span class="section-number-4">8.9.3</span> tasks</h4>
<div class="outline-text-4" id="text-8-9-3">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84; font-style: italic;">---</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">file: roles/yavdr-xorg/tasks/main.yml</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">TODO: use hooks or requirements instead</span>
- <span style="color: #BA36A5;">name</span>: Stop VDR
<span style="color: #BA36A5;">systemd</span>:
<span style="color: #BA36A5;">name</span>: vdr.service
<span style="color: #BA36A5;">state</span>: stopped
<span style="color: #BA36A5;">enabled</span>: <span style="color: #D0372D;">yes</span>
<span style="color: #BA36A5;">notify</span>: [<span style="color: #008000;">'Start VDR'</span>]
- <span style="color: #BA36A5;">name</span>: create directory /etc/systemd/system/vdr.service.d/
<span style="color: #BA36A5;">file</span>:
<span style="color: #BA36A5;">dest</span>: /etc/systemd/system/vdr.service.d/
<span style="color: #BA36A5;">state</span>: directory
- <span style="color: #BA36A5;">name</span>: add environment file for vdr.service
<span style="color: #BA36A5;">template</span>:
<span style="color: #BA36A5;">src</span>: templates/systemd/vdr-environ.j2
<span style="color: #BA36A5;">dest</span>: /etc/systemd/system/vdr.service.d/load-environ.conf
- <span style="color: #BA36A5;">name</span>: Stop xlogin
<span style="color: #BA36A5;">systemd</span>:
<span style="color: #BA36A5;">name</span>: xlogin@vdr.service
<span style="color: #BA36A5;">state</span>: stopped
<span style="color: #BA36A5;">enabled</span>: <span style="color: #D0372D;">yes</span>
- <span style="color: #BA36A5;">name</span>: Stop x
<span style="color: #BA36A5;">systemd</span>:
<span style="color: #BA36A5;">name</span>: x@vt7.service
<span style="color: #BA36A5;">state</span>: stopped
- <span style="color: #BA36A5;">name</span>: install packages for xorg
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">name</span>: <span style="color: #008000;">'{{ item }}'</span>
<span style="color: #BA36A5;">state</span>: present
<span style="color: #BA36A5;">with_items</span>:
- xorg
- xserver-xorg-video-all
- xserver-xorg-input-all
- xlogin
- xterm
- openbox
- tmux
- kiosk-browser
- read-edid
<span style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">- yavdr-xorg</span>
- <span style="color: #BA36A5;">name</span>: <span style="color: #008000;">"stop x@vt7.service"</span>
<span style="color: #BA36A5;">systemd</span>:
<span style="color: #BA36A5;">name</span>: <span style="color: #008000;">"x@vt7.service"</span>
<span style="color: #BA36A5;">state</span>: stopped
- <span style="color: #BA36A5;">name</span>: <span style="color: #008000;">"expand template for x-verbose@.service"</span>
<span style="color: #BA36A5;">template</span>:
<span style="color: #BA36A5;">src</span>: <span style="color: #008000;">"templates/systemd/system/x-verbose@.service.j2"</span>
<span style="color: #BA36A5;">dest</span>: <span style="color: #008000;">"/etc/systemd/system/x-verbose@.service"</span>
- <span style="color: #BA36A5;">name</span>: <span style="color: #008000;">"expand template for xorg-verbose.conf"</span>
<span style="color: #BA36A5;">template</span>:
<span style="color: #BA36A5;">src</span>: <span style="color: #008000;">"templates/xorg-verbose.conf.j2"</span>
<span style="color: #BA36A5;">dest</span>: <span style="color: #008000;">"/etc/X11/xorg-verbose.conf"</span>
- <span style="color: #BA36A5;">name</span>: <span style="color: #008000;">"start x-verbose@.service"</span>
<span style="color: #BA36A5;">systemd</span>:
<span style="color: #BA36A5;">name</span>: <span style="color: #008000;">"x-verbose@vt7.service"</span>
<span style="color: #BA36A5;">state</span>: started
<span style="color: #BA36A5;">enabled</span>: <span style="color: #D0372D;">false</span>
<span style="color: #BA36A5;">masked</span>: <span style="color: #D0372D;">false</span>
<span style="color: #BA36A5;">daemon_reload</span>: <span style="color: #D0372D;">true</span>
- <span style="color: #BA36A5;">name</span>: <span style="color: #008000;">"wait a little bit, so X has some time to start up (needed?)"</span>
<span style="color: #BA36A5;">wait_for</span>:
<span style="color: #BA36A5;">timeout</span>: 3
- <span style="color: #BA36A5;">name</span>: <span style="color: #008000;">"detect xorg configuration"</span>
<span style="color: #BA36A5;">action</span>: xrandr_facts
- <span style="color: #BA36A5;">debug</span>:
<span style="color: #BA36A5;">var</span>: xorg.primary
- <span style="color: #BA36A5;">debug</span>:
<span style="color: #BA36A5;">var</span>: xorg.secondary
<span style="color: #BA36A5;">when</span>: xorg.secondary is defined
- <span style="color: #BA36A5;">name</span>: <span style="color: #008000;">"stop x-verbose@vt7.service"</span>
<span style="color: #BA36A5;">systemd</span>:
<span style="color: #BA36A5;">name</span>: <span style="color: #008000;">"x-verbose@vt7.service"</span>
<span style="color: #BA36A5;">state</span>: stopped
<span style="color: #BA36A5;">enabled</span>: <span style="color: #D0372D;">false</span>
<span style="color: #BA36A5;">masked</span>: <span style="color: #D0372D;">true</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">TODO: expand template for xorg.conf (or snippets)</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">with respect for the available graphics card driver</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">nvidia, noveau, intel, radeon</span>
- <span style="color: #BA36A5;">name</span>: create xorg.conf (for nvidia driver)
<span style="color: #BA36A5;">template</span>:
<span style="color: #BA36A5;">src</span>: templates/xorg.conf.j2
<span style="color: #BA36A5;">dest</span>: /etc/X11/xorg.conf
<span style="color: #BA36A5;">backup</span>: <span style="color: #D0372D;">yes</span>
- <span style="color: #BA36A5;">name</span>: create folders for user session
<span style="color: #BA36A5;">file</span>:
<span style="color: #BA36A5;">state</span>: directory
<span style="color: #BA36A5;">dest</span>: <span style="color: #008000;">'{{ item }}'</span>
<span style="color: #BA36A5;">mode</span>: <span style="color: #008000;">'0775'</span>
<span style="color: #BA36A5;">owner</span>: <span style="color: #008000;">'{{ vdr.user }}'</span>
<span style="color: #BA36A5;">group</span>: <span style="color: #008000;">'{{ vdr.group }}'</span>
<span style="color: #BA36A5;">with_items</span>:
- <span style="color: #008000;">'{{ vdr.home }}/.config/systemd/user'</span>
- <span style="color: #008000;">'{{ vdr.home }}/.config/openbox/'</span>
- <span style="color: #BA36A5;">name</span>: create folder for customizations of vdr.service
<span style="color: #BA36A5;">file</span>:
<span style="color: #BA36A5;">state</span>: directory
<span style="color: #BA36A5;">dest</span>: /etc/systemd/system/vdr.service.d
<span style="color: #BA36A5;">mode</span>: <span style="color: #008000;">'0775'</span>
- <span style="color: #BA36A5;">name</span>: add dependency to X-server for vdr.service using a drop-in
<span style="color: #BA36A5;">template</span>:
<span style="color: #BA36A5;">src</span>: templates/vdr-xorg.conf
<span style="color: #BA36A5;">dest</span>: /etc/systemd/system/vdr.service.d/
- <span style="color: #BA36A5;">name</span>: create folders for user configuration files
<span style="color: #BA36A5;">file</span>:
<span style="color: #BA36A5;">state</span>: directory
<span style="color: #BA36A5;">dest</span>: <span style="color: #008000;">'{{ item }}'</span>
<span style="color: #BA36A5;">mode</span>: <span style="color: #008000;">'0775'</span>
<span style="color: #BA36A5;">owner</span>: <span style="color: #008000;">'{{ vdr.user }}'</span>
<span style="color: #BA36A5;">group</span>: <span style="color: #008000;">'{{ vdr.group }}'</span>
<span style="color: #BA36A5;">with_items</span>:
- <span style="color: #008000;">'{{ vdr.home }}/.config/systemd/user'</span>
- <span style="color: #008000;">'{{ vdr.home }}/.config/openbox'</span>
- <span style="color: #008000;">'{{ vdr.home }}/.config/pulse'</span>
- <span style="color: #BA36A5;">name</span>: expand template for .xinitrc for vdr user
<span style="color: #BA36A5;">template</span>:
<span style="color: #BA36A5;">src</span>: <span style="color: #008000;">'templates/.xinitrc.j2'</span>
<span style="color: #BA36A5;">dest</span>: <span style="color: #008000;">'{{ vdr.home }}/.xinitrc'</span>
<span style="color: #BA36A5;">mode</span>: 0755
<span style="color: #BA36A5;">owner</span>: <span style="color: #008000;">'{{ vdr.user }}'</span>
<span style="color: #BA36A5;">group</span>: <span style="color: #008000;">'{{ vdr.group }}'</span>
- <span style="color: #BA36A5;">name</span>: expand template for openbox autostart
<span style="color: #BA36A5;">template</span>:
<span style="color: #BA36A5;">src</span>: <span style="color: #008000;">'templates/openbox/autostart.j2'</span>
<span style="color: #BA36A5;">dest</span>: <span style="color: #008000;">'{{ vdr.home }}/.config/openbox/autostart'</span>
<span style="color: #BA36A5;">mode</span>: 0755
<span style="color: #BA36A5;">owner</span>: <span style="color: #008000;">'{{ vdr.user }}'</span>
<span style="color: #BA36A5;">group</span>: <span style="color: #008000;">'{{ vdr.group }}'</span>
- <span style="color: #BA36A5;">name</span>: expand rc.xml for openbox
<span style="color: #BA36A5;">template</span>:
<span style="color: #BA36A5;">src</span>: <span style="color: #008000;">'templates/openbox/rc.xml.j2'</span>
<span style="color: #BA36A5;">dest</span>: <span style="color: #008000;">'{{ vdr.home }}/.config/openbox/rc.xml'</span>
<span style="color: #BA36A5;">mode</span>: 0755
<span style="color: #BA36A5;">owner</span>: <span style="color: #008000;">'{{ vdr.user }}'</span>
<span style="color: #BA36A5;">group</span>: <span style="color: #008000;">'{{ vdr.group }}'</span>
- <span style="color: #BA36A5;">name</span>: create yavdr-desktop.target for the user session
<span style="color: #BA36A5;">template</span>:
<span style="color: #BA36A5;">src</span>: <span style="color: #008000;">'templates/systemd/user/yavdr-desktop.target.j2'</span>
<span style="color: #BA36A5;">dest</span>: <span style="color: #008000;">'{{ vdr.home }}/.config/systemd/user/yavdr-desktop.target'</span>
<span style="color: #BA36A5;">mode</span>: 0755
<span style="color: #BA36A5;">owner</span>: <span style="color: #008000;">'{{ vdr.user }}'</span>
<span style="color: #BA36A5;">group</span>: <span style="color: #008000;">'{{ vdr.group }}'</span>
- <span style="color: #BA36A5;">name</span>: disable pulseaudio autospawning
<span style="color: #BA36A5;">lineinfile</span>:
<span style="color: #BA36A5;">path</span>: <span style="color: #008000;">'{{ vdr.home }}/.config/pulse/client.conf'</span>
<span style="color: #BA36A5;">line</span>: <span style="color: #008000;">'autospawn = no'</span>
<span style="color: #BA36A5;">create</span>: <span style="color: #D0372D;">yes</span>
<span style="color: #BA36A5;">state</span>: present
<span style="color: #BA36A5;">owner</span>: <span style="color: #008000;">'{{ vdr.user }}'</span>
<span style="color: #BA36A5;">group</span>: <span style="color: #008000;">'{{ vdr.group }}'</span>
- <span style="color: #BA36A5;">name</span>: set a login shell for the user vdr
<span style="color: #BA36A5;">user</span>:
<span style="color: #BA36A5;">name</span>: <span style="color: #008000;">'{{ vdr.user }}'</span>
<span style="color: #BA36A5;">shell</span>: <span style="color: #008000;">'/bin/bash'</span>
<span style="color: #BA36A5;">state</span>: present
<span style="color: #BA36A5;">uid</span>: <span style="color: #008000;">'{{ vdr.uid }}'</span>
<span style="color: #BA36A5;">groups</span>: <span style="color: #008000;">'{{ vdr.group }}'</span>
<span style="color: #BA36A5;">append</span>: <span style="color: #D0372D;">yes</span>
- <span style="color: #BA36A5;">name</span>: create tmux.service for the session
<span style="color: #BA36A5;">template</span>:
<span style="color: #BA36A5;">src</span>: roles/yavdr-xorg/templates/systemd/user/tmux.service.j2
<span style="color: #BA36A5;">dest</span>: <span style="color: #008000;">'{{ vdr.home }}/.config/systemd/user/tmux.service'</span>
- <span style="color: #BA36A5;">name</span>: enable and start xlogin for the user vdr
<span style="color: #BA36A5;">systemd</span>:
<span style="color: #BA36A5;">daemon_reload</span>: <span style="color: #D0372D;">yes</span>
<span style="color: #BA36A5;">name</span>: <span style="color: #008000;">'xlogin@{{ vdr.user }}'</span>
<span style="color: #BA36A5;">enabled</span>: <span style="color: #D0372D;">yes</span>
<span style="color: #BA36A5;">state</span>: started
</pre>
</div>
</div>
</div>
<div id="outline-container-orga7afbb7" class="outline-4">
<h4 id="orga7afbb7"><span class="section-number-4">8.9.4</span> templates</h4>
<div class="outline-text-4" id="text-8-9-4">
</div><ol class="org-ol"><li><a id="org7778e83"></a>xorg<br /><ol class="org-ol"><li><a id="org1d48832"></a>x-verbose@.service<br /><div class="outline-text-6" id="text-8-9-4-1-1">
<div class="org-src-container">
<pre class="src src-conf">[<span style="color: #6434A3;">Unit</span>]
<span style="color: #BA36A5;">Description</span>=X with verbose logging on %I
<span style="color: #BA36A5;">Wants</span>=graphical.target
<span style="color: #BA36A5;">Before</span>=graphical.target
[<span style="color: #6434A3;">Service</span>]
<span style="color: #BA36A5;">Type</span>=forking
<span style="color: #BA36A5;">ExecStart</span>=/usr/bin/x-daemon -logverbose 6 -noreset %I -config /etc/X11/xorg-debug.conf
</pre>
</div>
</div></li>
<li><a id="orgf5ec6f0"></a>Drop-in snippet for vdr.service<br /><div class="outline-text-6" id="text-8-9-4-1-2">
<div class="org-src-container">
<pre class="src src-conf"><span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">file: roles/yavdr-xorg/templates/vdr-xorg.conf</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">{{ ansible_managed_file }}</span>
[<span style="color: #6434A3;">Unit</span>]
<span style="color: #BA36A5;">After</span>=x@vt7.service
<span style="color: #BA36A5;">Wants</span>=x@vt7.service
<span style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">BindsTo=x@vt7.service</span>
</pre>
</div>
<div class="org-src-container">
<pre class="src src-shell"><span style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">!/bin/</span><span style="color: #0000FF;">bash</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">{{ ansible_managed_file }}</span>
<span style="color: #0000FF;">exec</span> openbox-session
</pre>
</div>
</div></li>
<li><a id="orgb2d3ebd"></a>xorg.conf<br /><div class="outline-text-6" id="text-8-9-4-1-3">
<div class="org-src-container">
<pre class="src src-conf">Section <span style="color: #008000;">"Device"</span>
Identifier <span style="color: #008000;">"nvidia"</span>
Driver <span style="color: #008000;">"nvidia"</span>
Option <span style="color: #008000;">"NoLogo"</span> <span style="color: #008000;">"true"</span>
Option <span style="color: #008000;">"DynamicTwinView"</span> <span style="color: #008000;">"true"</span>
Option <span style="color: #008000;">"NoFlip"</span> <span style="color: #008000;">"false"</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Option "FlatPanelProperties" "Scaling = Native"</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Option "ModeValidation" "NoVesaModes, NoXServerModes"</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Option "ModeDebug" "true"</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Option "HWCursor" "false"</span>
EndSection
Section <span style="color: #008000;">"Screen"</span>
Identifier <span style="color: #008000;">"screen"</span>
Device <span style="color: #008000;">"nvidia"</span>
EndSection
Section <span style="color: #008000;">"Extensions"</span>
Option <span style="color: #008000;">"Composite"</span> <span style="color: #008000;">"false"</span>
EndSection
</pre>
</div>
<div class="org-src-container">
<pre class="src src-conf">{{ ansible_managed_file | comment }}
Section <span style="color: #008000;">"ServerLayout"</span>
Identifier <span style="color: #008000;">"Layout0"</span>
Screen 0 <span style="color: #008000;">"Screen0"</span>
{% if xorg.secondary is defined %}
Screen 1 <span style="color: #008000;">"Screen1"</span> RightOf <span style="color: #008000;">"Screen0"</span>
{% endif %}
<span style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">InputDevice "Keyboard0" "CoreKeyboard"</span>
<span style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">InputDevice "Mouse0" "CorePointer"</span>
EndSection
Section <span style="color: #008000;">"InputClass"</span>
Identifier <span style="color: #008000;">"exclude eventlircd devices"</span>
MatchTag <span style="color: #008000;">"eventlircd"</span>
Option <span style="color: #008000;">"Ignore"</span> <span style="color: #008000;">"True"</span>
EndSection
Section <span style="color: #008000;">"Monitor"</span>
Identifier <span style="color: #008000;">"Monitor0"</span>
VendorName <span style="color: #008000;">"{{ xorg.primary.vendor }}"</span>
ModelName <span style="color: #008000;">"{{ xorg.primary.model }}"</span>
Option <span style="color: #008000;">"DPMS"</span>
Option <span style="color: #008000;">"ExactModeTimingsDVI"</span> <span style="color: #008000;">"True"</span>
EndSection
Section <span style="color: #008000;">"Device"</span>
Identifier <span style="color: #008000;">"Device0"</span>
Driver <span style="color: #008000;">"nvidia"</span>
VendorName <span style="color: #008000;">"NVIDIA Corporation"</span>
Option <span style="color: #008000;">"NoLogo"</span> <span style="color: #008000;">"true"</span>
{% if xorg.primary.bus_id is defined %}
BoardName <span style="color: #008000;">"{{ xorg.primary.gpu_name }}"</span>
BusID <span style="color: #008000;">"{{ xorg.primary.bus_id }}"</span>
{% else %}
BoardName <span style="color: #008000;">"Unknown"</span>
{% endif %}
Screen 0
EndSection
Section <span style="color: #008000;">"Screen"</span>
Identifier <span style="color: #008000;">"Screen0"</span>
Device <span style="color: #008000;">"Device0"</span>
Monitor <span style="color: #008000;">"Monitor0"</span>
DefaultDepth 24
Option <span style="color: #008000;">"nvidiaXineramaInfoOrder"</span> <span style="color: #008000;">"{{ xorg.primary.connector }}"</span>
Option <span style="color: #008000;">"ConnectedMonitor"</span> <span style="color: #008000;">"{{ xorg.primary.connector }}"</span>
Option <span style="color: #008000;">"UseDisplayDevice"</span> <span style="color: #008000;">"{{ xorg.primary.connector }}"</span>
Option <span style="color: #008000;">"CustomEDID"</span> <span style="color: #008000;">"{{ xorg.primary.connector }}:/etc/X11/edid.{{ xorg.primary.connector }}.bin"</span>
Option <span style="color: #008000;">"metamodes"</span> <span style="color: #008000;">"{{ xorg.primary.connector }}: {{ xorg.primary.mode }} +0+0"</span>
Option <span style="color: #008000;">"SLI"</span> <span style="color: #008000;">"Off"</span>
Option <span style="color: #008000;">"MultiGPU"</span> <span style="color: #008000;">"Off"</span>
Option <span style="color: #008000;">"BaseMosaic"</span> <span style="color: #008000;">"off"</span>
SubSection <span style="color: #008000;">"Display"</span>
Depth 24
EndSubSection
EndSection
{% if xorg.secondary is defined %}
Section <span style="color: #008000;">"Device"</span>
Identifier <span style="color: #008000;">"Device1"</span>
Driver <span style="color: #008000;">"nvidia"</span>
VendorName <span style="color: #008000;">"NVIDIA Corporation"</span>
Option <span style="color: #008000;">"NoLogo"</span> <span style="color: #008000;">"true"</span>
{% if xorg.secondary.bus_id is defined %}
BoardName <span style="color: #008000;">"{{ xorg.primary.gpu_name }}"</span>
BusID <span style="color: #008000;">"{{ xorg.primary.bus_id }}"</span>
{% else %}
BoardName <span style="color: #008000;">"Unknown"</span>
{% endif %}
Screen 1
EndSection
Section <span style="color: #008000;">"Monitor"</span>
Identifier <span style="color: #008000;">"Monitor1"</span>
VendorName <span style="color: #008000;">"{{ xorg.secondary.vendor }}"</span>
ModelName <span style="color: #008000;">"{{ xorg.secondary.model }}"</span>
EndSection
Section <span style="color: #008000;">"Screen"</span>
Identifier <span style="color: #008000;">"Screen1"</span>
Device <span style="color: #008000;">"Device1"</span>
Monitor <span style="color: #008000;">"Monitor1"</span>
DefaultDepth 24
Option <span style="color: #008000;">"nvidiaXineramaInfoOrder"</span> <span style="color: #008000;">"{{ xorg.secondary.connector }}"</span>
Option <span style="color: #008000;">"ConnectedMonitor"</span> <span style="color: #008000;">"{{ xorg.secondary.connector }}"</span>
Option <span style="color: #008000;">"UseDisplayDevice"</span> <span style="color: #008000;">"{{ xorg.secondary.connector }}"</span>
Option <span style="color: #008000;">"CustomEDID"</span> <span style="color: #008000;">"{{ xorg.secondary.connector }}:/etc/X11/edid.{{ xorg.secondary.connector }}.bin"</span>
Option <span style="color: #008000;">"metamodes"</span> <span style="color: #008000;">"{{ xorg.secondary.connector }}: {{ xorg.secondary.mode }} +0+0"</span>
Option <span style="color: #008000;">"SLI"</span> <span style="color: #008000;">"Off"</span>
Option <span style="color: #008000;">"MultiGPU"</span> <span style="color: #008000;">"Off"</span>
Option <span style="color: #008000;">"BaseMosaic"</span> <span style="color: #008000;">"off"</span>
SubSection <span style="color: #008000;">"Display"</span>
Depth 24
EndSubSection
EndSection
{% endif %}
</pre>
</div>
<div class="org-src-container">
<pre class="src src-shell">{{ ansible_managed_file | comment }}
Section <span style="color: #008000;">"ServerLayout"</span>
Identifier <span style="color: #008000;">"Layout0"</span>
Screen 0 <span style="color: #008000;">"Screen0"</span>
{% if xorg.best_tv_mode.secondary is defined %}
Screen 1 <span style="color: #008000;">"Screen1"</span> RightOf <span style="color: #008000;">"Screen0"</span>
{% endif %}
InputDevice <span style="color: #008000;">"Keyboard0"</span> <span style="color: #008000;">"CoreKeyboard"</span>
InputDevice <span style="color: #008000;">"Mouse0"</span> <span style="color: #008000;">"CorePointer"</span>
EndSection
Section <span style="color: #008000;">"InputDevice"</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">generated from default</span>
Identifier <span style="color: #008000;">"Mouse0"</span>
Driver <span style="color: #008000;">"mouse"</span>
Option <span style="color: #008000;">"Protocol"</span> <span style="color: #008000;">"auto"</span>
Option <span style="color: #008000;">"Device"</span> <span style="color: #008000;">"/dev/psaux"</span>
Option <span style="color: #008000;">"Emulate3Buttons"</span> <span style="color: #008000;">"no"</span>
Option <span style="color: #008000;">"ZAxisMapping"</span> <span style="color: #008000;">"4 5"</span>
EndSection
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">ignore devices with eventlircd tag </span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">ENV{ID_INPUT.tags}+="eventlircd"</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">must be set by an udev rule</span>
Section <span style="color: #008000;">"InputClass"</span>
Identifier <span style="color: #008000;">"ignore eventlircd devices"</span>
MatchTag <span style="color: #008000;">"eventlircd"</span>
Option <span style="color: #008000;">"Ignore"</span> <span style="color: #008000;">"True"</span>
EndSection
Section <span style="color: #008000;">"InputDevice"</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">generated from default</span>
Identifier <span style="color: #008000;">"Keyboard0"</span>
Driver <span style="color: #008000;">"kbd"</span>
EndSection
Section <span style="color: #008000;">"Monitor"</span>
Identifier <span style="color: #008000;">"Monitor0"</span>
VendorName <span style="color: #008000;">"Unknown"</span>
ModelName <span style="color: #008000;">"Unknown"</span>
{# TODO: VGA2SCART support (<span style="color: #0000FF;">if</span> needed)
{% if system.x11.display.0.default == <span style="color: #008000;">"VGA2Scart_4_3"</span> or system.x11.display.0.default == <span style="color: #008000;">"VGA2Scart_16_9"</span> %}
HorizSync 14-17
VertRefresh 49-61
{% if system.x11.display.0.default == <span style="color: #008000;">"VGA2Scart_4_3"</span> %}
Modeline <span style="color: #008000;">"VGA2Scart_4_3"</span> 13.875 720 744 808 888 576 580 585 625 -HSync -Vsync interlace
{% elif system.x11.display.0.default == <span style="color: #008000;">"VGA2Scart_16_9"</span> %}
Modeline <span style="color: #008000;">"VGA2Scart_16_9"</span> 19 1024 1032 1120 1216 576 581 586 625 -Hsync -Vsync interlace
{% endif %}
{% endif %}
<span style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">}</span>
Option <span style="color: #008000;">"DPMS"</span>
Option <span style="color: #008000;">"ExactModeTimingsDVI"</span> <span style="color: #008000;">"True"</span>
EndSection
{% if xrandr.best_tv_mode.secondary is defined %}
Section <span style="color: #008000;">"Monitor"</span>
Identifier <span style="color: #008000;">"Monitor1"</span>
VendorName <span style="color: #008000;">"Unknown"</span>
ModelName <span style="color: #008000;">"Unknown"</span>
{#
{% if system.x11.display.1.default<span style="color: #0000FF;"> in</span> (<span style="color: #008000;">"VGA2Scart_4_3"</span>, <span style="color: #008000;">"VGA2Scart_16_9"</span>) %}
HorizSync 14-17
VertRefresh 49-61
{% if system.x11.display.1.default == <span style="color: #008000;">"VGA2Scart_4_3"</span> %}
Modeline <span style="color: #008000;">"VGA2Scart_4_3"</span> 13.875 720 744 808 888 576 580 585 625 -HSync -Vsync interlace
{% elif system.x11.display.1.default == <span style="color: #008000;">"VGA2Scart_16_9"</span> %}
Modeline <span style="color: #008000;">"VGA2Scart_16_9"</span> 19 1024 1032 1120 1216 576 581 586 625 -Hsync -Vsync interlace
{% endif %}
Option <span style="color: #008000;">"DPMS"</span>
Option <span style="color: #008000;">"ExactModeTimingsDVI"</span> <span style="color: #008000;">"True"</span>
{% endif %}
<span style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">}</span>
EndSection
{% endif %}
Section <span style="color: #008000;">"Device"</span>
Identifier <span style="color: #008000;">"Device0"</span>
{% if system.hardware.nvidia.detected %}
Driver <span style="color: #008000;">"nvidia"</span>
VendorName <span style="color: #008000;">"NVIDIA Corporation"</span>
{% endif %}
Screen 0
Option <span style="color: #008000;">"DPI"</span> <span style="color: #008000;">"100x100"</span>
{% if system.hardware.nvidia.busid is defined and system.hardware.busid %}
BusID <span style="color: #008000;">"PCI: {{ system.hardware.nvidia.busid }}"</span>
{% endif %}
Option <span style="color: #008000;">"NoLogo"</span> <span style="color: #008000;">"True"</span>
Option <span style="color: #008000;">"UseEvents"</span> <span style="color: #008000;">"True"</span>
Option <span style="color: #008000;">"TripleBuffer"</span> <span style="color: #008000;">"False"</span>
Option <span style="color: #008000;">"AddARGBGLXVisuals"</span> <span style="color: #008000;">"True"</span>
Option <span style="color: #008000;">"TwinView"</span> <span style="color: #008000;">"0"</span>
Option <span style="color: #008000;">"DynamicTwinView"</span> <span style="color: #008000;">"0"</span>
Option <span style="color: #008000;">"OnDemandVBlankinterrupts"</span> <span style="color: #008000;">"on"</span>
Option <span style="color: #008000;">"FlatPanelProperties"</span> <span style="color: #008000;">"Scaling = Native"</span>
EndSection
{% if xrandr.best_tv_mode.secondary is defined %}
Section <span style="color: #008000;">"Device"</span>
Identifier <span style="color: #008000;">"Device1"</span>
{% if system.hardware.nvidia.detected %}
Driver <span style="color: #008000;">"nvidia"</span>
VendorName <span style="color: #008000;">"NVIDIA Corporation"</span>
{% endif %}
Screen 1
{% if system.hardware.nvidia.busid is defined and system.hardware.nvidia.busid %}
BusID <span style="color: #008000;">"PCI: {{ system.hardware.nvidia.busid }}"</span>
{% endif %}
Option <span style="color: #008000;">"NoLogo"</span> <span style="color: #008000;">"True"</span>
Option <span style="color: #008000;">"UseEvents"</span> <span style="color: #008000;">"True"</span>
Option <span style="color: #008000;">"TripleBuffer"</span> <span style="color: #008000;">"False"</span>
Option <span style="color: #008000;">"AddARGBGLXVisuals"</span> <span style="color: #008000;">"True"</span>
Option <span style="color: #008000;">"TwinView"</span> <span style="color: #008000;">"0"</span>
Option <span style="color: #008000;">"DynamicTwinView"</span> <span style="color: #008000;">"0"</span>
EndSection
{% endif %}
Section <span style="color: #008000;">"Screen"</span>
Identifier <span style="color: #008000;">"Screen0"</span>
Device <span style="color: #008000;">"Device0"</span>
Monitor <span style="color: #008000;">"Monitor0"</span>
DefaultDepth 24
SubSection <span style="color: #008000;">"Display"</span>
Depth 24
{% if xrandr.best_tv_mode.primary is defined %}
Modes <span style="color: #008000;">"{{ xrandr.best_tv_mode.primary.mode }}"</span>{#{% for mode<span style="color: #0000FF;"> in</span> xrandr %}{% if mode != system.x11.display.0.default %} <span style="color: #008000;">"{{ mode }}"</span>{% endif %}{% endfor %}#} nvidia-auto-select
{% elif system.hardware.nvidia.detected == 1 %}
Modes <span style="color: #008000;">"nvidia-auto-select"</span>
{% endif %}
EndSubSection
{% if system.x11.display.0.default or system.x11.default %}
{% if system.x11.display.0.device is definded and system.x11.display.0.device %}
Option <span style="color: #008000;">"ConnectedMonitor"</span> {{ system.x11.display.0.device }}
{% else %}
Option <span style="color: #008000;">"ConnectedMonitor"</span> {{ system.x11.default }}
{% endif %}
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">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 style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">Option "ConnectedMonitor"</span>
<span style="color: #008000;">"&lt;?cs if:(?system.x11.display.0.device) ?&gt;</span>
<span style="color: #008000;"> &lt;?cs call:fix_display_name(system.x11.display.0.device) ?&gt;</span>
<span style="color: #008000;"> &lt;?cs else ?&gt;</span>
<span style="color: #008000;"> &lt;?cs var:system.x11.default ?&gt;</span>
<span style="color: #008000;"> &lt;?cs /if ?&gt;</span>
<span style="color: #008000;"> &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 style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">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 style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">&lt;?cs /if ?&gt;</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">&lt;?cs if:(?system.hardware.nvidia.0.edid &amp;&amp; system.hardware.nvidia.0.edid == "1") ?&gt;</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Option "CustomEDID" "&lt;?cs call:fix_display_name(system.x11.display.0.device) ?&gt;:/etc/X11/edid.0.yavdr"</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">&lt;?cs /if ?&gt;</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">&lt;?cs if:(system.hardware.nvidia.detected == 1 &amp;&amp; ?system.x11.display.0.device) ?&gt;</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">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 style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">&lt;?cs each:mode = system.x11.display.0.mode ?&gt;&lt;?cs if:(mode != system.x11.display.0.default) ?&gt;</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Option "MetaModes" "&lt;?cs call:fix_display_name(system.x11.display.0.device) ?&gt;: &lt;?cs var:mode ?&gt; { ViewPortIn=&lt;?cs var:system.x11.display.0.viewport.in.x ?&gt;x&lt;?cs var:system.x11.display.0.viewport.in.y ?&gt;, ViewPortOut=&lt;?cs var:system.x11.display.0.viewport.out.x ?&gt;x&lt;?cs var:system.x11.display.0.viewport.out.y ?&gt;+&lt;?cs var:system.x11.display.0.viewport.out.plusx ?&gt;+&lt;?cs var:system.x11.display.0.viewport.out.plusy ?&gt; }"&lt;?cs /if ?&gt;&lt;?cs /each ?&gt; </span>
{% endif %}
EndSection
{% if system.x11.dualhead.enabled == <span style="color: #008000;">"1"</span> %}
Section <span style="color: #008000;">"Screen"</span>
Identifier <span style="color: #008000;">"Screen1"</span>
Device <span style="color: #008000;">"Device1"</span>
Monitor <span style="color: #008000;">"Monitor1"</span>
DefaultDepth 24
SubSection <span style="color: #008000;">"Display"</span>
Depth 24
{% if system.x11.display.0.default is defined and system.x11.display.0.default %}
Modes <span style="color: #008000;">"{{ system.x11.display.1.default }}"</span>{% for mode<span style="color: #0000FF;"> in</span> system.x11.display.1.mode %}{% if mode != system.x11.display.1.default %} <span style="color: #008000;">"{{ mode }}"</span>{% endif %}{% endfor %}
{% elif system.hardware.nvidia.detected == <span style="color: #008000;">"1"</span> %}
Modes <span style="color: #008000;">"nvidia-auto-select"</span>
{% endif %}
EndSubSection
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">&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 style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Option "UseDisplayDevice" "&lt;?cs call:fix_display_name(system.x11.display.1.device) ?&gt;"</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">&lt;?cs /if ?&gt;</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">&lt;?cs if:(?system.hardware.nvidia.1.edid &amp;&amp; system.hardware.nvidia.1.edid == "1") ?&gt;</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Option "CustomEDID" "&lt;?cs call:fix_display_name(system.x11.display.1.device) ?&gt;:/etc/X11/edid.1.yavdr"</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">&lt;?cs /if ?&gt;</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">&lt;?cs if:(system.hardware.nvidia.detected == 1 &amp;&amp; ?system.x11.display.1.device) ?&gt;</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">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 style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">&lt;?cs each:mode = system.x11.display.1.mode ?&gt;&lt;?cs if:(mode != system.x11.display.1.default) ?&gt;</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">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 style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">&lt;?cs /if ?&gt;</span>
EndSection
{% endif %}
</pre>
</div>
</div></li></ol></li>
<li><a id="org26ad6ec"></a>vdr<br /><div class="outline-text-5" id="text-8-9-4-2">
<div class="org-src-container">
<pre class="src src-conf">[<span style="color: #6434A3;">Service</span>]
<span style="color: #BA36A5;">EnvironmentFile</span>=-/var/lib/vdr/.session-env
</pre>
</div>
</div></li>
<li><a id="org72fb081"></a>Systemd User Session<br /><ol class="org-ol"><li><a id="org3ec4f32"></a>yavdr-desktop.target<br /><div class="outline-text-6" id="text-8-9-4-3-1">
<div class="org-src-container">
<pre class="src src-shell">[Unit]
<span style="color: #BA36A5;">Description</span>=yaVDR Desktop
<span style="color: #BA36A5;">Requires</span>=default.target
<span style="color: #BA36A5;">After</span>=default.target pulseaudio.service
<span style="color: #BA36A5;">Wants</span>=dbus.service pulseaudio.service
<span style="color: #BA36A5;">AllowIsolate</span>=yes
</pre>
</div>
</div></li>
<li><a id="org82106f0"></a>detect-second-display<br /><div class="outline-text-6" id="text-8-9-4-3-2">
<div class="org-src-container">
<pre class="src src-conf">[<span style="color: #6434A3;">Unit</span>]
<span style="color: #BA36A5;">Description</span>=Detect second DISPLAY using xrandr
[<span style="color: #6434A3;">Service</span>]
<span style="color: #BA36A5;">Type</span>=oneshot
<span style="color: #BA36A5;">ExecStart</span>=/bin/bash -c <span style="color: #008000;">'export DISPLAY=$DISPLAY.1; xrandr -q | grep "connected" &amp;&amp; echo "DISPLAY=$DISPLAY" &gt; ~/.second_display || rm -f ~/.second_display'</span>
[<span style="color: #6434A3;">Install</span>]
<span style="color: #BA36A5;">WantedBy</span>=yavdr-desktop.target
</pre>
</div>
</div></li>
<li><a id="orgef62c8c"></a>openbox-second.service<br /><div class="outline-text-6" id="text-8-9-4-3-3">
<div class="org-src-container">
<pre class="src src-conf">[<span style="color: #6434A3;">Unit</span>]
<span style="color: #BA36A5;">Description</span>=Start openbox on the second DISPLAY if it exists
<span style="color: #BA36A5;">After</span>=detect-second-display.service
<span style="color: #BA36A5;">Wants</span>=detect-second-display.service
<span style="color: #BA36A5;">Before</span>=yavdr-frontend.service
<span style="color: #BA36A5;">ConditionFileNotEmpty</span>=%h/.second_display
[<span style="color: #6434A3;">Service</span>]
<span style="color: #BA36A5;">PassEnvironment</span>=XDG_RUNTIME_DIR DBUS_SESSION_BUS_ADDRESS
<span style="color: #BA36A5;">EnvironmentFile</span>=%h/.second_display
<span style="color: #BA36A5;">ExecStart</span>=/usr/bin/openbox --config-file %h/.config/openbox/rc.xml
[<span style="color: #6434A3;">Install</span>]
<span style="color: #BA36A5;">WantedBy</span>=yavdr-desktop.target
</pre>
</div>
</div></li>
<li><a id="orgf5a4d81"></a>osd2web.service<br /><div class="outline-text-6" id="text-8-9-4-3-4">
<div class="org-src-container">
<pre class="src src-conf">[<span style="color: #6434A3;">Unit</span>]
<span style="color: #BA36A5;">Description</span>=Start a kiosk browser on the second DISPLAY if it exists
<span style="color: #BA36A5;">After</span>=detect-second-display.service openbox-second.service
<span style="color: #BA36A5;">Wants</span>=detect-second-display.service openbox-second.service
<span style="color: #BA36A5;">ConditionFileNotEmpty</span>=%h/.second_display
[<span style="color: #6434A3;">Service</span>]
<span style="color: #BA36A5;">EnvironmentFile</span>=%h/.second_display
<span style="color: #BA36A5;">PassEnvironment</span>=XDG_RUNTIME_DIR DBUS_SESSION_BUS_ADDRESS
<span style="color: #BA36A5;">ExecStart</span>=/usr/bin/on_vdr -o -c <span style="color: #008000;">'kiosk-browser "http://localhost:4444/skins/horchiTft/index.html?theme=blue&amp;onlyView=1"'</span>
[<span style="color: #6434A3;">Install</span>]
<span style="color: #BA36A5;">WantedBy</span>=yavdr-desktop.target
</pre>
</div>
</div></li>
<li><a id="org5f8af97"></a>tmux.service<br /><div class="outline-text-6" id="text-8-9-4-3-5">
<div class="org-src-container">
<pre class="src src-conf">[<span style="color: #6434A3;">Unit</span>]
<span style="color: #BA36A5;">Description</span>=Start tmux in detached session
[<span style="color: #6434A3;">Service</span>]
<span style="color: #BA36A5;">EnvironmentFile</span>=-%h/.session-env
<span style="color: #BA36A5;">Type</span>=forking
<span style="color: #BA36A5;">ExecStart</span>=/usr/bin/tmux new-session -s use-session -d
<span style="color: #BA36A5;">ExecStop</span>=/usr/bin/tmux kill-session -t %u
<span style="color: #BA36A5;">Restart</span>=always
[<span style="color: #6434A3;">Install</span>]
<span style="color: #BA36A5;">WantedBy</span>=default.target
</pre>
</div>
</div></li></ol></li>
<li><a id="org8ae18b9"></a>openbox<br /><ol class="org-ol"><li><a id="org22ba070"></a>autostart<br /><div class="outline-text-6" id="text-8-9-4-4-1">
<div class="org-src-container">
<pre class="src src-shell"><span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">forward environment variables to an environment file and the systemd user session</span>
env | grep <span style="color: #008000;">"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
<span style="color: #BA36A5;">enabled_services</span>=(<span style="color: #008000;">"tmux.service"</span> <span style="color: #008000;">"detect-second-display.service"</span> <span style="color: #008000;">"openbox-second.service"</span> <span style="color: #008000;">"osd2web.service"</span>)
<span style="color: #BA36A5;">disabled_services</span>=()
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">enable configured services for the user session</span>
<span style="color: #0000FF;">for</span> service<span style="color: #0000FF;"> in</span> <span style="color: #008000;">"${enabled_services[@]}"</span>; <span style="color: #0000FF;">do</span>
systemctl --user enable <span style="color: #008000;">"$service"</span>
<span style="color: #0000FF;">done</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">disable unwanted services for the user session</span>
<span style="color: #0000FF;">for</span> service<span style="color: #0000FF;"> in</span> <span style="color: #008000;">"${disabled_services[@]}"</span>; <span style="color: #0000FF;">do</span>
systemctl --user disable <span style="color: #008000;">"$service"</span>
<span style="color: #0000FF;">done</span>
<span style="color: #0000FF;">if</span> which dbus-update-activation-environment &gt;/dev/null 2&gt;&amp;1; <span style="color: #0000FF;">then</span>
dbus-update-activation-environment DISPLAY XAUTHORITY XDG_RUNTIME_DIR
<span style="color: #0000FF;">fi</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">start systemd units for the yavdr user session</span>
systemctl --user isolate yavdr-desktop.target
</pre>
</div>
</div></li>
<li><a id="org3db90e4"></a>rc.xml<br /><div class="outline-text-6" id="text-8-9-4-4-2">
<div class="org-src-container">
<pre class="src src-xml">&lt;?<span style="color: #0000FF;">xml</span> <span style="color: #BA36A5;">version</span>=<span style="color: #008000;">"</span><span style="color: #008000;">1.0</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">encoding</span>=<span style="color: #008000;">"</span><span style="color: #008000;">UTF-8</span><span style="color: #008000;">"</span>?&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">openbox_config</span> <span style="color: #006FE0;">xmlns</span>=<span style="color: #008000;">"</span><span style="color: #008000;">http://openbox.org/3.4/rc</span><span style="color: #008000;">"</span> <span style="color: #006FE0;">xmlns</span>:<span style="color: #BA36A5;">xi</span>=<span style="color: #008000;">"</span><span style="color: #008000;">http://www.w3.org/2001/XInclude</span><span style="color: #008000;">"</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> Do not edit this file, it will be overwritten on install.</span>
<span style="color: #8D8D84; font-style: italic;"> Copy the file to $HOME/.config/openbox/ instead. </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">resistance</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">strength</span>&gt;10&lt;/<span style="color: #000088; background-color: #DEDEDE;">strength</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">screen_edge_strength</span>&gt;20&lt;/<span style="color: #000088; background-color: #DEDEDE;">screen_edge_strength</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">resistance</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">focus</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">focusNew</span>&gt;yes&lt;/<span style="color: #000088; background-color: #DEDEDE;">focusNew</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> always try to focus new windows when they appear. other rules do</span>
<span style="color: #8D8D84; font-style: italic;"> apply </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">followMouse</span>&gt;no&lt;/<span style="color: #000088; background-color: #DEDEDE;">followMouse</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> move focus to a window when you move the mouse into it </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">focusLast</span>&gt;yes&lt;/<span style="color: #000088; background-color: #DEDEDE;">focusLast</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> focus the last used window when changing desktops, instead of the one</span>
<span style="color: #8D8D84; font-style: italic;"> under the mouse pointer. when followMouse is enabled </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">underMouse</span>&gt;no&lt;/<span style="color: #000088; background-color: #DEDEDE;">underMouse</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> move focus under the mouse, even when the mouse is not moving </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">focusDelay</span>&gt;200&lt;/<span style="color: #000088; background-color: #DEDEDE;">focusDelay</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> when followMouse is enabled, the mouse must be inside the window for</span>
<span style="color: #8D8D84; font-style: italic;"> this many milliseconds (1000 = 1 sec) before moving focus to it </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">raiseOnFocus</span>&gt;no&lt;/<span style="color: #000088; background-color: #DEDEDE;">raiseOnFocus</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> when followMouse is enabled, and a window is given focus by moving the</span>
<span style="color: #8D8D84; font-style: italic;"> mouse into it, also raise the window </span><span style="color: #8D8D84;">--&gt;</span>
&lt;/<span style="color: #000088; background-color: #DEDEDE;">focus</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">placement</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">policy</span>&gt;Smart&lt;/<span style="color: #000088; background-color: #DEDEDE;">policy</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> 'Smart' or 'UnderMouse' </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">center</span>&gt;yes&lt;/<span style="color: #000088; background-color: #DEDEDE;">center</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> whether to place windows in the center of the free area found or</span>
<span style="color: #8D8D84; font-style: italic;"> the top left corner </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">monitor</span>&gt;Active&lt;/<span style="color: #000088; background-color: #DEDEDE;">monitor</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> with Smart placement on a multi-monitor system, try to place new windows</span>
<span style="color: #8D8D84; font-style: italic;"> on: 'Any' - any monitor, 'Mouse' - where the mouse is, 'Active' - where</span>
<span style="color: #8D8D84; font-style: italic;"> the active window is, 'Primary' - only on the primary monitor </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">primaryMonitor</span>&gt;Active&lt;/<span style="color: #000088; background-color: #DEDEDE;">primaryMonitor</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> The monitor where Openbox should place popup dialogs such as the</span>
<span style="color: #8D8D84; font-style: italic;"> focus cycling popup, or the desktop switch popup. It can be an index</span>
<span style="color: #8D8D84; font-style: italic;"> from 1, specifying a particular monitor. Or it can be one of the</span>
<span style="color: #8D8D84; font-style: italic;"> following: 'Mouse' - where the mouse is, or</span>
<span style="color: #8D8D84; font-style: italic;"> 'Active' - where the active window is </span><span style="color: #8D8D84;">--&gt;</span>
&lt;/<span style="color: #000088; background-color: #DEDEDE;">placement</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">theme</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">name</span>&gt;Onyx&lt;/<span style="color: #000088; background-color: #DEDEDE;">name</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">titleLayout</span>&gt;NLIMC&lt;/<span style="color: #000088; background-color: #DEDEDE;">titleLayout</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span>
<span style="color: #8D8D84; font-style: italic;"> available characters are NDSLIMC, each can occur at most once.</span>
<span style="color: #8D8D84; font-style: italic;"> N: window icon</span>
<span style="color: #8D8D84; font-style: italic;"> L: window label (AKA title).</span>
<span style="color: #8D8D84; font-style: italic;"> I: iconify</span>
<span style="color: #8D8D84; font-style: italic;"> M: maximize</span>
<span style="color: #8D8D84; font-style: italic;"> C: close</span>
<span style="color: #8D8D84; font-style: italic;"> S: shade (roll up/down)</span>
<span style="color: #8D8D84; font-style: italic;"> D: omnipresent (on all desktops).</span>
<span style="color: #8D8D84; font-style: italic;"> </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">keepBorder</span>&gt;yes&lt;/<span style="color: #000088; background-color: #DEDEDE;">keepBorder</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">animateIconify</span>&gt;yes&lt;/<span style="color: #000088; background-color: #DEDEDE;">animateIconify</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">font</span> <span style="color: #BA36A5;">place</span>=<span style="color: #008000;">"</span><span style="color: #008000;">ActiveWindow</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">name</span>&gt;sans&lt;/<span style="color: #000088; background-color: #DEDEDE;">name</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">size</span>&gt;8&lt;/<span style="color: #000088; background-color: #DEDEDE;">size</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> font size in points </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">weight</span>&gt;bold&lt;/<span style="color: #000088; background-color: #DEDEDE;">weight</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> 'bold' or 'normal' </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">slant</span>&gt;normal&lt;/<span style="color: #000088; background-color: #DEDEDE;">slant</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> 'italic' or 'normal' </span><span style="color: #8D8D84;">--&gt;</span>
&lt;/<span style="color: #000088; background-color: #DEDEDE;">font</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">font</span> <span style="color: #BA36A5;">place</span>=<span style="color: #008000;">"</span><span style="color: #008000;">InactiveWindow</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">name</span>&gt;sans&lt;/<span style="color: #000088; background-color: #DEDEDE;">name</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">size</span>&gt;8&lt;/<span style="color: #000088; background-color: #DEDEDE;">size</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> font size in points </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">weight</span>&gt;bold&lt;/<span style="color: #000088; background-color: #DEDEDE;">weight</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> 'bold' or 'normal' </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">slant</span>&gt;normal&lt;/<span style="color: #000088; background-color: #DEDEDE;">slant</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> 'italic' or 'normal' </span><span style="color: #8D8D84;">--&gt;</span>
&lt;/<span style="color: #000088; background-color: #DEDEDE;">font</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">font</span> <span style="color: #BA36A5;">place</span>=<span style="color: #008000;">"</span><span style="color: #008000;">MenuHeader</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">name</span>&gt;sans&lt;/<span style="color: #000088; background-color: #DEDEDE;">name</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">size</span>&gt;9&lt;/<span style="color: #000088; background-color: #DEDEDE;">size</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> font size in points </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">weight</span>&gt;normal&lt;/<span style="color: #000088; background-color: #DEDEDE;">weight</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> 'bold' or 'normal' </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">slant</span>&gt;normal&lt;/<span style="color: #000088; background-color: #DEDEDE;">slant</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> 'italic' or 'normal' </span><span style="color: #8D8D84;">--&gt;</span>
&lt;/<span style="color: #000088; background-color: #DEDEDE;">font</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">font</span> <span style="color: #BA36A5;">place</span>=<span style="color: #008000;">"</span><span style="color: #008000;">MenuItem</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">name</span>&gt;sans&lt;/<span style="color: #000088; background-color: #DEDEDE;">name</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">size</span>&gt;9&lt;/<span style="color: #000088; background-color: #DEDEDE;">size</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> font size in points </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">weight</span>&gt;normal&lt;/<span style="color: #000088; background-color: #DEDEDE;">weight</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> 'bold' or 'normal' </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">slant</span>&gt;normal&lt;/<span style="color: #000088; background-color: #DEDEDE;">slant</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> 'italic' or 'normal' </span><span style="color: #8D8D84;">--&gt;</span>
&lt;/<span style="color: #000088; background-color: #DEDEDE;">font</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">font</span> <span style="color: #BA36A5;">place</span>=<span style="color: #008000;">"</span><span style="color: #008000;">ActiveOnScreenDisplay</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">name</span>&gt;sans&lt;/<span style="color: #000088; background-color: #DEDEDE;">name</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">size</span>&gt;9&lt;/<span style="color: #000088; background-color: #DEDEDE;">size</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> font size in points </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">weight</span>&gt;bold&lt;/<span style="color: #000088; background-color: #DEDEDE;">weight</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> 'bold' or 'normal' </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">slant</span>&gt;normal&lt;/<span style="color: #000088; background-color: #DEDEDE;">slant</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> 'italic' or 'normal' </span><span style="color: #8D8D84;">--&gt;</span>
&lt;/<span style="color: #000088; background-color: #DEDEDE;">font</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">font</span> <span style="color: #BA36A5;">place</span>=<span style="color: #008000;">"</span><span style="color: #008000;">InactiveOnScreenDisplay</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">name</span>&gt;sans&lt;/<span style="color: #000088; background-color: #DEDEDE;">name</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">size</span>&gt;9&lt;/<span style="color: #000088; background-color: #DEDEDE;">size</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> font size in points </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">weight</span>&gt;bold&lt;/<span style="color: #000088; background-color: #DEDEDE;">weight</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> 'bold' or 'normal' </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">slant</span>&gt;normal&lt;/<span style="color: #000088; background-color: #DEDEDE;">slant</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> 'italic' or 'normal' </span><span style="color: #8D8D84;">--&gt;</span>
&lt;/<span style="color: #000088; background-color: #DEDEDE;">font</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">theme</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">desktops</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> this stuff is only used at startup, pagers allow you to change them</span>
<span style="color: #8D8D84; font-style: italic;"> during a session</span>
<span style="color: #8D8D84; font-style: italic;"> these are default values to use when other ones are not already set</span>
<span style="color: #8D8D84; font-style: italic;"> by other applications, or saved in your session</span>
<span style="color: #8D8D84; font-style: italic;"> use obconf if you want to change these without having to log out</span>
<span style="color: #8D8D84; font-style: italic;"> and back in </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">number</span>&gt;2&lt;/<span style="color: #000088; background-color: #DEDEDE;">number</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">firstdesk</span>&gt;1&lt;/<span style="color: #000088; background-color: #DEDEDE;">firstdesk</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">names</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> set names up here if you want to, like this:</span>
<span style="color: #8D8D84; font-style: italic;"> &lt;name&gt;desktop 1&lt;/name&gt;</span>
<span style="color: #8D8D84; font-style: italic;"> &lt;name&gt;desktop 2&lt;/name&gt;</span>
<span style="color: #8D8D84; font-style: italic;"> </span><span style="color: #8D8D84;">--&gt;</span>
&lt;/<span style="color: #000088; background-color: #DEDEDE;">names</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">popupTime</span>&gt;875&lt;/<span style="color: #000088; background-color: #DEDEDE;">popupTime</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> The number of milliseconds to show the popup for when switching</span>
<span style="color: #8D8D84; font-style: italic;"> desktops. Set this to 0 to disable the popup. </span><span style="color: #8D8D84;">--&gt;</span>
&lt;/<span style="color: #000088; background-color: #DEDEDE;">desktops</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">resize</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">drawContents</span>&gt;yes&lt;/<span style="color: #000088; background-color: #DEDEDE;">drawContents</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">popupShow</span>&gt;Nonpixel&lt;/<span style="color: #000088; background-color: #DEDEDE;">popupShow</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> 'Always', 'Never', or 'Nonpixel' (xterms and such) </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">popupPosition</span>&gt;Center&lt;/<span style="color: #000088; background-color: #DEDEDE;">popupPosition</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> 'Center', 'Top', or 'Fixed' </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">popupFixedPosition</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> these are used if popupPosition is set to 'Fixed' </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">x</span>&gt;10&lt;/<span style="color: #000088; background-color: #DEDEDE;">x</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> positive number for distance from left edge, negative number for</span>
<span style="color: #8D8D84; font-style: italic;"> distance from right edge, or 'Center' </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">y</span>&gt;10&lt;/<span style="color: #000088; background-color: #DEDEDE;">y</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> positive number for distance from top edge, negative number for</span>
<span style="color: #8D8D84; font-style: italic;"> distance from bottom edge, or 'Center' </span><span style="color: #8D8D84;">--&gt;</span>
&lt;/<span style="color: #000088; background-color: #DEDEDE;">popupFixedPosition</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">resize</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> You can reserve a portion of your screen where windows will not cover when</span>
<span style="color: #8D8D84; font-style: italic;"> they are maximized, or when they are initially placed.</span>
<span style="color: #8D8D84; font-style: italic;"> Many programs reserve space automatically, but you can use this in other</span>
<span style="color: #8D8D84; font-style: italic;"> cases. </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">margins</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">top</span>&gt;0&lt;/<span style="color: #000088; background-color: #DEDEDE;">top</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">bottom</span>&gt;0&lt;/<span style="color: #000088; background-color: #DEDEDE;">bottom</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">left</span>&gt;0&lt;/<span style="color: #000088; background-color: #DEDEDE;">left</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">right</span>&gt;0&lt;/<span style="color: #000088; background-color: #DEDEDE;">right</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">margins</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">dock</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">position</span>&gt;TopLeft&lt;/<span style="color: #000088; background-color: #DEDEDE;">position</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> (Top|Bottom)(Left|Right|)|Top|Bottom|Left|Right|Floating </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">floatingX</span>&gt;0&lt;/<span style="color: #000088; background-color: #DEDEDE;">floatingX</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">floatingY</span>&gt;0&lt;/<span style="color: #000088; background-color: #DEDEDE;">floatingY</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">noStrut</span>&gt;no&lt;/<span style="color: #000088; background-color: #DEDEDE;">noStrut</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">stacking</span>&gt;Above&lt;/<span style="color: #000088; background-color: #DEDEDE;">stacking</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> 'Above', 'Normal', or 'Below' </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">direction</span>&gt;Vertical&lt;/<span style="color: #000088; background-color: #DEDEDE;">direction</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> 'Vertical' or 'Horizontal' </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">autoHide</span>&gt;no&lt;/<span style="color: #000088; background-color: #DEDEDE;">autoHide</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">hideDelay</span>&gt;300&lt;/<span style="color: #000088; background-color: #DEDEDE;">hideDelay</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> in milliseconds (1000 = 1 second) </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">showDelay</span>&gt;300&lt;/<span style="color: #000088; background-color: #DEDEDE;">showDelay</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> in milliseconds (1000 = 1 second) </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">moveButton</span>&gt;Middle&lt;/<span style="color: #000088; background-color: #DEDEDE;">moveButton</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> 'Left', 'Middle', 'Right' </span><span style="color: #8D8D84;">--&gt;</span>
&lt;/<span style="color: #000088; background-color: #DEDEDE;">dock</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">keyboard</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">chainQuitKey</span>&gt;C-g&lt;/<span style="color: #000088; background-color: #DEDEDE;">chainQuitKey</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> Keybindings for desktop switching </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">C-A-Left</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">GoToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;left&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">wrap</span>&gt;no&lt;/<span style="color: #000088; background-color: #DEDEDE;">wrap</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">C-A-Right</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">GoToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;right&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">wrap</span>&gt;no&lt;/<span style="color: #000088; background-color: #DEDEDE;">wrap</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">C-A-Up</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">GoToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;up&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">wrap</span>&gt;no&lt;/<span style="color: #000088; background-color: #DEDEDE;">wrap</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">C-A-Down</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">GoToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;down&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">wrap</span>&gt;no&lt;/<span style="color: #000088; background-color: #DEDEDE;">wrap</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">S-A-Left</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">SendToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;left&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">wrap</span>&gt;no&lt;/<span style="color: #000088; background-color: #DEDEDE;">wrap</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">S-A-Right</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">SendToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;right&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">wrap</span>&gt;no&lt;/<span style="color: #000088; background-color: #DEDEDE;">wrap</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">S-A-Up</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">SendToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;up&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">wrap</span>&gt;no&lt;/<span style="color: #000088; background-color: #DEDEDE;">wrap</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">S-A-Down</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">SendToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;down&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">wrap</span>&gt;no&lt;/<span style="color: #000088; background-color: #DEDEDE;">wrap</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">W-F1</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">GoToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;1&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">W-F2</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">GoToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;2&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">W-F3</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">GoToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;3&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">W-F4</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">GoToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;4&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">W-d</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">ToggleShowDesktop</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> Keybindings for windows </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">A-F4</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Close</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">A-Escape</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Lower</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">FocusToBottom</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Unfocus</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">A-space</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">ShowMenu</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;client-menu&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> Take a screenshot of the current window with scrot when Alt+Print are pressed </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">A-Print</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Execute</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">command</span>&gt;scrot -s&lt;/<span style="color: #000088; background-color: #DEDEDE;">command</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> Keybindings for window switching </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">A-Tab</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">NextWindow</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">finalactions</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Focus</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Raise</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Unshade</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">finalactions</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">A-S-Tab</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">PreviousWindow</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">finalactions</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Focus</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Raise</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Unshade</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">finalactions</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">C-A-Tab</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">NextWindow</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">panels</span>&gt;yes&lt;/<span style="color: #000088; background-color: #DEDEDE;">panels</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">desktop</span>&gt;yes&lt;/<span style="color: #000088; background-color: #DEDEDE;">desktop</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">finalactions</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Focus</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Raise</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Unshade</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">finalactions</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> Keybindings for window switching with the arrow keys </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">W-S-Right</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">DirectionalCycleWindows</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">direction</span>&gt;right&lt;/<span style="color: #000088; background-color: #DEDEDE;">direction</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">W-S-Left</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">DirectionalCycleWindows</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">direction</span>&gt;left&lt;/<span style="color: #000088; background-color: #DEDEDE;">direction</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">W-S-Up</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">DirectionalCycleWindows</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">direction</span>&gt;up&lt;/<span style="color: #000088; background-color: #DEDEDE;">direction</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">W-S-Down</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">DirectionalCycleWindows</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">direction</span>&gt;down&lt;/<span style="color: #000088; background-color: #DEDEDE;">direction</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> Keybindings for running applications </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">W-e</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Execute</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">startupnotify</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">enabled</span>&gt;true&lt;/<span style="color: #000088; background-color: #DEDEDE;">enabled</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">name</span>&gt;Konqueror&lt;/<span style="color: #000088; background-color: #DEDEDE;">name</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">startupnotify</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">command</span>&gt;kfmclient openProfile filemanagement&lt;/<span style="color: #000088; background-color: #DEDEDE;">command</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> Launch scrot when Print is pressed </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">keybind</span> <span style="color: #BA36A5;">key</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Print</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Execute</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">command</span>&gt;scrot&lt;/<span style="color: #000088; background-color: #DEDEDE;">command</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keybind</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keyboard</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mouse</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">dragThreshold</span>&gt;1&lt;/<span style="color: #000088; background-color: #DEDEDE;">dragThreshold</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> number of pixels the mouse must move before a drag begins </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">doubleClickTime</span>&gt;500&lt;/<span style="color: #000088; background-color: #DEDEDE;">doubleClickTime</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> in milliseconds (1000 = 1 second) </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">screenEdgeWarpTime</span>&gt;400&lt;/<span style="color: #000088; background-color: #DEDEDE;">screenEdgeWarpTime</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> Time before changing desktops when the pointer touches the edge of the</span>
<span style="color: #8D8D84; font-style: italic;"> screen while moving a window, in milliseconds (1000 = 1 second).</span>
<span style="color: #8D8D84; font-style: italic;"> Set this to 0 to disable warping </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">screenEdgeWarpMouse</span>&gt;false&lt;/<span style="color: #000088; background-color: #DEDEDE;">screenEdgeWarpMouse</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> Set this to TRUE to move the mouse pointer across the desktop when</span>
<span style="color: #8D8D84; font-style: italic;"> switching due to hitting the edge of the screen </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">context</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Frame</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">A-Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Press</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Focus</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Raise</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">A-Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Unshade</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">A-Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Drag</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Move</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">A-Right</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Press</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Focus</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Raise</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Unshade</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">A-Right</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Drag</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Resize</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">A-Middle</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Press</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Lower</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">FocusToBottom</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Unfocus</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">A-Up</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">GoToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;previous&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">A-Down</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">GoToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;next&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">C-A-Up</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">GoToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;previous&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">C-A-Down</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">GoToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;next&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">A-S-Up</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">SendToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;previous&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">A-S-Down</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">SendToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;next&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">context</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">context</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Titlebar</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Drag</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Move</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">DoubleClick</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">ToggleMaximize</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Up</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">if</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">shaded</span>&gt;no&lt;/<span style="color: #000088; background-color: #DEDEDE;">shaded</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">then</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Shade</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">FocusToBottom</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Unfocus</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Lower</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">then</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Down</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">if</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">shaded</span>&gt;yes&lt;/<span style="color: #000088; background-color: #DEDEDE;">shaded</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">then</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Unshade</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Raise</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">then</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">context</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">context</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Titlebar Top Right Bottom Left TLCorner TRCorner BRCorner BLCorner</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Press</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Focus</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Raise</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Unshade</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Middle</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Press</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Lower</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">FocusToBottom</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Unfocus</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Right</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Press</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Focus</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Raise</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">ShowMenu</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;client-menu&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">context</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">context</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Top</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Drag</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Resize</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">edge</span>&gt;top&lt;/<span style="color: #000088; background-color: #DEDEDE;">edge</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">context</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">context</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Left</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Drag</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Resize</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">edge</span>&gt;left&lt;/<span style="color: #000088; background-color: #DEDEDE;">edge</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">context</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">context</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Right</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Drag</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Resize</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">edge</span>&gt;right&lt;/<span style="color: #000088; background-color: #DEDEDE;">edge</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">context</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">context</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Bottom</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Drag</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Resize</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">edge</span>&gt;bottom&lt;/<span style="color: #000088; background-color: #DEDEDE;">edge</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Right</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Press</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Focus</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Raise</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">ShowMenu</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;client-menu&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">context</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">context</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">TRCorner BRCorner TLCorner BLCorner</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Press</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Focus</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Raise</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Unshade</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Drag</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Resize</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">context</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">context</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Client</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Press</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Focus</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Raise</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Middle</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Press</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Focus</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Raise</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Right</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Press</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Focus</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Raise</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">context</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">context</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Icon</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Press</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Focus</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Raise</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Unshade</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">ShowMenu</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;client-menu&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Right</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Press</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Focus</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Raise</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">ShowMenu</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;client-menu&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">context</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">context</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">AllDesktops</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Press</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Focus</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Raise</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Unshade</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">ToggleOmnipresent</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">context</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">context</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Shade</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Press</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Focus</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Raise</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">ToggleShade</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">context</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">context</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Iconify</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Press</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Focus</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Raise</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Iconify</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">context</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">context</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Maximize</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Press</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Focus</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Raise</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Unshade</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Middle</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Press</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Focus</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Raise</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Unshade</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Right</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Press</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Focus</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Raise</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Unshade</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">ToggleMaximize</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Middle</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">ToggleMaximize</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">direction</span>&gt;vertical&lt;/<span style="color: #000088; background-color: #DEDEDE;">direction</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Right</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">ToggleMaximize</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">direction</span>&gt;horizontal&lt;/<span style="color: #000088; background-color: #DEDEDE;">direction</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">context</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">context</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Close</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Press</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Focus</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Raise</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Unshade</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Close</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">context</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">context</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Desktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Up</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">GoToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;previous&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Down</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">GoToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;next&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">A-Up</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">GoToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;previous&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">A-Down</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">GoToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;next&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">C-A-Up</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">GoToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;previous&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">C-A-Down</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">GoToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;next&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Left</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Press</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Focus</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Raise</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Right</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Press</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Focus</span><span style="color: #008000;">"</span>/&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Raise</span><span style="color: #008000;">"</span>/&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">context</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">context</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Root</span><span style="color: #008000;">"</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> Menus </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Middle</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Press</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">ShowMenu</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;client-list-combined-menu&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Right</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Press</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">ShowMenu</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;root-menu&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">context</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">context</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">MoveResize</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Up</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">GoToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;previous&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Down</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">GoToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;next&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">A-Up</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">GoToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;previous&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mousebind</span> <span style="color: #BA36A5;">button</span>=<span style="color: #008000;">"</span><span style="color: #008000;">A-Down</span><span style="color: #008000;">"</span> <span style="color: #BA36A5;">action</span>=<span style="color: #008000;">"</span><span style="color: #008000;">Click</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">action</span> <span style="color: #BA36A5;">name</span>=<span style="color: #008000;">"</span><span style="color: #008000;">GoToDesktop</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;next&lt;/<span style="color: #000088; background-color: #DEDEDE;">to</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">action</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mousebind</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">context</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">mouse</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> You can specify more than one menu file in here and they are all loaded,</span>
<span style="color: #8D8D84; font-style: italic;"> just don't make menu ids clash or, well, it'll be kind of pointless </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> default menu file (or custom one in $HOME/.config/openbox/) </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> system menu files on Debian systems </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">file</span>&gt;/var/lib/openbox/debian-menu.xml&lt;/<span style="color: #000088; background-color: #DEDEDE;">file</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">file</span>&gt;menu.xml&lt;/<span style="color: #000088; background-color: #DEDEDE;">file</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">hideDelay</span>&gt;200&lt;/<span style="color: #000088; background-color: #DEDEDE;">hideDelay</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> if a press-release lasts longer than this setting (in milliseconds), the</span>
<span style="color: #8D8D84; font-style: italic;"> menu is hidden again </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">middle</span>&gt;no&lt;/<span style="color: #000088; background-color: #DEDEDE;">middle</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> center submenus vertically about the parent entry </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">submenuShowDelay</span>&gt;100&lt;/<span style="color: #000088; background-color: #DEDEDE;">submenuShowDelay</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> time to delay before showing a submenu after hovering over the parent</span>
<span style="color: #8D8D84; font-style: italic;"> entry.</span>
<span style="color: #8D8D84; font-style: italic;"> if this is a negative value, then the delay is infinite and the</span>
<span style="color: #8D8D84; font-style: italic;"> submenu will not be shown until it is clicked on </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">submenuHideDelay</span>&gt;400&lt;/<span style="color: #000088; background-color: #DEDEDE;">submenuHideDelay</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> time to delay before hiding a submenu when selecting another</span>
<span style="color: #8D8D84; font-style: italic;"> entry in parent menu</span>
<span style="color: #8D8D84; font-style: italic;"> if this is a negative value, then the delay is infinite and the</span>
<span style="color: #8D8D84; font-style: italic;"> submenu will not be hidden until a different submenu is opened </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">showIcons</span>&gt;yes&lt;/<span style="color: #000088; background-color: #DEDEDE;">showIcons</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> controls if icons appear in the client-list-(combined-)menu </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">manageDesktops</span>&gt;yes&lt;/<span style="color: #000088; background-color: #DEDEDE;">manageDesktops</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> show the manage desktops section in the client-list-(combined-)menu </span><span style="color: #8D8D84;">--&gt;</span>
&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span>
<span style="color: #8D8D84; font-style: italic;"> # this is an example with comments through out. use these to make your</span>
<span style="color: #8D8D84; font-style: italic;"> # own rules, but without the comments of course.</span>
<span style="color: #8D8D84; font-style: italic;"> # you may use one or more of the name/class/role/title/type rules to specify</span>
<span style="color: #8D8D84; font-style: italic;"> # windows to match</span>
<span style="color: #8D8D84; font-style: italic;"> &lt;application name="the window's _OB_APP_NAME property (see obxprop)"</span>
<span style="color: #8D8D84; font-style: italic;"> class="the window's _OB_APP_CLASS property (see obxprop)"</span>
<span style="color: #8D8D84; font-style: italic;"> groupname="the window's _OB_APP_GROUP_NAME property (see obxprop)"</span>
<span style="color: #8D8D84; font-style: italic;"> groupclass="the window's _OB_APP_GROUP_CLASS property (see obxprop)"</span>
<span style="color: #8D8D84; font-style: italic;"> role="the window's _OB_APP_ROLE property (see obxprop)"</span>
<span style="color: #8D8D84; font-style: italic;"> title="the window's _OB_APP_TITLE property (see obxprop)"</span>
<span style="color: #8D8D84; font-style: italic;"> type="the window's _OB_APP_TYPE property (see obxprob)..</span>
<span style="color: #8D8D84; font-style: italic;"> (if unspecified, then it is 'dialog' for child windows)"&gt;</span>
<span style="color: #8D8D84; font-style: italic;"> # you may set only one of name/class/role/title/type, or you may use more</span>
<span style="color: #8D8D84; font-style: italic;"> # than one together to restrict your matches.</span>
<span style="color: #8D8D84; font-style: italic;"> # the name, class, role, and title use simple wildcard matching such as those</span>
<span style="color: #8D8D84; font-style: italic;"> # used by a shell. you can use * to match any characters and ? to match</span>
<span style="color: #8D8D84; font-style: italic;"> # any single character.</span>
<span style="color: #8D8D84; font-style: italic;"> # the type is one of: normal, dialog, splash, utility, menu, toolbar, dock,</span>
<span style="color: #8D8D84; font-style: italic;"> # or desktop</span>
<span style="color: #8D8D84; font-style: italic;"> # when multiple rules match a window, they will all be applied, in the</span>
<span style="color: #8D8D84; font-style: italic;"> # order that they appear in this list</span>
<span style="color: #8D8D84; font-style: italic;"> # each rule element can be left out or set to 'default' to specify to not </span>
<span style="color: #8D8D84; font-style: italic;"> # change that attribute of the window</span>
<span style="color: #8D8D84; font-style: italic;"> &lt;decor&gt;yes&lt;/decor&gt;</span>
<span style="color: #8D8D84; font-style: italic;"> # enable or disable window decorations</span>
<span style="color: #8D8D84; font-style: italic;"> &lt;shade&gt;no&lt;/shade&gt;</span>
<span style="color: #8D8D84; font-style: italic;"> # make the window shaded when it appears, or not</span>
<span style="color: #8D8D84; font-style: italic;"> &lt;position force="no"&gt;</span>
<span style="color: #8D8D84; font-style: italic;"> # the position is only used if both an x and y coordinate are provided</span>
<span style="color: #8D8D84; font-style: italic;"> # (and not set to 'default')</span>
<span style="color: #8D8D84; font-style: italic;"> # when force is "yes", then the window will be placed here even if it</span>
<span style="color: #8D8D84; font-style: italic;"> # says you want it placed elsewhere. this is to override buggy</span>
<span style="color: #8D8D84; font-style: italic;"> # applications who refuse to behave</span>
<span style="color: #8D8D84; font-style: italic;"> &lt;x&gt;center&lt;/x&gt;</span>
<span style="color: #8D8D84; font-style: italic;"> # a number like 50, or 'center' to center on screen. use a negative number</span>
<span style="color: #8D8D84; font-style: italic;"> # to start from the right (or bottom for &lt;y&gt;), ie -50 is 50 pixels from</span>
<span style="color: #8D8D84; font-style: italic;"> # the right edge (or bottom). use 'default' to specify using value</span>
<span style="color: #8D8D84; font-style: italic;"> # provided by the application, or chosen by openbox, instead.</span>
<span style="color: #8D8D84; font-style: italic;"> &lt;y&gt;200&lt;/y&gt;</span>
<span style="color: #8D8D84; font-style: italic;"> &lt;monitor&gt;1&lt;/monitor&gt;</span>
<span style="color: #8D8D84; font-style: italic;"> # specifies the monitor in a xinerama setup.</span>
<span style="color: #8D8D84; font-style: italic;"> # 1 is the first head, or 'mouse' for wherever the mouse is</span>
<span style="color: #8D8D84; font-style: italic;"> &lt;/position&gt;</span>
<span style="color: #8D8D84; font-style: italic;"> &lt;size&gt;</span>
<span style="color: #8D8D84; font-style: italic;"> # the size to make the window.</span>
<span style="color: #8D8D84; font-style: italic;"> &lt;width&gt;20&lt;/width&gt;</span>
<span style="color: #8D8D84; font-style: italic;"> # a number like 20, or 'default' to use the size given by the application.</span>
<span style="color: #8D8D84; font-style: italic;"> # you can use fractions such as 1/2 or percentages such as 75% in which</span>
<span style="color: #8D8D84; font-style: italic;"> # case the value is relative to the size of the monitor that the window</span>
<span style="color: #8D8D84; font-style: italic;"> # appears on.</span>
<span style="color: #8D8D84; font-style: italic;"> &lt;height&gt;30%&lt;/height&gt;</span>
<span style="color: #8D8D84; font-style: italic;"> &lt;/size&gt;</span>
<span style="color: #8D8D84; font-style: italic;"> &lt;focus&gt;yes&lt;/focus&gt;</span>
<span style="color: #8D8D84; font-style: italic;"> # if the window should try be given focus when it appears. if this is set</span>
<span style="color: #8D8D84; font-style: italic;"> # to yes it doesn't guarantee the window will be given focus. some</span>
<span style="color: #8D8D84; font-style: italic;"> # restrictions may apply, but Openbox will try to</span>
<span style="color: #8D8D84; font-style: italic;"> &lt;desktop&gt;1&lt;/desktop&gt;</span>
<span style="color: #8D8D84; font-style: italic;"> # 1 is the first desktop, 'all' for all desktops</span>
<span style="color: #8D8D84; font-style: italic;"> &lt;layer&gt;normal&lt;/layer&gt;</span>
<span style="color: #8D8D84; font-style: italic;"> # 'above', 'normal', or 'below'</span>
<span style="color: #8D8D84; font-style: italic;"> &lt;iconic&gt;no&lt;/iconic&gt;</span>
<span style="color: #8D8D84; font-style: italic;"> # make the window iconified when it appears, or not</span>
<span style="color: #8D8D84; font-style: italic;"> &lt;skip_pager&gt;no&lt;/skip_pager&gt;</span>
<span style="color: #8D8D84; font-style: italic;"> # asks to not be shown in pagers</span>
<span style="color: #8D8D84; font-style: italic;"> &lt;skip_taskbar&gt;no&lt;/skip_taskbar&gt;</span>
<span style="color: #8D8D84; font-style: italic;"> # asks to not be shown in taskbars. window cycling actions will also</span>
<span style="color: #8D8D84; font-style: italic;"> # skip past such windows</span>
<span style="color: #8D8D84; font-style: italic;"> &lt;fullscreen&gt;yes&lt;/fullscreen&gt;</span>
<span style="color: #8D8D84; font-style: italic;"> # make the window in fullscreen mode when it appears</span>
<span style="color: #8D8D84; font-style: italic;"> &lt;maximized&gt;true&lt;/maximized&gt;</span>
<span style="color: #8D8D84; font-style: italic;"> # 'Horizontal', 'Vertical' or boolean (yes/no)</span>
<span style="color: #8D8D84; font-style: italic;"> &lt;/application&gt;</span>
<span style="color: #8D8D84; font-style: italic;"> # end of the example</span>
<span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">applications</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">application</span> <span style="color: #BA36A5;">title</span>=<span style="color: #008000;">"</span><span style="color: #008000;">softhddevice</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">decor</span>&gt;no&lt;/<span style="color: #000088; background-color: #DEDEDE;">decor</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">maximized</span>&gt;true&lt;/<span style="color: #000088; background-color: #DEDEDE;">maximized</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;">&lt;skip_pager&gt;yes&lt;/skip_pager&gt;</span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">skip_taskbar</span>&gt;no&lt;/<span style="color: #000088; background-color: #DEDEDE;">skip_taskbar</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">application</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">application</span> <span style="color: #BA36A5;">title</span>=<span style="color: #008000;">"</span><span style="color: #008000;">browser</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">decor</span>&gt;no&lt;/<span style="color: #000088; background-color: #DEDEDE;">decor</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">maximized</span>&gt;true&lt;/<span style="color: #000088; background-color: #DEDEDE;">maximized</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;">&lt;skip_pager&gt;yes&lt;/skip_pager&gt;</span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">skip_taskbar</span>&gt;yes&lt;/<span style="color: #000088; background-color: #DEDEDE;">skip_taskbar</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">application</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">application</span> <span style="color: #BA36A5;">title</span>=<span style="color: #008000;">"</span><span style="color: #008000;">osd2Web</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">decor</span>&gt;no&lt;/<span style="color: #000088; background-color: #DEDEDE;">decor</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">maximized</span>&gt;true&lt;/<span style="color: #000088; background-color: #DEDEDE;">maximized</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;">&lt;skip_pager&gt;yes&lt;/skip_pager&gt;</span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">skip_taskbar</span>&gt;yes&lt;/<span style="color: #000088; background-color: #DEDEDE;">skip_taskbar</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">application</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">applications</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">openbox_config</span>&gt;
</pre>
</div>
</div></li></ol></li></ol>
</div>
</div>
<div id="outline-container-org98b4849" class="outline-3">
<h3 id="org98b4849"><span class="section-number-3">8.10</span> samba-install</h3>
<div class="outline-text-3" id="text-8-10">
</div><div id="outline-container-orgcce73c5" class="outline-4">
<h4 id="orgcce73c5"><span class="section-number-4">8.10.1</span> tasks</h4>
<div class="outline-text-4" id="text-8-10-1">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84; font-style: italic;">---</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">file: roles/samba-install/tasks/main.yml</span>
- <span style="color: #BA36A5;">name</span>: install samba server
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">name</span>: <span style="color: #008000;">'{{ item }}'</span>
<span style="color: #BA36A5;">state</span>: present
<span style="color: #BA36A5;">install_recommends</span>: <span style="color: #D0372D;">no</span>
<span style="color: #BA36A5;">with_items</span>:
- samba
- samba-common
- samba-common-bin
- tdb-tools
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgf007f43" class="outline-3">
<h3 id="orgf007f43"><span class="section-number-3">8.11</span> samba-config</h3>
<div class="outline-text-3" id="text-8-11">
</div><div id="outline-container-org2061752" class="outline-4">
<h4 id="org2061752"><span class="section-number-4">8.11.1</span> tasks</h4>
<div class="outline-text-4" id="text-8-11-1">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84; font-style: italic;">---</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">file: roles/samba-config/tasks/main.yml</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">TODO:</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">- name: divert original smbd.conf</span>
- <span style="color: #BA36A5;">name</span>: touch smb.conf.custom
<span style="color: #BA36A5;">file</span>:
<span style="color: #BA36A5;">state</span>: touch
<span style="color: #BA36A5;">dest</span>: <span style="color: #008000;">'/etc/samba/smb.conf.custom'</span>
<span style="color: #BA36A5;">notify</span>: [ <span style="color: #008000;">'Restart Samba'</span> ]
- <span style="color: #BA36A5;">name</span>: expand template for smb.conf
<span style="color: #BA36A5;">template</span>:
<span style="color: #BA36A5;">src</span>: <span style="color: #008000;">'templates/smb.conf.j2'</span>
<span style="color: #BA36A5;">dest</span>: <span style="color: #008000;">'/etc/samba/smb.conf'</span>
<span style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">validate: 'testparm -s %s'</span>
<span style="color: #BA36A5;">notify</span>: [ <span style="color: #008000;">'Restart Samba'</span> ]
</pre>
</div>
</div>
</div>
<div id="outline-container-org01065c5" class="outline-4">
<h4 id="org01065c5"><span class="section-number-4">8.11.2</span> templates</h4>
<div class="outline-text-4" id="text-8-11-2">
</div><ol class="org-ol"><li><a id="org38a0b17"></a>smb.conf<br /><ol class="org-ol"><li><a id="orgaf97396"></a>global settings<br /><div class="outline-text-6" id="text-8-11-2-1-1">
<div class="org-src-container">
<pre class="src src-yaml">{{ ansible_managed_file | comment }}
<span style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">======================= Global Settings =======================</span>
[global]
<span style="color: #8D8D84;">## </span><span style="color: #8D8D84; font-style: italic;">Browsing/Identification ###</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Change this to the workgroup/NT-domain name your Samba server will part of</span>
workgroup = {{ samba.workgroup }}
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">server string is the equivalent of the NT Description field</span>
server string = %h server (Samba, Ubuntu)
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">This will prevent nmbd to search for NetBIOS names through DNS.</span>
dns proxy = no
<span style="color: #8D8D84;">#### </span><span style="color: #8D8D84; font-style: italic;">Debugging/Accounting ####</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">This tells Samba to use a separate log file for each machine</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">that connects</span>
log file = /var/log/samba/log.%m
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Cap the size of the individual log files (in KiB).</span>
max log size = 1000
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">We want Samba to log a minimum amount of information to syslog. Everything</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">should go to /var/log/samba/log.{smbd,nmbd} instead. If you want to log</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">through syslog you should set the following parameter to something higher.</span>
syslog = 0
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Do something sensible when Samba crashes: mail the admin a backtrace</span>
panic action = /usr/share/samba/panic-action %d
<span style="color: #8D8D84;">####### </span><span style="color: #8D8D84; font-style: italic;">Authentication #######</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">"security = user" is always a good idea. This will require a Unix account</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">in this server for every user accessing the server. See</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">/usr/share/doc/samba-doc/htmldocs/Samba3-HOWTO/ServerType.html</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">in the samba-doc package for details.</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">security = user</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">You may wish to use password encryption. See the section on</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">'encrypt passwords' in the smb.conf(5) manpage before enabling.</span>
encrypt passwords = true
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">If you are using encrypted passwords, Samba will need to know what</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">password database type you are using. </span>
passdb backend = tdbsam
obey pam restrictions = yes
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">This boolean parameter controls whether Samba attempts to sync the Unix</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">password with the SMB password when the encrypted SMB password in the</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">passdb is changed.</span>
unix password sync = yes
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">For Unix password sync to work on a Debian GNU/Linux system, the following</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">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 style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">sending the correct chat script for the passwd program in Debian Sarge).</span>
passwd program = /usr/bin/passwd %u
passwd chat = <span style="color: #006699;">*Enter</span>\snew\s*\spassword:* %n\n <span style="color: #006699;">*Retype</span>\snew\s*\spassword:* %n\n <span style="color: #006699;">*password</span>\supdated\ssuccessfully* .
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">This boolean controls whether PAM will be used for password changes</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">when requested by an SMB client instead of the program listed in</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">'passwd program'. The default is 'no'.</span>
pam password change = yes
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">This option controls how unsuccessful authentication attempts are mapped </span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">to anonymous connections</span>
map to guest = bad user
{% if samba.windows_compatible %}
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">disable unix extensions and enable following symlinks</span>
unix extensions = no
follow symlinks= yes
wide links= yes
{% endif %}
</pre>
</div>
</div></li>
<li><a id="orgd52f563"></a>media directories<br /><div class="outline-text-6" id="text-8-11-2-1-2">
<div class="org-src-container">
<pre class="src src-yaml">{% for name, path in media_dirs.iteritems() %}
[{{ name }}]
path = {{ path }}
comment = {{ name }} on %h
guest ok = yes
writeable = yes
browseable = yes
create mode = 0664
directory mode = 0775
force user = {{ vdr.user }}
force group = {{ vdr.group }}
follow symlinks = yes
wide links = yes
{% endfor %}
</pre>
</div>
</div></li>
<li><a id="org2d4c480"></a>include custom samba exports<br /><div class="outline-text-6" id="text-8-11-2-1-3">
<div class="org-src-container">
<pre class="src src-yaml">include = /etc/samba/smb.conf.custom
</pre>
</div>
</div></li></ol></li></ol>
</div>
</div>
<div id="outline-container-org681bc44" class="outline-3">
<h3 id="org681bc44"><span class="section-number-3">8.12</span> <span class="todo STARTED">STARTED</span> autoinstall-drivers</h3>
<div class="outline-text-3" id="text-8-12">
<p>
It would be nice to be able to detect if it is suitable to install those drivers:
</p>
</div>
<div id="outline-container-org7a93da3" class="outline-4">
<h4 id="org7a93da3"><span class="section-number-4">8.12.1</span> <span class="todo TODO">TODO</span> sundtek for Sundtek devices (local or network connection)</h4>
<div class="outline-text-4" id="text-8-12-1">
<p>
Vendor-IDs:
</p>
<ul class="org-ul">
<li>eb1a:5[1b2] (alte Generation)</li>
<li>2659:* (neuere Sticks)</li>
</ul>
</div>
</div>
<div id="outline-container-org76855cd" class="outline-4">
<h4 id="org76855cd"><span class="section-number-4">8.12.2</span> <span class="todo TODO">TODO</span> dddvb-dkms if only newer DD cards are detected</h4>
</div>
<div id="outline-container-org513868e" class="outline-4">
<h4 id="org513868e"><span class="section-number-4">8.12.3</span> <span class="todo TODO">TODO</span> media-build-experimental (up to kernel 4.8) for &bdquo;old&ldquo; cards like TT S2-6400 FF</h4>
</div>
<div id="outline-container-org6b176ba" class="outline-4">
<h4 id="org6b176ba"><span class="section-number-4">8.12.4</span> <span class="todo TODO">TODO</span> newly merged DD drivers</h4>
<div class="outline-text-4" id="text-8-12-4">
<p>
from <a href="http://www.vdr-portal.de/board18-vdr-hardware/board102-dvb-karten/120817-treiber-der-cine-ctv6-ddbridge-ci-in-den-kernel-integrieren/">http://www.vdr-portal.de/board18-vdr-hardware/board102-dvb-karten/120817-treiber-der-cine-ctv6-ddbridge-ci-in-den-kernel-integrieren/</a>
</p>
</div>
</div>
</div>
<div id="outline-container-org9fbb77f" class="outline-3">
<h3 id="org9fbb77f"><span class="section-number-3">8.13</span> autoinstall-ubuntu-drivers</h3>
<div class="outline-text-3" id="text-8-13">
<p>
The tool ubuntu-drivers is used to install the matching driver version for nvidia graphics cards, virtualbox guest additions and Intel and AMD microcode updates.
</p>
</div>
<div id="outline-container-org58a3e53" class="outline-4">
<h4 id="org58a3e53"><span class="section-number-4">8.13.1</span> tasks</h4>
<div class="outline-text-4" id="text-8-13-1">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84; font-style: italic;">---</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">file roles/autoinstall-ubuntu-drivers/tasks/main.yml</span>
- <span style="color: #BA36A5;">name</span>: apt | install ubuntu-drivers-common
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">name</span>: ubuntu-drivers-common
<span style="color: #BA36A5;">state</span>: present
- <span style="color: #BA36A5;">name</span>: ensure /etc/yavdr exists
<span style="color: #BA36A5;">file</span>:
<span style="color: #BA36A5;">path</span>: /etc/yavdr
<span style="color: #BA36A5;">state</span>: directory
<span style="color: #BA36A5;">mode</span>: 0755
- <span style="color: #BA36A5;">name</span>: let ubuntu-drivers automatically install additional drivers
<span style="color: #BA36A5;">command</span>: ubuntu-drivers --package-list /etc/yavdr/autoinstalled autoinstall
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org0f11154" class="outline-3">
<h3 id="org0f11154"><span class="section-number-3">8.14</span> autoinstall-satip</h3>
<div class="outline-text-3" id="text-8-14">
<p>
If a Sat&gt;IP Server responds to a discovery request, the package vdr-plugin-satip is installed.
</p>
</div>
<div id="outline-container-orgd42b084" class="outline-4">
<h4 id="orgd42b084"><span class="section-number-4">8.14.1</span> tasks</h4>
<div class="outline-text-4" id="text-8-14-1">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84; font-style: italic;">---</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">file roles/autoinstall-satip/tasks/main.yml</span>
- <span style="color: #BA36A5;">name</span>: <span style="color: #008000;">"detect SAT&gt;IP Server(s) on the network"</span>
<span style="color: #BA36A5;">action</span>: satip_facts
- <span style="color: #BA36A5;">debug</span>:
<span style="color: #BA36A5;">var</span>: satip_detected
<span style="color: #BA36A5;">verbosity</span>: 1
- <span style="color: #BA36A5;">name</span>: apt | install vdr-plugin-satip if a Sat&gt;IP server has been detected
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">name</span>: vdr-plugin-satip
<span style="color: #BA36A5;">when</span>: satip_detected
<span style="color: #BA36A5;">notify</span>: [ <span style="color: #008000;">'Restart VDR'</span> ]
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org6af150c" class="outline-3">
<h3 id="org6af150c"><span class="section-number-3">8.15</span> autoinstall-targavfd</h3>
<div class="outline-text-3" id="text-8-15">
</div><div id="outline-container-orgd699a60" class="outline-4">
<h4 id="orgd699a60"><span class="section-number-4">8.15.1</span> tasks</h4>
<div class="outline-text-4" id="text-8-15-1">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84; font-style: italic;">---</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">file roles/autoinstall-targavfd/tasks/main.yml</span>
- <span style="color: #BA36A5;">name</span>: apt | install vdr-plugin-targavfd if connected
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">name</span>: vdr-plugin-targavfd
<span style="color: #BA36A5;">when</span>:
- <span style="color: #008000;">'"19c2:6a11" in usb'</span>
<span style="color: #BA36A5;">notify</span>: [ <span style="color: #008000;">'Restart VDR'</span> ]
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org31d2637" class="outline-3">
<h3 id="org31d2637"><span class="section-number-3">8.16</span> autoinstall-imonlcd</h3>
<div class="outline-text-3" id="text-8-16">
</div><div id="outline-container-org0c45f82" class="outline-4">
<h4 id="org0c45f82"><span class="section-number-4">8.16.1</span> tasks</h4>
<div class="outline-text-4" id="text-8-16-1">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84; font-style: italic;">---</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">file roles/autoinstall-imonlcd/tasks/main.yml</span>
- <span style="color: #BA36A5;">name</span>: apt | install vdr-plugin-imonlcd if connected
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">name</span>: vdr-plugin-imonlcd
<span style="color: #BA36A5;">when</span>:
- <span style="color: #008000;">'"15c2:0038" in usb'</span>
- <span style="color: #008000;">'"15c2:ffdc" in usb'</span>
<span style="color: #BA36A5;">notify</span>: [ <span style="color: #008000;">'Restart VDR'</span> ]
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org89e031a" class="outline-3">
<h3 id="org89e031a"><span class="section-number-3">8.17</span> autoinstall-libcecdaemon</h3>
<div class="outline-text-3" id="text-8-17">
</div><div id="outline-container-org3e26e81" class="outline-4">
<h4 id="org3e26e81"><span class="section-number-4">8.17.1</span> tasks</h4>
<div class="outline-text-4" id="text-8-17-1">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84; font-style: italic;">---</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">file roles/autoinstall-libcec-daemon/tasks/main.yml</span>
- <span style="color: #BA36A5;">name</span>: apt | install libcec-daemon if connected
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">name</span>: libcec-daemon
<span style="color: #BA36A5;">when</span>:
- <span style="color: #008000;">'"2548:1002" in usb'</span>
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org4c3c08c" class="outline-3">
<h3 id="org4c3c08c"><span class="section-number-3">8.18</span> autoinstall-pvr350</h3>
<div class="outline-text-3" id="text-8-18">
</div><div id="outline-container-org1bf551d" class="outline-4">
<h4 id="org1bf551d"><span class="section-number-4">8.18.1</span> tasks</h4>
<div class="outline-text-4" id="text-8-18-1">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84; font-style: italic;">---</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">file roles/autoinstall-pvr350/tasks/main.yml</span>
- <span style="color: #BA36A5;">name</span>: apt | install vdr-plugin-pvr350 if connected
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">name</span>: vdr-plugin-pvr350
<span style="color: #BA36A5;">when</span>:
- <span style="color: #008000;">'"0070:4000" in pci'</span>
<span style="color: #BA36A5;">notify</span>: [ <span style="color: #008000;">'Restart VDR'</span> ]
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org586ee61" class="outline-3">
<h3 id="org586ee61"><span class="section-number-3">8.19</span> <span class="todo TODO">TODO</span> autoinstall-dvbhddevice</h3>
<div class="outline-text-3" id="text-8-19">
<p>
Problem: woher kommt der Treiber (AFAIK noch nicht im Kernel)? Die Firmware sollte in yavdr-firmware stecken
</p>
</div>
<div id="outline-container-orgedd8aa3" class="outline-4">
<h4 id="orgedd8aa3"><span class="section-number-4">8.19.1</span> tasks</h4>
<div class="outline-text-4" id="text-8-19-1">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84; font-style: italic;">---</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">file roles/autoinstall-dvbhddevice/tasks/main.yml</span>
- <span style="color: #BA36A5;">name</span>: apt | install vdr-plugin-dvbhddevice if connected
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">name</span>: vdr-plugin-dvbhddevice
<span style="color: #BA36A5;">when</span>:
- <span style="color: #008000;">'"13c2:300a" in pci'</span>
- <span style="color: #008000;">'"13c2:300b" in pci'</span>
<span style="color: #BA36A5;">notify</span>: [ <span style="color: #008000;">'Restart VDR'</span> ]
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgc3f3ee3" class="outline-3">
<h3 id="orgc3f3ee3"><span class="section-number-3">8.20</span> autoinstall-dvbsddevice</h3>
<div class="outline-text-3" id="text-8-20">
</div><div id="outline-container-org6b9b52a" class="outline-4">
<h4 id="org6b9b52a"><span class="section-number-4">8.20.1</span> tasks</h4>
<div class="outline-text-4" id="text-8-20-1">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84; font-style: italic;">---</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">file roles/autoinstall-dvbsddevice/tasks/main.yml</span>
- <span style="color: #BA36A5;">name</span>: apt | install vdr-plugin-dvbsddevice if module is loaded
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">name</span>: vdr-plugin-dvbsddevice
<span style="color: #BA36A5;">when</span>:
- <span style="color: #008000;">'"dvb_ttpci" in modules'</span>
<span style="color: #BA36A5;">notify</span>: [ <span style="color: #008000;">'Restart VDR'</span> ]
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org68417c3" class="outline-3">
<h3 id="org68417c3"><span class="section-number-3">8.21</span> kodi</h3>
<div class="outline-text-3" id="text-8-21">
</div><div id="outline-container-orgee0bf4d" class="outline-4">
<h4 id="orgee0bf4d"><span class="section-number-4">8.21.1</span> tasks</h4>
<div class="outline-text-4" id="text-8-21-1">
</div><ol class="org-ol"><li><a id="org251d10b"></a>Install KODI<br /><div class="outline-text-5" id="text-8-21-1-1">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84; font-style: italic;">---</span>
- <span style="color: #BA36A5;">name</span>: apt | install kodi packages
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">name</span>: <span style="color: #008000;">'{{ item }}'</span>
<span style="color: #BA36A5;">state</span>: present
<span style="color: #BA36A5;">install_recommends</span>: <span style="color: #D0372D;">no</span>
<span style="color: #BA36A5;">with_items</span>:
- kodi
- kodi-pvr-vdr-vnsi
- kodi-eventclients-xbmc-send
- <span style="color: #BA36A5;">name</span>: create kodi.service for the user session
<span style="color: #BA36A5;">template</span>:
<span style="color: #BA36A5;">src</span>: <span style="color: #008000;">'templates/kodi.service.j2'</span>
<span style="color: #BA36A5;">dest</span>: <span style="color: #008000;">'{{ vdr.home }}/.config/systemd/user/kodi.service'</span>
<span style="color: #BA36A5;">mode</span>: 0755
<span style="color: #BA36A5;">owner</span>: <span style="color: #008000;">'{{ vdr.user }}'</span>
<span style="color: #BA36A5;">group</span>: <span style="color: #008000;">'{{ vdr.group }}'</span>
- <span style="color: #BA36A5;">name</span>: create kodi user directory
<span style="color: #BA36A5;">file</span>:
<span style="color: #BA36A5;">dest</span>: <span style="color: #008000;">'{{ vdr.home }}/{{ item }}'</span>
<span style="color: #BA36A5;">state</span>: directory
<span style="color: #BA36A5;">owner</span>: <span style="color: #008000;">'{{ vdr.user }}'</span>
<span style="color: #BA36A5;">group</span>: <span style="color: #008000;">'{{ vdr.group }}'</span>
<span style="color: #BA36A5;">mode</span>: <span style="color: #008000;">"0775"</span>
<span style="color: #BA36A5;">with_items</span>:
- .kodi
- .kodi/userdata
- .kodi/userdata/keymaps
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">TODO: Add configuration files</span>
</pre>
</div>
</div></li></ol>
</div>
<div id="outline-container-orgad03d20" class="outline-4">
<h4 id="orgad03d20"><span class="section-number-4">8.21.2</span> templates</h4>
<div class="outline-text-4" id="text-8-21-2">
</div><ol class="org-ol"><li><a id="org52d7f05"></a>kodi.service<br /><div class="outline-text-5" id="text-8-21-2-1">
<div class="org-src-container">
<pre class="src src-conf">[<span style="color: #6434A3;">Unit</span>]
<span style="color: #BA36A5;">Description</span>=Start kodi in user session
[<span style="color: #6434A3;">Service</span>]
<span style="color: #BA36A5;">Type</span>=simple
<span style="color: #BA36A5;">PassEnvironment</span>=DISPLAY XDG_RUNTIME_DIR DBUS_SESSION_BUS_ADDRESS
<span style="color: #BA36A5;">ExecStartPre</span>=-/usr/bin/set-kodi-display
<span style="color: #BA36A5;">ExecStart</span>=/usr/bin/kodi
<span style="color: #BA36A5;">ExecStop</span>=/bin/bash -c <span style="color: #008000;">"/usr/bin/kodi-send --action=QUIT; while /usr/bin/pgrep kodi; do sleep 1; done; sleep 1"</span>
<span style="color: #BA36A5;">TimeoutStopSec</span>=10
<span style="color: #BA36A5;">SuccessExitStatus</span>=0 127
<span style="color: #BA36A5;">Restart</span>=on-failure
</pre>
</div>
</div></li></ol>
</div>
<div id="outline-container-org55d3a2e" class="outline-4">
<h4 id="org55d3a2e"><span class="section-number-4">8.21.3</span> files</h4>
<div class="outline-text-4" id="text-8-21-3">
</div><ol class="org-ol"><li><a id="orgfefecec"></a>Lircmap.xml<br /><div class="outline-text-5" id="text-8-21-3-1">
<div class="org-src-container">
<pre class="src src-xml">&lt;<span style="color: #000088; background-color: #DEDEDE;">lircmap</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span> <span style="color: #BA36A5;">device</span>=<span style="color: #008000;">"</span><span style="color: #008000;">linux-input-layer</span><span style="color: #008000;">"</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">altname</span>&gt;cx23885_remote&lt;/<span style="color: #000088; background-color: #DEDEDE;">altname</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">altname</span>&gt;devinput&lt;/<span style="color: #000088; background-color: #DEDEDE;">altname</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">up</span>&gt;KEY_UP&lt;/<span style="color: #000088; background-color: #DEDEDE;">up</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">down</span>&gt;KEY_DOWN&lt;/<span style="color: #000088; background-color: #DEDEDE;">down</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;KEY_MENU&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">select</span>&gt;KEY_OK&lt;/<span style="color: #000088; background-color: #DEDEDE;">select</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;KEY_ESC&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">left</span>&gt;KEY_LEFT&lt;/<span style="color: #000088; background-color: #DEDEDE;">left</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">right</span>&gt;KEY_RIGHT&lt;/<span style="color: #000088; background-color: #DEDEDE;">right</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">red</span>&gt;KEY_RED&lt;/<span style="color: #000088; background-color: #DEDEDE;">red</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">green</span>&gt;KEY_GREEN&lt;/<span style="color: #000088; background-color: #DEDEDE;">green</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">yellow</span>&gt;KEY_YELLOW&lt;/<span style="color: #000088; background-color: #DEDEDE;">yellow</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">blue</span>&gt;KEY_BLUE&lt;/<span style="color: #000088; background-color: #DEDEDE;">blue</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;KEY_0&lt;/<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">one</span>&gt;KEY_1&lt;/<span style="color: #000088; background-color: #DEDEDE;">one</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">two</span>&gt;KEY_2&lt;/<span style="color: #000088; background-color: #DEDEDE;">two</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">three</span>&gt;KEY_3&lt;/<span style="color: #000088; background-color: #DEDEDE;">three</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">four</span>&gt;KEY_4&lt;/<span style="color: #000088; background-color: #DEDEDE;">four</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">five</span>&gt;KEY_5&lt;/<span style="color: #000088; background-color: #DEDEDE;">five</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">six</span>&gt;KEY_6&lt;/<span style="color: #000088; background-color: #DEDEDE;">six</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">seven</span>&gt;KEY_7&lt;/<span style="color: #000088; background-color: #DEDEDE;">seven</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">eight</span>&gt;KEY_8&lt;/<span style="color: #000088; background-color: #DEDEDE;">eight</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">nine</span>&gt;KEY_9&lt;/<span style="color: #000088; background-color: #DEDEDE;">nine</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;KEY_INFO&lt;/<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">play</span>&gt;KEY_PLAY&lt;/<span style="color: #000088; background-color: #DEDEDE;">play</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">play</span>&gt;KEY_PLAYPAUSE&lt;/<span style="color: #000088; background-color: #DEDEDE;">play</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">pause</span>&gt;KEY_PAUSE&lt;/<span style="color: #000088; background-color: #DEDEDE;">pause</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">stop</span>&gt;KEY_STOP&lt;/<span style="color: #000088; background-color: #DEDEDE;">stop</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">record</span>&gt;KEY_RECORD&lt;/<span style="color: #000088; background-color: #DEDEDE;">record</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">forward</span>&gt;KEY_FASTFORWARD&lt;/<span style="color: #000088; background-color: #DEDEDE;">forward</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">reverse</span>&gt;KEY_REWIND&lt;/<span style="color: #000088; background-color: #DEDEDE;">reverse</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">skipplus</span>&gt;KEY_NEXT&lt;/<span style="color: #000088; background-color: #DEDEDE;">skipplus</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">skipminus</span>&gt;KEY_BACK&lt;/<span style="color: #000088; background-color: #DEDEDE;">skipminus</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">power</span>&gt;KEY_POWER2&lt;/<span style="color: #000088; background-color: #DEDEDE;">power</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">channelplus</span>&gt;KEY_CHANNELUP&lt;/<span style="color: #000088; background-color: #DEDEDE;">channelplus</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">channelminus</span>&gt;KEY_CHANNELDOWN&lt;/<span style="color: #000088; background-color: #DEDEDE;">channelminus</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">title</span>&gt;KEY_PROG3&lt;/<span style="color: #000088; background-color: #DEDEDE;">title</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">volumeplus</span>&gt;KEY_VOLUMEUP&lt;/<span style="color: #000088; background-color: #DEDEDE;">volumeplus</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">volumeminus</span>&gt;KEY_VOLUMEDOWN&lt;/<span style="color: #000088; background-color: #DEDEDE;">volumeminus</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">teletext</span>&gt;KEY_TEXT&lt;/<span style="color: #000088; background-color: #DEDEDE;">teletext</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mute</span>&gt;KEY_MUTE&lt;/<span style="color: #000088; background-color: #DEDEDE;">mute</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">start</span>&gt;KEY_SELECT&lt;/<span style="color: #000088; background-color: #DEDEDE;">start</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">subtitle</span>&gt;KEY_SUBTITLE&lt;/<span style="color: #000088; background-color: #DEDEDE;">subtitle</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">audio</span>&gt;KEY_MODE&lt;/<span style="color: #000088; background-color: #DEDEDE;">audio</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mute</span>&gt;KEY_MUTE&lt;/<span style="color: #000088; background-color: #DEDEDE;">mute</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">myvideo</span>&gt;KEY_VIDEO&lt;/<span style="color: #000088; background-color: #DEDEDE;">myvideo</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mymusic</span>&gt;KEY_AUDIO&lt;/<span style="color: #000088; background-color: #DEDEDE;">mymusic</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mypictures</span>&gt;KEY_IMAGES&lt;/<span style="color: #000088; background-color: #DEDEDE;">mypictures</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">recordedtv</span>&gt;KEY_PVR&lt;/<span style="color: #000088; background-color: #DEDEDE;">recordedtv</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">guide</span>&gt;KEY_EPG&lt;/<span style="color: #000088; background-color: #DEDEDE;">guide</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">display</span>&gt;KEY_SCREEN&lt;/<span style="color: #000088; background-color: #DEDEDE;">display</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">enter</span>&gt;KEY_PROG4&lt;/<span style="color: #000088; background-color: #DEDEDE;">enter</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">playlist</span>&gt;KEY_ZOOM&lt;/<span style="color: #000088; background-color: #DEDEDE;">playlist</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">livetv</span>&gt;KEY_CHANNEL&lt;/<span style="color: #000088; background-color: #DEDEDE;">livetv</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mytv</span>&gt;KEY_TV&lt;/<span style="color: #000088; background-color: #DEDEDE;">mytv</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">liveradio</span>&gt;KEY_FN&lt;/<span style="color: #000088; background-color: #DEDEDE;">liveradio</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">lircmap</span>&gt;
</pre>
</div>
</div></li>
<li><a id="org3568cbf"></a>keymaps<br /><ol class="org-ol"><li><a id="org8a23f23"></a>remote.xml<br /><div class="outline-text-6" id="text-8-21-3-2-1">
<div class="org-src-container">
<pre class="src src-xml"><span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> This file contains the mapping of keys (gamepad, remote, and keyboard) to actions within XBMC </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> The &lt;global&gt; section is a fall through - they will only be used if the button is not </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> used in the current window's section. Note that there is only handling </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> for a single action per button at this stage. </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> For joystick/gamepad configuration under linux/win32, see below as it differs from xbox </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> gamepads. </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> The format is: </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> &lt;device&gt; </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> &lt;button&gt;action&lt;/button&gt; </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> &lt;/device&gt; </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> To map keys from other remotes using the RCA protocol, you may add &lt;universalremote&gt; blocks </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> In this case, the tags used are &lt;obc#&gt; where # is the original button code (OBC) of the key </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> You set it up by adding a &lt;universalremote&gt; block to the window or &lt;global&gt; section: </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> &lt;universalremote&gt; </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> &lt;obc45&gt;Stop&lt;/obc45&gt; </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> &lt;/universalremote&gt; </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> To find out the OBC's of your remote, try enabling the &lt;displayremotecodes&gt; tag in AdvancedSettings.xml </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> Note that the action can be a built-in function. </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> eg &lt;B&gt;XBMC.ActivateWindow(MyMusic)&lt;/B&gt; </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> would automatically go to My Music on the press of the B button. </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> Joysticks / Gamepads: </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> See the sample PS3 controller configuration below for the format. </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> Joystick Name: </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> Do 'cat /proc/bus/input/devices' or see your xbmc log file to find the names of </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> detected joysticks. The name used in the configuration should match the detected name. </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> Button Ids: </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> 'id' is the button ID used by SDL. Joystick button ids of connected joysticks appear </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> in xbmc.log when they are pressed. Use your log to map custom buttons to actions. </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> Axis Ids / Analog Controls </span><span style="color: #8D8D84;">--&gt;</span>
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> Coming soon. </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">keymap</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">global</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">universalremote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">obc150</span>&gt;XBMC.ejecttray()&lt;/<span style="color: #000088; background-color: #DEDEDE;">obc150</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">obc151</span>&gt;Playlist&lt;/<span style="color: #000088; background-color: #DEDEDE;">obc151</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">universalremote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">play</span>&gt;PlayPause&lt;/<span style="color: #000088; background-color: #DEDEDE;">play</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">pause</span>&gt;Pause&lt;/<span style="color: #000088; background-color: #DEDEDE;">pause</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">stop</span>&gt;Stop&lt;/<span style="color: #000088; background-color: #DEDEDE;">stop</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">forward</span>&gt;FastForward&lt;/<span style="color: #000088; background-color: #DEDEDE;">forward</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">reverse</span>&gt;Rewind&lt;/<span style="color: #000088; background-color: #DEDEDE;">reverse</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">left</span>&gt;Left&lt;/<span style="color: #000088; background-color: #DEDEDE;">left</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">right</span>&gt;Right&lt;/<span style="color: #000088; background-color: #DEDEDE;">right</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">up</span>&gt;Up&lt;/<span style="color: #000088; background-color: #DEDEDE;">up</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">down</span>&gt;Down&lt;/<span style="color: #000088; background-color: #DEDEDE;">down</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">select</span>&gt;Select&lt;/<span style="color: #000088; background-color: #DEDEDE;">select</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">pageplus</span>&gt;PageUp&lt;/<span style="color: #000088; background-color: #DEDEDE;">pageplus</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">pageminus</span>&gt;PageDown&lt;/<span style="color: #000088; background-color: #DEDEDE;">pageminus</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;ParentDir&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;PreviousMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">title</span>&gt;ContextMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">title</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;Info&lt;/<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">skipplus</span>&gt;SkipNext&lt;/<span style="color: #000088; background-color: #DEDEDE;">skipplus</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">skipminus</span>&gt;SkipPrevious&lt;/<span style="color: #000088; background-color: #DEDEDE;">skipminus</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">display</span>&gt;FullScreen&lt;/<span style="color: #000088; background-color: #DEDEDE;">display</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">start</span>&gt;PreviousMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">start</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">record</span>&gt;Screenshot&lt;/<span style="color: #000088; background-color: #DEDEDE;">record</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">volumeplus</span>&gt;VolumeUp&lt;/<span style="color: #000088; background-color: #DEDEDE;">volumeplus</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">volumeminus</span>&gt;VolumeDown&lt;/<span style="color: #000088; background-color: #DEDEDE;">volumeminus</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mute</span>&gt;Mute&lt;/<span style="color: #000088; background-color: #DEDEDE;">mute</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">power</span>&gt;XBMC.Quit()&lt;/<span style="color: #000088; background-color: #DEDEDE;">power</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">myvideo</span>&gt;XBMC.ActivateWindow(MyVideos)&lt;/<span style="color: #000088; background-color: #DEDEDE;">myvideo</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mymusic</span>&gt;XBMC.ActivateWindow(MyMusic)&lt;/<span style="color: #000088; background-color: #DEDEDE;">mymusic</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">mypictures</span>&gt;XBMC.ActivateWindow(MyPictures)&lt;/<span style="color: #000088; background-color: #DEDEDE;">mypictures</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;">- &lt;mytv&gt;XBMC.ActivateWindow(Home)&lt;/mytv&gt; </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">recordedtv</span>&gt;XBMC.ActivateWindowAndFocus(MyPVR, 34,0, 13,0)&lt;/<span style="color: #000088; background-color: #DEDEDE;">recordedtv</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> PVR: EPG </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">guide</span>&gt;XBMC.ActivateWindowAndFocus(MyPVR, 31,0, 10,0)&lt;/<span style="color: #000088; background-color: #DEDEDE;">guide</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> PVR: Channellist </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">livetv</span>&gt;XBMC.ActivateWindowAndFocus(MyPVR, 32,0, 11,0)&lt;/<span style="color: #000088; background-color: #DEDEDE;">livetv</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> PVR: Radio </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">liveradio</span>&gt;XBMC.ActivateWindowAndFocus(MyPVR, 33,0, 12,0)&lt;/<span style="color: #000088; background-color: #DEDEDE;">liveradio</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">red</span>&gt;XBMC.ActivateWindow(Home)&lt;/<span style="color: #000088; background-color: #DEDEDE;">red</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">yellow</span>&gt;XBMC.ActivateWindow(MyVideos)&lt;/<span style="color: #000088; background-color: #DEDEDE;">yellow</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">green</span>&gt;XBMC.ActivateWindow(MyMusic)&lt;/<span style="color: #000088; background-color: #DEDEDE;">green</span>&gt;
<span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> &lt;blue&gt;XBMC.ActivateWindow(MyPictures)&lt;/blue&gt; </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;Number0&lt;/<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">one</span>&gt;Number1&lt;/<span style="color: #000088; background-color: #DEDEDE;">one</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">two</span>&gt;JumpSMS2&lt;/<span style="color: #000088; background-color: #DEDEDE;">two</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">three</span>&gt;JumpSMS3&lt;/<span style="color: #000088; background-color: #DEDEDE;">three</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">four</span>&gt;JumpSMS4&lt;/<span style="color: #000088; background-color: #DEDEDE;">four</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">five</span>&gt;JumpSMS5&lt;/<span style="color: #000088; background-color: #DEDEDE;">five</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">six</span>&gt;JumpSMS6&lt;/<span style="color: #000088; background-color: #DEDEDE;">six</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">seven</span>&gt;JumpSMS7&lt;/<span style="color: #000088; background-color: #DEDEDE;">seven</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">eight</span>&gt;JumpSMS8&lt;/<span style="color: #000088; background-color: #DEDEDE;">eight</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">nine</span>&gt;JumpSMS9&lt;/<span style="color: #000088; background-color: #DEDEDE;">nine</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">audio</span>&gt;AudioNextLanguage&lt;/<span style="color: #000088; background-color: #DEDEDE;">audio</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">subtitle</span>&gt;ShowSubtitles&lt;/<span style="color: #000088; background-color: #DEDEDE;">subtitle</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">enter</span>&gt;FullScreen&lt;/<span style="color: #000088; background-color: #DEDEDE;">enter</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">blue</span>&gt;ContextMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">blue</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">playlist</span>&gt;XBMC.ActivateWindow(MyMusicPlaylist)&lt;/<span style="color: #000088; background-color: #DEDEDE;">playlist</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">global</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">Home</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;XBMC.Skin.ToggleSetting(HomeViewToggle)&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;XBMC.ActivateWindow(SystemInfo)&lt;/<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">clear</span>&gt;XBMC.ActivateWindow(Weather)&lt;/<span style="color: #000088; background-color: #DEDEDE;">clear</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">blue</span>&gt;XBMC.ActivateWindow(Settings)&lt;/<span style="color: #000088; background-color: #DEDEDE;">blue</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">red</span>&gt;FullScreen&lt;/<span style="color: #000088; background-color: #DEDEDE;">red</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;FullScreen&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">Home</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">MyFiles</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">clear</span>&gt;Delete&lt;/<span style="color: #000088; background-color: #DEDEDE;">clear</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">MyFiles</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">MyMusicPlaylist</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;Playlist&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt; <span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> Close playlist </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">clear</span>&gt;Delete&lt;/<span style="color: #000088; background-color: #DEDEDE;">clear</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">MyMusicPlaylist</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">MyMusicPlaylistEditor</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;Queue&lt;/<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">MyMusicPlaylistEditor</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">MyMusicFiles</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;Queue&lt;/<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">star</span>&gt;Queue&lt;/<span style="color: #000088; background-color: #DEDEDE;">star</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">start</span>&gt;ContextMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">start</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">MyMusicFiles</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">MyMusicLibrary</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;Queue&lt;/<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">star</span>&gt;Queue&lt;/<span style="color: #000088; background-color: #DEDEDE;">star</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">MyMusicLibrary</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">FullscreenVideo</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;FullScreen&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;Number0&lt;/<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">one</span>&gt;Number1&lt;/<span style="color: #000088; background-color: #DEDEDE;">one</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">two</span>&gt;Number2&lt;/<span style="color: #000088; background-color: #DEDEDE;">two</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">three</span>&gt;Number3&lt;/<span style="color: #000088; background-color: #DEDEDE;">three</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">four</span>&gt;Number4&lt;/<span style="color: #000088; background-color: #DEDEDE;">four</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">five</span>&gt;Number5&lt;/<span style="color: #000088; background-color: #DEDEDE;">five</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">six</span>&gt;Number6&lt;/<span style="color: #000088; background-color: #DEDEDE;">six</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">seven</span>&gt;Number7&lt;/<span style="color: #000088; background-color: #DEDEDE;">seven</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">eight</span>&gt;Number8&lt;/<span style="color: #000088; background-color: #DEDEDE;">eight</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">nine</span>&gt;Number9&lt;/<span style="color: #000088; background-color: #DEDEDE;">nine</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">left</span>&gt;Rewind&lt;/<span style="color: #000088; background-color: #DEDEDE;">left</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">right</span>&gt;FastForward&lt;/<span style="color: #000088; background-color: #DEDEDE;">right</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">up</span>&gt;Play&lt;/<span style="color: #000088; background-color: #DEDEDE;">up</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">down</span>&gt;Pause&lt;/<span style="color: #000088; background-color: #DEDEDE;">down</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">yellow</span>&gt;StepForward&lt;/<span style="color: #000088; background-color: #DEDEDE;">yellow</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">green</span>&gt;StepBack&lt;/<span style="color: #000088; background-color: #DEDEDE;">green</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">blue</span>&gt;CodecInfo&lt;/<span style="color: #000088; background-color: #DEDEDE;">blue</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;OSD&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">start</span>&gt;OSD&lt;/<span style="color: #000088; background-color: #DEDEDE;">start</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;XBMC.ActivateWindow(PVROSDChannels)&lt;/<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">title</span>&gt;XBMC.ActivateWindow(PVROSDChannels)&lt;/<span style="color: #000088; background-color: #DEDEDE;">title</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">display</span>&gt;AspectRatio&lt;/<span style="color: #000088; background-color: #DEDEDE;">display</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">select</span>&gt;Info&lt;/<span style="color: #000088; background-color: #DEDEDE;">select</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">teletext</span>&gt;XBMC.ActivateWindow(Teletext)&lt;/<span style="color: #000088; background-color: #DEDEDE;">teletext</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">channelplus</span>&gt;SkipNext&lt;/<span style="color: #000088; background-color: #DEDEDE;">channelplus</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">channelminus</span>&gt;SkipPrevious&lt;/<span style="color: #000088; background-color: #DEDEDE;">channelminus</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">record</span>&gt;XBMC.PlayerControl(Record)&lt;/<span style="color: #000088; background-color: #DEDEDE;">record</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">FullscreenVideo</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">FullscreenInfo</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;FullScreen&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">left</span>&gt;Rewind&lt;/<span style="color: #000088; background-color: #DEDEDE;">left</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">right</span>&gt;FastForward&lt;/<span style="color: #000088; background-color: #DEDEDE;">right</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">up</span>&gt;Play&lt;/<span style="color: #000088; background-color: #DEDEDE;">up</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">down</span>&gt;Pause&lt;/<span style="color: #000088; background-color: #DEDEDE;">down</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">yellow</span>&gt;StepForward&lt;/<span style="color: #000088; background-color: #DEDEDE;">yellow</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">green</span>&gt;StepBack&lt;/<span style="color: #000088; background-color: #DEDEDE;">green</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">display</span>&gt;AspectRatio&lt;/<span style="color: #000088; background-color: #DEDEDE;">display</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;CodecInfo&lt;/<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">select</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">select</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;OSD&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">FullscreenInfo</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">PlayerControls</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">PlayerControls</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">Visualisation</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">universalremote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">obc151</span>&gt;XBMC.ActivateWindow(MyMusicPlaylist)&lt;/<span style="color: #000088; background-color: #DEDEDE;">obc151</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">universalremote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">red</span>&gt;FullScreen&lt;/<span style="color: #000088; background-color: #DEDEDE;">red</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">yellow</span>&gt;AnalogSeekForward&lt;/<span style="color: #000088; background-color: #DEDEDE;">yellow</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">green</span>&gt;AnalogSeekBack&lt;/<span style="color: #000088; background-color: #DEDEDE;">green</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">blue</span>&gt;CodecInfo&lt;/<span style="color: #000088; background-color: #DEDEDE;">blue</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">left</span>&gt;Rewind&lt;/<span style="color: #000088; background-color: #DEDEDE;">left</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">right</span>&gt;FastForward&lt;/<span style="color: #000088; background-color: #DEDEDE;">right</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">pageplus</span>&gt;SkipNext&lt;/<span style="color: #000088; background-color: #DEDEDE;">pageplus</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">pageminus</span>&gt;SkipPrevious&lt;/<span style="color: #000088; background-color: #DEDEDE;">pageminus</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">up</span>&gt;Play&lt;/<span style="color: #000088; background-color: #DEDEDE;">up</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">down</span>&gt;Pause&lt;/<span style="color: #000088; background-color: #DEDEDE;">down</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;XBMC.ActivateWindow(PVROSDChannels)&lt;/<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;XBMC.ActivateWindow(MyMusicPlaylist)&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">select</span>&gt;Info&lt;/<span style="color: #000088; background-color: #DEDEDE;">select</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;XBMC.ActivateWindow(MusicOSD)&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">start</span>&gt;XBMC.ActivateWindow(MusicOSD)&lt;/<span style="color: #000088; background-color: #DEDEDE;">start</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">Visualisation</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">MusicOSD</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">start</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">start</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;CodecInfo&lt;/<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">MusicOSD</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">VisualisationSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">VisualisationSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">VisualisationPresetList</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">VisualisationPresetList</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">SlideShow</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;ZoomNormal&lt;/<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">one</span>&gt;ZoomLevel1&lt;/<span style="color: #000088; background-color: #DEDEDE;">one</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">two</span>&gt;ZoomLevel2&lt;/<span style="color: #000088; background-color: #DEDEDE;">two</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">three</span>&gt;ZoomLevel3&lt;/<span style="color: #000088; background-color: #DEDEDE;">three</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">four</span>&gt;ZoomLevel4&lt;/<span style="color: #000088; background-color: #DEDEDE;">four</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">five</span>&gt;ZoomLevel5&lt;/<span style="color: #000088; background-color: #DEDEDE;">five</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">six</span>&gt;ZoomLevel6&lt;/<span style="color: #000088; background-color: #DEDEDE;">six</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">seven</span>&gt;ZoomLevel7&lt;/<span style="color: #000088; background-color: #DEDEDE;">seven</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">eight</span>&gt;ZoomLevel8&lt;/<span style="color: #000088; background-color: #DEDEDE;">eight</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">nine</span>&gt;ZoomLevel9&lt;/<span style="color: #000088; background-color: #DEDEDE;">nine</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;CodecInfo&lt;/<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">pageplus</span>&gt;ZoomIn&lt;/<span style="color: #000088; background-color: #DEDEDE;">pageplus</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">pageminus</span>&gt;ZoomOut&lt;/<span style="color: #000088; background-color: #DEDEDE;">pageminus</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">select</span>&gt;Rotate&lt;/<span style="color: #000088; background-color: #DEDEDE;">select</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">up</span>&gt;Pause&lt;/<span style="color: #000088; background-color: #DEDEDE;">up</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">down</span>&gt;Play&lt;/<span style="color: #000088; background-color: #DEDEDE;">down</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;PreviousMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">SlideShow</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">ScreenCalibration</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">select</span>&gt;NextCalibration&lt;/<span style="color: #000088; background-color: #DEDEDE;">select</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">enter</span>&gt;NextCalibration&lt;/<span style="color: #000088; background-color: #DEDEDE;">enter</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;ResetCalibration&lt;/<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">display</span>&gt;NextResolution&lt;/<span style="color: #000088; background-color: #DEDEDE;">display</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">xbox</span>&gt;NextResolution&lt;/<span style="color: #000088; background-color: #DEDEDE;">xbox</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">ScreenCalibration</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">GUICalibration</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">select</span>&gt;NextCalibration&lt;/<span style="color: #000088; background-color: #DEDEDE;">select</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">enter</span>&gt;NextCalibration&lt;/<span style="color: #000088; background-color: #DEDEDE;">enter</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;ResetCalibration&lt;/<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">GUICalibration</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">SelectDialog</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">SelectDialog</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">VideoOSD</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;PreviousMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">start</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">start</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">VideoOSD</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">VideoMenu</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;OSD&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;PreviousMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;Info&lt;/<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">title</span>&gt;CodecInfo&lt;/<span style="color: #000088; background-color: #DEDEDE;">title</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;Number0&lt;/<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">one</span>&gt;Number1&lt;/<span style="color: #000088; background-color: #DEDEDE;">one</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">two</span>&gt;Number2&lt;/<span style="color: #000088; background-color: #DEDEDE;">two</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">three</span>&gt;Number3&lt;/<span style="color: #000088; background-color: #DEDEDE;">three</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">four</span>&gt;Number4&lt;/<span style="color: #000088; background-color: #DEDEDE;">four</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">five</span>&gt;Number5&lt;/<span style="color: #000088; background-color: #DEDEDE;">five</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">six</span>&gt;Number6&lt;/<span style="color: #000088; background-color: #DEDEDE;">six</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">seven</span>&gt;Number7&lt;/<span style="color: #000088; background-color: #DEDEDE;">seven</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">eight</span>&gt;Number8&lt;/<span style="color: #000088; background-color: #DEDEDE;">eight</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">nine</span>&gt;Number9&lt;/<span style="color: #000088; background-color: #DEDEDE;">nine</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">VideoMenu</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">OSDVideoSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">start</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">start</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">OSDVideoSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">OSDAudioSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">start</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">start</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">OSDAudioSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">VideoBookmarks</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">start</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">start</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;Delete&lt;/<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">VideoBookmarks</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">MyVideoLibrary</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;Queue&lt;/<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">clear</span>&gt;Delete&lt;/<span style="color: #000088; background-color: #DEDEDE;">clear</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">green</span>&gt;ToggleWatched&lt;/<span style="color: #000088; background-color: #DEDEDE;">green</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">yellow</span>&gt;Queue&lt;/<span style="color: #000088; background-color: #DEDEDE;">yellow</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">MyVideoLibrary</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">MyVideoFiles</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;Queue&lt;/<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">star</span>&gt;Queue&lt;/<span style="color: #000088; background-color: #DEDEDE;">star</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">blue</span>&gt;ContextMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">blue</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">green</span>&gt;ToggleWatched&lt;/<span style="color: #000088; background-color: #DEDEDE;">green</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">yellow</span>&gt;Queue&lt;/<span style="color: #000088; background-color: #DEDEDE;">yellow</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">MyVideoFiles</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">MyPictures</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;Queue&lt;/<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">star</span>&gt;Queue&lt;/<span style="color: #000088; background-color: #DEDEDE;">star</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">start</span>&gt;ContextMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">start</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">MyPictures</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">MyVideoPlaylist</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;Playlist&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt; <span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> Close playlist </span><span style="color: #8D8D84;">--&gt;</span>
&lt;<span style="color: #000088; background-color: #DEDEDE;">clear</span>&gt;Delete&lt;/<span style="color: #000088; background-color: #DEDEDE;">clear</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;Delete&lt;/<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">MyVideoPlaylist</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">VirtualKeyboard</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;BackSpace&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">star</span>&gt;Shift&lt;/<span style="color: #000088; background-color: #DEDEDE;">star</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">hash</span>&gt;Symbols&lt;/<span style="color: #000088; background-color: #DEDEDE;">hash</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;Number0&lt;/<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">one</span>&gt;Number1&lt;/<span style="color: #000088; background-color: #DEDEDE;">one</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">two</span>&gt;Number2&lt;/<span style="color: #000088; background-color: #DEDEDE;">two</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">three</span>&gt;Number3&lt;/<span style="color: #000088; background-color: #DEDEDE;">three</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">four</span>&gt;Number4&lt;/<span style="color: #000088; background-color: #DEDEDE;">four</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">five</span>&gt;Number5&lt;/<span style="color: #000088; background-color: #DEDEDE;">five</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">six</span>&gt;Number6&lt;/<span style="color: #000088; background-color: #DEDEDE;">six</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">seven</span>&gt;Number7&lt;/<span style="color: #000088; background-color: #DEDEDE;">seven</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">eight</span>&gt;Number8&lt;/<span style="color: #000088; background-color: #DEDEDE;">eight</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">nine</span>&gt;Number9&lt;/<span style="color: #000088; background-color: #DEDEDE;">nine</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">pageminus</span>&gt;CursorLeft&lt;/<span style="color: #000088; background-color: #DEDEDE;">pageminus</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">pageplus</span>&gt;CursorRight&lt;/<span style="color: #000088; background-color: #DEDEDE;">pageplus</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">VirtualKeyboard</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">ContextMenu</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">blue</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">blue</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">ContextMenu</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">FileStackingDialog</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">FileStackingDialog</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">Scripts</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;XBMC.ActivateWindow(ScriptsDebugInfo)&lt;/<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">Scripts</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">ScriptsDebugInfo</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;Info&lt;/<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt; <span style="color: #8D8D84;">&lt;!--</span><span style="color: #8D8D84; font-style: italic;"> clears debug python info </span><span style="color: #8D8D84;">--&gt;</span>
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">ScriptsDebugInfo</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">NumericInput</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;Number0&lt;/<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">one</span>&gt;Number1&lt;/<span style="color: #000088; background-color: #DEDEDE;">one</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">two</span>&gt;Number2&lt;/<span style="color: #000088; background-color: #DEDEDE;">two</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">three</span>&gt;Number3&lt;/<span style="color: #000088; background-color: #DEDEDE;">three</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">four</span>&gt;Number4&lt;/<span style="color: #000088; background-color: #DEDEDE;">four</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">five</span>&gt;Number5&lt;/<span style="color: #000088; background-color: #DEDEDE;">five</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">six</span>&gt;Number6&lt;/<span style="color: #000088; background-color: #DEDEDE;">six</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">seven</span>&gt;Number7&lt;/<span style="color: #000088; background-color: #DEDEDE;">seven</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">eight</span>&gt;Number8&lt;/<span style="color: #000088; background-color: #DEDEDE;">eight</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">nine</span>&gt;Number9&lt;/<span style="color: #000088; background-color: #DEDEDE;">nine</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;BackSpace&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">NumericInput</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">Weather</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;PreviousMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">Weather</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">Settings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;PreviousMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">Settings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">MyPicturesSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;PreviousMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">MyPicturesSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">MyProgramsSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;PreviousMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">MyProgramsSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">MyWeatherSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;PreviousMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">MyWeatherSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">MyMusicSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;PreviousMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">MyMusicSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">SystemSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;PreviousMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">SystemSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">MyVideosSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;PreviousMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">MyVideosSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">NetworkSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;PreviousMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">NetworkSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">AppearanceSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;PreviousMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">AppearanceSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">Profiles</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;PreviousMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">Profiles</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">systeminfo</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;PreviousMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">systeminfo</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">shutdownmenu</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;PreviousMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">shutdownmenu</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">submenu</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;PreviousMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">submenu</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">MusicInformation</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">MusicInformation</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">MovieInformation</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">MovieInformation</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">LockSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;PreviousMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">LockSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">ProfileSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;PreviousMenu&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">ProfileSettings</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">PictureInfo</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">skipplus</span>&gt;NextPicture&lt;/<span style="color: #000088; background-color: #DEDEDE;">skipplus</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">skipminus</span>&gt;PreviousPicture&lt;/<span style="color: #000088; background-color: #DEDEDE;">skipminus</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">PictureInfo</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">Teletext</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;number0&lt;/<span style="color: #000088; background-color: #DEDEDE;">zero</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">one</span>&gt;number1&lt;/<span style="color: #000088; background-color: #DEDEDE;">one</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">two</span>&gt;number2&lt;/<span style="color: #000088; background-color: #DEDEDE;">two</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">three</span>&gt;number3&lt;/<span style="color: #000088; background-color: #DEDEDE;">three</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">four</span>&gt;number4&lt;/<span style="color: #000088; background-color: #DEDEDE;">four</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">five</span>&gt;number5&lt;/<span style="color: #000088; background-color: #DEDEDE;">five</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">six</span>&gt;number6&lt;/<span style="color: #000088; background-color: #DEDEDE;">six</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">seven</span>&gt;number7&lt;/<span style="color: #000088; background-color: #DEDEDE;">seven</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">eight</span>&gt;number8&lt;/<span style="color: #000088; background-color: #DEDEDE;">eight</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">nine</span>&gt;number9&lt;/<span style="color: #000088; background-color: #DEDEDE;">nine</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">red</span>&gt;Red&lt;/<span style="color: #000088; background-color: #DEDEDE;">red</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">green</span>&gt;Green&lt;/<span style="color: #000088; background-color: #DEDEDE;">green</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">yellow</span>&gt;Yellow&lt;/<span style="color: #000088; background-color: #DEDEDE;">yellow</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">blue</span>&gt;Blue&lt;/<span style="color: #000088; background-color: #DEDEDE;">blue</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;Info&lt;/<span style="color: #000088; background-color: #DEDEDE;">info</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">menu</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">start</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">start</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">teletext</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">teletext</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">Teletext</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">Favourites</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;Close&lt;/<span style="color: #000088; background-color: #DEDEDE;">back</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">remote</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">Favourites</span>&gt;
&lt;/<span style="color: #000088; background-color: #DEDEDE;">keymap</span>&gt;
</pre>
</div>
</div></li></ol></li></ol>
</div>
</div>
<div id="outline-container-orgd72c29d" class="outline-3">
<h3 id="orgd72c29d"><span class="section-number-3">8.22</span> dvd</h3>
<div class="outline-text-3" id="text-8-22">
</div><div id="outline-container-org1b6796c" class="outline-4">
<h4 id="org1b6796c"><span class="section-number-4">8.22.1</span> tasks</h4>
<div class="outline-text-4" id="text-8-22-1">
</div><ol class="org-ol"><li><a id="org38b8cff"></a>install libdvd-pkg, allow programs to eject optical media<br /><div class="outline-text-5" id="text-8-22-1-1">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84; font-style: italic;">---</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">file: roles/dvd/tasks/main.yml</span>
- <span style="color: #BA36A5;">name</span>: preconfigure libdvd-pkg
<span style="color: #BA36A5;">shell</span>: |
echo <span style="color: #008000;">'libdvd-pkg libdvd-pkg/post-invoke_hook-install boolean true'</span> | debconf-set-selections
echo <span style="color: #008000;">'libdvd-pkg libdvd-pkg/build boolean true'</span> | debconf-set-selections
- <span style="color: #BA36A5;">name</span>: apt | install libdvd-pkg
<span style="color: #BA36A5;">apt</span>:
<span style="color: #BA36A5;">name</span>: <span style="color: #008000;">'{{ item }}'</span>
<span style="color: #BA36A5;">state</span>: present
<span style="color: #BA36A5;">install_recommends</span>: <span style="color: #D0372D;">no</span>
<span style="color: #BA36A5;">with_items</span>:
- libdvd-pkg
- <span style="color: #BA36A5;">name</span>: change udev rule to allow KODI to eject optical disks
<span style="color: #BA36A5;">shell</span>: sed <span style="color: #008000;">'s/--lock-media //'</span> /lib/udev/rules.d/60-cdrom_id.rules &gt; /etc/udev/rules.d/60-cdrom_id.rules
<span style="color: #BA36A5;">args</span>:
<span style="color: #BA36A5;">creates</span>: /etc/udev/rules.d/60-cdrom_id.rules
</pre>
</div>
</div></li></ol>
</div>
</div>
<div id="outline-container-org407952c" class="outline-3">
<h3 id="org407952c"><span class="section-number-3">8.23</span> template-test</h3>
<div class="outline-text-3" id="text-8-23">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84; font-style: italic;">---</span>
- <span style="color: #BA36A5;">name</span>: show vars
<span style="color: #BA36A5;">debug</span>:
<span style="color: #BA36A5;">var</span>: <span style="color: #008000;">'{{ system }}'</span>
- <span style="color: #BA36A5;">name</span>: test templates
<span style="color: #BA36A5;">template</span>:
<span style="color: #BA36A5;">src</span>: templates/test.j2
<span style="color: #BA36A5;">dest</span>: /tmp/test.txt
</pre>
</div>
<div class="org-src-container">
<pre class="src src-shell">{{ ansible_managed_file | comment }}
Section <span style="color: #008000;">"ServerLayout"</span>
Identifier <span style="color: #008000;">"Layout0"</span>
Screen 0 <span style="color: #008000;">"Screen0"</span>
{% if system.x11.dualhead.enabled %}
Screen 1 <span style="color: #008000;">"Screen1"</span> RightOf <span style="color: #008000;">"Screen0"</span>
{% endif %}
InputDevice <span style="color: #008000;">"Keyboard0"</span> <span style="color: #008000;">"CoreKeyboard"</span>
InputDevice <span style="color: #008000;">"Mouse0"</span> <span style="color: #008000;">"CorePointer"</span>
EndSection
Section <span style="color: #008000;">"InputDevice"</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">generated from default</span>
Identifier <span style="color: #008000;">"Mouse0"</span>
Driver <span style="color: #008000;">"mouse"</span>
Option <span style="color: #008000;">"Protocol"</span> <span style="color: #008000;">"auto"</span>
Option <span style="color: #008000;">"Device"</span> <span style="color: #008000;">"/dev/psaux"</span>
Option <span style="color: #008000;">"Emulate3Buttons"</span> <span style="color: #008000;">"no"</span>
Option <span style="color: #008000;">"ZAxisMapping"</span> <span style="color: #008000;">"4 5"</span>
EndSection
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">ignore devices with eventlircd tag </span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">ENV{ID_INPUT.tags}+="eventlircd"</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">must be set by an udev rule</span>
Section <span style="color: #008000;">"InputClass"</span>
Identifier <span style="color: #008000;">"ignore eventlircd devices"</span>
MatchTag <span style="color: #008000;">"eventlircd"</span>
Option <span style="color: #008000;">"Ignore"</span> <span style="color: #008000;">"True"</span>
EndSection
Section <span style="color: #008000;">"InputDevice"</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">generated from default</span>
Identifier <span style="color: #008000;">"Keyboard0"</span>
Driver <span style="color: #008000;">"kbd"</span>
EndSection
Section <span style="color: #008000;">"Monitor"</span>
Identifier <span style="color: #008000;">"Monitor0"</span>
VendorName <span style="color: #008000;">"Unknown"</span>
ModelName <span style="color: #008000;">"Unknown"</span>
{% if system.x11.display.0.default == <span style="color: #008000;">"VGA2Scart_4_3"</span> or system.x11.display.0.default == <span style="color: #008000;">"VGA2Scart_16_9"</span> %}
HorizSync 14-17
VertRefresh 49-61
{% if system.x11.display.0.default == <span style="color: #008000;">"VGA2Scart_4_3"</span> %}
Modeline <span style="color: #008000;">"VGA2Scart_4_3"</span> 13.875 720 744 808 888 576 580 585 625 -HSync -Vsync interlace
{% elif system.x11.display.0.default == <span style="color: #008000;">"VGA2Scart_16_9"</span> %}
Modeline <span style="color: #008000;">"VGA2Scart_16_9"</span> 19 1024 1032 1120 1216 576 581 586 625 -Hsync -Vsync interlace
{% endif %}
{% endif %}
Option <span style="color: #008000;">"DPMS"</span>
Option <span style="color: #008000;">"ExactModeTimingsDVI"</span> <span style="color: #008000;">"True"</span>
EndSection
{% if system.x11.dualhead.enabled == <span style="color: #008000;">"1"</span> %}
Section <span style="color: #008000;">"Monitor"</span>
Identifier <span style="color: #008000;">"Monitor1"</span>
VendorName <span style="color: #008000;">"Unknown"</span>
ModelName <span style="color: #008000;">"Unknown"</span>
{% if system.x11.display.1.default<span style="color: #0000FF;"> in</span> (<span style="color: #008000;">"VGA2Scart_4_3"</span>, <span style="color: #008000;">"VGA2Scart_16_9"</span>) %}
HorizSync 14-17
VertRefresh 49-61
{% if system.x11.display.1.default == <span style="color: #008000;">"VGA2Scart_4_3"</span> %}
Modeline <span style="color: #008000;">"VGA2Scart_4_3"</span> 13.875 720 744 808 888 576 580 585 625 -HSync -Vsync interlace
{% elif system.x11.display.1.default == <span style="color: #008000;">"VGA2Scart_16_9"</span> %}
Modeline <span style="color: #008000;">"VGA2Scart_16_9"</span> 19 1024 1032 1120 1216 576 581 586 625 -Hsync -Vsync interlace
{% endif %}
Option <span style="color: #008000;">"DPMS"</span>
Option <span style="color: #008000;">"ExactModeTimingsDVI"</span> <span style="color: #008000;">"True"</span>
{% endif %}
EndSection
{% endif %}
Section <span style="color: #008000;">"Device"</span>
Identifier <span style="color: #008000;">"Device0"</span>
{% if system.hardware.nvidia.detected %}
Driver <span style="color: #008000;">"nvidia"</span>
VendorName <span style="color: #008000;">"NVIDIA Corporation"</span>
{% endif %}
Screen 0
Option <span style="color: #008000;">"DPI"</span> <span style="color: #008000;">"100x100"</span>
{% if system.hardware.nvidia.busid %}
BusID <span style="color: #008000;">"PCI: {{ system.hardware.nvidia.busid }}"</span>
{% endif %}
Option <span style="color: #008000;">"NoLogo"</span> <span style="color: #008000;">"True"</span>
Option <span style="color: #008000;">"UseEvents"</span> <span style="color: #008000;">"True"</span>
Option <span style="color: #008000;">"TripleBuffer"</span> <span style="color: #008000;">"False"</span>
Option <span style="color: #008000;">"AddARGBGLXVisuals"</span> <span style="color: #008000;">"True"</span>
Option <span style="color: #008000;">"TwinView"</span> <span style="color: #008000;">"0"</span>
Option <span style="color: #008000;">"DynamicTwinView"</span> <span style="color: #008000;">"0"</span>
Option <span style="color: #008000;">"OnDemandVBlankinterrupts"</span> <span style="color: #008000;">"on"</span>
Option <span style="color: #008000;">"FlatPanelProperties"</span> <span style="color: #008000;">"Scaling = Native"</span>
EndSection
{% if system.x11.dualhead.enabled == <span style="color: #008000;">"1"</span> %}
Section <span style="color: #008000;">"Device"</span>
Identifier <span style="color: #008000;">"Device1"</span>
{% if system.hardware.nvidia.detected %}
Driver <span style="color: #008000;">"nvidia"</span>
VendorName <span style="color: #008000;">"NVIDIA Corporation"</span>
{% endif %}
Screen 1
{% if system.hardware.nvidia.busid %}
BusID <span style="color: #008000;">"PCI: {{ system.hardware.nvidia.busid }}"</span>
{% endif %}
Option <span style="color: #008000;">"NoLogo"</span> <span style="color: #008000;">"True"</span>
Option <span style="color: #008000;">"UseEvents"</span> <span style="color: #008000;">"True"</span>
Option <span style="color: #008000;">"TripleBuffer"</span> <span style="color: #008000;">"False"</span>
Option <span style="color: #008000;">"AddARGBGLXVisuals"</span> <span style="color: #008000;">"True"</span>
Option <span style="color: #008000;">"TwinView"</span> <span style="color: #008000;">"0"</span>
Option <span style="color: #008000;">"DynamicTwinView"</span> <span style="color: #008000;">"0"</span>
EndSection
{% endif %}
Section <span style="color: #008000;">"Screen"</span>
Identifier <span style="color: #008000;">"Screen0"</span>
Device <span style="color: #008000;">"Device0"</span>
Monitor <span style="color: #008000;">"Monitor0"</span>
DefaultDepth 24
SubSection <span style="color: #008000;">"Display"</span>
Depth 24
{% if system.x11.display.0.default is defined and system.x11.display.0.default %}
Modes <span style="color: #008000;">"{{ system.x11.display.0.default }}"</span>{% for mode<span style="color: #0000FF;"> in</span> system.x11.display.0.mode %}{% if mode != system.x11.display.0.default %} <span style="color: #008000;">"{{ mode }}"</span>{% endif %}{% endfor %}
{% elif system.hardware.nvidia.detected == 1 %}
Modes <span style="color: #008000;">"nvidia-auto-select"</span>
{% endif %}
EndSubSection
{% if system.x11.display.0.default or system.x11.default %}
{% if system.x11.display.0.device is definded and system.x11.display.0.device %}
Option <span style="color: #008000;">"ConnectedMonitor"</span> {{ system.x11.display.0.device }}
{% else %}
Option <span style="color: #008000;">"ConnectedMonitor"</span> {{ system.x11.default }}
{% endif %}
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">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 style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">Option "ConnectedMonitor"</span>
<span style="color: #008000;">"&lt;?cs if:(?system.x11.display.0.device) ?&gt;</span>
<span style="color: #008000;"> &lt;?cs call:fix_display_name(system.x11.display.0.device) ?&gt;</span>
<span style="color: #008000;"> &lt;?cs else ?&gt;</span>
<span style="color: #008000;"> &lt;?cs var:system.x11.default ?&gt;</span>
<span style="color: #008000;"> &lt;?cs /if ?&gt;</span>
<span style="color: #008000;"> &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 style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">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 style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">&lt;?cs /if ?&gt;</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">&lt;?cs if:(?system.hardware.nvidia.0.edid &amp;&amp; system.hardware.nvidia.0.edid == "1") ?&gt;</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Option "CustomEDID" "&lt;?cs call:fix_display_name(system.x11.display.0.device) ?&gt;:/etc/X11/edid.0.yavdr"</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">&lt;?cs /if ?&gt;</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">&lt;?cs if:(system.hardware.nvidia.detected == 1 &amp;&amp; ?system.x11.display.0.device) ?&gt;</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">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 style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">&lt;?cs each:mode = system.x11.display.0.mode ?&gt;&lt;?cs if:(mode != system.x11.display.0.default) ?&gt;</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Option "MetaModes" "&lt;?cs call:fix_display_name(system.x11.display.0.device) ?&gt;: &lt;?cs var:mode ?&gt; { ViewPortIn=&lt;?cs var:system.x11.display.0.viewport.in.x ?&gt;x&lt;?cs var:system.x11.display.0.viewport.in.y ?&gt;, ViewPortOut=&lt;?cs var:system.x11.display.0.viewport.out.x ?&gt;x&lt;?cs var:system.x11.display.0.viewport.out.y ?&gt;+&lt;?cs var:system.x11.display.0.viewport.out.plusx ?&gt;+&lt;?cs var:system.x11.display.0.viewport.out.plusy ?&gt; }"&lt;?cs /if ?&gt;&lt;?cs /each ?&gt; </span>
{% endif %}
EndSection
{% if system.x11.dualhead.enabled == <span style="color: #008000;">"1"</span> %}
Section <span style="color: #008000;">"Screen"</span>
Identifier <span style="color: #008000;">"Screen1"</span>
Device <span style="color: #008000;">"Device1"</span>
Monitor <span style="color: #008000;">"Monitor1"</span>
DefaultDepth 24
SubSection <span style="color: #008000;">"Display"</span>
Depth 24
{% if system.x11.display.0.default is defined and system.x11.display.0.default %}
Modes <span style="color: #008000;">"{{ system.x11.display.1.default }}"</span>{% for mode<span style="color: #0000FF;"> in</span> system.x11.display.1.mode %}{% if mode != system.x11.display.1.default %} <span style="color: #008000;">"{{ mode }}"</span>{% endif %}{% endfor %}
{% elif system.hardware.nvidia.detected == <span style="color: #008000;">"1"</span> %}
Modes <span style="color: #008000;">"nvidia-auto-select"</span>
{% endif %}
EndSubSection
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">&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 style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Option "UseDisplayDevice" "&lt;?cs call:fix_display_name(system.x11.display.1.device) ?&gt;"</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">&lt;?cs /if ?&gt;</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">&lt;?cs if:(?system.hardware.nvidia.1.edid &amp;&amp; system.hardware.nvidia.1.edid == "1") ?&gt;</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">Option "CustomEDID" "&lt;?cs call:fix_display_name(system.x11.display.1.device) ?&gt;:/etc/X11/edid.1.yavdr"</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">&lt;?cs /if ?&gt;</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">&lt;?cs if:(system.hardware.nvidia.detected == 1 &amp;&amp; ?system.x11.display.1.device) ?&gt;</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">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 style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">&lt;?cs each:mode = system.x11.display.1.mode ?&gt;&lt;?cs if:(mode != system.x11.display.1.default) ?&gt;</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">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 style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">&lt;?cs /if ?&gt;</span>
EndSection
{% endif %}
{% if not system.x11.use_compositing %}
Section <span style="color: #008000;">"Extensions"</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">if not open-gl OSD is needed (e.g. for vdr-sxfe):</span>
Option <span style="color: #008000;">"Composite"</span> <span style="color: #008000;">"Disable"</span>
EndSection
{% endif %}
</pre>
</div>
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #BA36A5;">foo</span>:
- bar
- baz
- spam
<span style="color: #BA36A5;">system</span>:
<span style="color: #BA36A5;">hardware</span>:
<span style="color: #BA36A5;">nvidia</span>:
<span style="color: #BA36A5;">detected</span>: <span style="color: #008000;">"1"</span>
<span style="color: #BA36A5;">busid</span>: <span style="color: #008000;">"000:2304:234"</span>
<span style="color: #BA36A5;">x11</span>:
<span style="color: #BA36A5;">dualhead</span>:
<span style="color: #BA36A5;">enabled</span>: <span style="color: #008000;">"0"</span>
<span style="color: #BA36A5;">display</span>:
<span style="color: #BA36A5;">0</span>:
<span style="color: #BA36A5;">mode</span>:
- <span style="color: #008000;">"1920x1080_50"</span>
<span style="color: #BA36A5;">default</span>: <span style="color: #008000;">"nvidia-auto"</span>
<span style="color: #BA36A5;">1</span>:
<span style="color: #BA36A5;">mode</span>:
- <span style="color: #008000;">"1280x720_60"</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org26960b4" class="outline-3">
<h3 id="org26960b4"><span class="section-number-3">8.24</span> grub-config</h3>
<div class="outline-text-3" id="text-8-24">
</div><div id="outline-container-org4a8102e" class="outline-4">
<h4 id="org4a8102e"><span class="section-number-4">8.24.1</span> default variables</h4>
<div class="outline-text-4" id="text-8-24-1">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #BA36A5;">system</span>:
<span style="color: #BA36A5;">shutdown</span>: poweroff
<span style="color: #BA36A5;">grub</span>:
<span style="color: #BA36A5;">timeout</span>: 0
<span style="color: #BA36A5;">boot_options</span>: quiet nosplash
</pre>
</div>
</div>
</div>
<div id="outline-container-org188b604" class="outline-4">
<h4 id="org188b604"><span class="section-number-4">8.24.2</span> tasks</h4>
<div class="outline-text-4" id="text-8-24-2">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84; font-style: italic;">---</span>
- <span style="color: #BA36A5;">name</span>: custom grub configuration for timeout and reboot halt
<span style="color: #BA36A5;">template</span>:
<span style="color: #BA36A5;">src</span>: templates/50_custom.j2
<span style="color: #BA36A5;">dest</span>: /etc/grub.d/50_custom
<span style="color: #BA36A5;">mode</span>: <span style="color: #008000;">'0775'</span>
<span style="color: #BA36A5;">notify</span>: [ <span style="color: #008000;">'Update GRUB'</span> ]
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">TODO: add special case if plymouth is used</span>
- <span style="color: #BA36A5;">name</span>: let the system boot quietly
<span style="color: #BA36A5;">lineinfile</span>:
<span style="color: #BA36A5;">dest</span>: /etc/default/grub
<span style="color: #BA36A5;">state</span>: present
<span style="color: #BA36A5;">regexp</span>: <span style="color: #008000;">'^(GRUB_CMDLINE_LINUX_DEFAULT=")'</span>
<span style="color: #BA36A5;">line</span>: <span style="color: #008000;">'\1{{ grub.boot_options}}"'</span>
<span style="color: #BA36A5;">backrefs</span>: <span style="color: #D0372D;">yes</span>
<span style="color: #BA36A5;">notify</span>: [ <span style="color: #008000;">'Update GRUB'</span> ]
</pre>
</div>
</div>
</div>
<div id="outline-container-org2994081" class="outline-4">
<h4 id="org2994081"><span class="section-number-4">8.24.3</span> templates</h4>
<div class="outline-text-4" id="text-8-24-3">
<div class="org-src-container">
<pre class="src src-shell"><span style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">!/bin/</span><span style="color: #0000FF;">sh</span>
<span style="color: #0000FF;">exec</span> tail -n +3 $<span style="color: #BA36A5;">0</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">This file is configured by the ansible configuration for yaVDR</span>
{% if system.shutdown is defined and system.shutdown == <span style="color: #008000;">'reboot'</span> %}
menuentry <span style="color: #008000;">"PowerOff"</span> {
halt
}
{% endif %}
<span style="color: #0000FF;">if</span> [ <span style="color: #008000;">"${recordfail}"</span> = 1 ]; <span style="color: #0000FF;">then</span>
<span style="color: #006FE0;">set</span> <span style="color: #BA36A5;">timeout</span>={{ 3 if grub.timeout &lt; 3 else grub.timeout }}
<span style="color: #0000FF;">else</span>
<span style="color: #006FE0;">set</span> <span style="color: #BA36A5;">timeout</span>={{ grub.timeout if grub.timeout is defined else 0 }}
<span style="color: #0000FF;">fi</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org7d58a91" class="outline-4">
<h4 id="org7d58a91"><span class="section-number-4">8.24.4</span> handlers</h4>
<div class="outline-text-4" id="text-8-24-4">
<div class="org-src-container">
<pre class="src src-yaml"><span style="color: #8D8D84; font-style: italic;">---</span>
- <span style="color: #BA36A5;">name</span>: Update GRUB
<span style="color: #BA36A5;">command</span>: update-grub
<span style="color: #BA36A5;">failed_when</span>: (<span style="color: #008000;">'error'</span> in grub_register_update.stderr)
<span style="color: #BA36A5;">register</span>: grub_register_update
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">TODO: Do we need to use grub-set-default?</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">https://github.com/yavdr/yavdr-utils/blob/master/events/actions/update-grub</span>
</pre>
</div>
</div>
</div>
</div>
</div>
<div id="outline-container-org875f5b7" class="outline-2">
<h2 id="org875f5b7"><span class="section-number-2">9</span> Modules</h2>
<div class="outline-text-2" id="text-9">
<p>
This section contains custom modules for the yaVDR Playbooks. They are used to collect facts about the system and configure applications and daemons.
</p>
</div>
<div id="outline-container-orgaecaf37" class="outline-3">
<h3 id="orgaecaf37"><span class="section-number-3">9.1</span> hardware_facts.py</h3>
<div class="outline-text-3" id="text-9-1">
<div class="org-src-container">
<pre class="src src-python"><span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">This Module collects the vendor- and device ids for USB- and PCI(e)-devices and currently loaded kernel modules.</span>
<span style="color: #BA36A5;">DOCUMENTATION</span> = <span style="color: #008000;">'''</span>
<span style="color: #008000;"> ---</span>
<span style="color: #008000;"> module: hardware_facts</span>
<span style="color: #008000;"> short_description: collects facts for kernel modules, usb and pci devices</span>
<span style="color: #008000;"> description:</span>
<span style="color: #008000;"> - This Module collects the vendor- and device ids for USB- and PCI(e)-devices and</span>
<span style="color: #008000;"> currently loaded kernel modules.</span>
<span style="color: #008000;"> options:</span>
<span style="color: #008000;"> usb:</span>
<span style="color: #008000;"> required: False</span>
<span style="color: #008000;"> default: True</span>
<span style="color: #008000;"> description:</span>
<span style="color: #008000;"> - return a list of vendor- and device ids for usb devices in '04x:04x' notation</span>
<span style="color: #008000;"> pci:</span>
<span style="color: #008000;"> required: False</span>
<span style="color: #008000;"> default: True</span>
<span style="color: #008000;"> description:</span>
<span style="color: #008000;"> - return a list of vendor- and device ids for pci devices in '04x:04x' notation</span>
<span style="color: #008000;"> modules:</span>
<span style="color: #008000;"> required: False</span>
<span style="color: #008000;"> default: True</span>
<span style="color: #008000;"> description:</span>
<span style="color: #008000;"> - return a list of currently loaded kernel modules</span>
<span style="color: #008000;"> gpus:</span>
<span style="color: #008000;"> required: False</span>
<span style="color: #008000;"> default: True</span>
<span style="color: #008000;"> description:</span>
<span style="color: #008000;"> - return a list of devices of the pci gpu class (0x030000)</span>
<span style="color: #008000;">notes:</span>
<span style="color: #008000;"> - requres python-pyusb and python-kmodpy</span>
<span style="color: #008000;">requirements: [ ]</span>
<span style="color: #008000;">author: "Alexander Grothe <a href="mailto:seahawk1986%40gmx.de">&lt;seahawk1986@gmx.de&gt;</a>"</span>
<span style="color: #008000;">'''</span>
<span style="color: #BA36A5;">EXAMPLES</span> = <span style="color: #008000;">'''</span>
<span style="color: #008000;">- name: get information about usb and pci hardware and loaded kernel modules</span>
<span style="color: #008000;"> hardware_facts:</span>
<span style="color: #008000;"> usb: True</span>
<span style="color: #008000;"> pci: True</span>
<span style="color: #008000;"> modules: True</span>
<span style="color: #008000;">- debug:</span>
<span style="color: #008000;"> var: usb</span>
<span style="color: #008000;">- debug</span>
<span style="color: #008000;"> var: pci</span>
<span style="color: #008000;">- debug</span>
<span style="color: #008000;"> var: modules</span>
<span style="color: #008000;">- debug</span>
<span style="color: #008000;"> var: gpus</span>
<span style="color: #008000;">'''</span>
<span style="color: #0000FF;">import</span> glob
<span style="color: #0000FF;">import</span> json
<span style="color: #0000FF;">import</span> os
<span style="color: #0000FF;">import</span> sys
<span style="color: #0000FF;">import</span> usb.core
<span style="color: #0000FF;">from</span> collections <span style="color: #0000FF;">import</span> namedtuple
<span style="color: #0000FF;">import</span> kmodpy
<span style="color: #0000FF;">from</span> ansible.module_utils.basic <span style="color: #0000FF;">import</span> *
<span style="color: #BA36A5;">PCIDevice</span> = namedtuple(<span style="color: #008000;">"PCIDevice"</span>, <span style="color: #008000;">'idVendor idProduct idClass pciPath'</span>)
<span style="color: #0000FF;">def</span> <span style="color: #006699;">get_pci_devices</span>():
<span style="color: #0000FF;">for</span> device <span style="color: #0000FF;">in</span> glob.glob(<span style="color: #008000;">'/sys/devices/pci*/*:*:*/'</span>):
<span style="color: #0000FF;">with</span> <span style="color: #006FE0;">open</span>(os.path.join(device, <span style="color: #008000;">'device'</span>)) <span style="color: #0000FF;">as</span> d:
<span style="color: #BA36A5;">product_id</span> = <span style="color: #006FE0;">int</span>(d.read().strip(), 16)
<span style="color: #0000FF;">with</span> <span style="color: #006FE0;">open</span>(os.path.join(device, <span style="color: #008000;">'vendor'</span>)) <span style="color: #0000FF;">as</span> d:
<span style="color: #BA36A5;">vendor_id</span> = <span style="color: #006FE0;">int</span>(d.read().strip(), 16)
<span style="color: #0000FF;">with</span> <span style="color: #006FE0;">open</span>(os.path.join(device, <span style="color: #008000;">'class'</span>)) <span style="color: #0000FF;">as</span> d:
<span style="color: #BA36A5;">class_id</span> = <span style="color: #006FE0;">int</span>(d.read().strip(), 16)
<span style="color: #0000FF;">yield</span> PCIDevice(idVendor=vendor_id, idProduct=product_id, idClass=class_id, pciPath=device)
<span style="color: #0000FF;">def</span> <span style="color: #006699;">format_device_list</span>(iterator):
<span style="color: #0000FF;">return</span> [<span style="color: #008000;">"{:04x}:{:04x}"</span>.<span style="color: #006FE0;">format</span>(d.idVendor, d.idProduct) <span style="color: #0000FF;">for</span> d <span style="color: #0000FF;">in</span> iterator]
<span style="color: #0000FF;">def</span> <span style="color: #006699;">format_gpu_device_list</span>(iterator):
<span style="color: #0000FF;">def</span> <span style="color: #006699;">get_entries</span>(iterator):
<span style="color: #0000FF;">for</span> d <span style="color: #0000FF;">in</span> iterator:
<span style="color: #0000FF;">if</span> d.idClass == 0x030000:
<span style="color: #0000FF;">yield</span> (<span style="color: #008000;">"{:04x}:{:04x}"</span>.<span style="color: #006FE0;">format</span>(d.idVendor, d.idProduct))
<span style="color: #0000FF;">return</span> [entry <span style="color: #0000FF;">for</span> entry <span style="color: #0000FF;">in</span> get_entries(iterator)]
<span style="color: #BA36A5;">arg_specs</span> = {
<span style="color: #008000;">'usb'</span>: <span style="color: #006FE0;">dict</span>(default=<span style="color: #D0372D;">True</span>, <span style="color: #006FE0;">type</span>=<span style="color: #008000;">'bool'</span>, required=<span style="color: #D0372D;">False</span>),
<span style="color: #008000;">'pci'</span>: <span style="color: #006FE0;">dict</span>(default=<span style="color: #D0372D;">True</span>, <span style="color: #006FE0;">type</span>=<span style="color: #008000;">'bool'</span>, required=<span style="color: #D0372D;">False</span>),
<span style="color: #008000;">'modules'</span>: <span style="color: #006FE0;">dict</span>(default=<span style="color: #D0372D;">True</span>, <span style="color: #006FE0;">type</span>=<span style="color: #008000;">'bool'</span>, required=<span style="color: #D0372D;">False</span>),
<span style="color: #008000;">'gpus'</span>: <span style="color: #006FE0;">dict</span>(default=<span style="color: #D0372D;">True</span>, <span style="color: #006FE0;">type</span>=<span style="color: #008000;">'bool'</span>, required=<span style="color: #D0372D;">False</span>),
}
<span style="color: #0000FF;">def</span> <span style="color: #006699;">main</span>():
<span style="color: #BA36A5;">module</span> = AnsibleModule(argument_spec=arg_specs, supports_check_mode=<span style="color: #D0372D;">True</span>,)
<span style="color: #BA36A5;">collect_usb</span> = module.params[<span style="color: #008000;">'usb'</span>]
<span style="color: #BA36A5;">collect_pci</span> = module.params[<span style="color: #008000;">'pci'</span>]
<span style="color: #BA36A5;">collect_modules</span> = module.params[<span style="color: #008000;">'modules'</span>]
<span style="color: #BA36A5;">collect_gpus</span> = module.params[<span style="color: #008000;">'gpus'</span>]
<span style="color: #0000FF;">if</span> collect_usb:
<span style="color: #BA36A5;">usb_devices</span> = format_device_list(usb.core.find(find_all=<span style="color: #D0372D;">True</span>))
<span style="color: #0000FF;">else</span>:
<span style="color: #BA36A5;">usb_device</span> = []
<span style="color: #0000FF;">if</span> collect_pci:
<span style="color: #BA36A5;">pci_devices</span> = format_device_list(get_pci_devices())
<span style="color: #0000FF;">else</span>:
<span style="color: #BA36A5;">pci_devices</span> = []
<span style="color: #0000FF;">if</span> collect_modules:
<span style="color: #BA36A5;">k</span> = kmodpy.Kmod()
<span style="color: #BA36A5;">modules</span> = [m[0] <span style="color: #0000FF;">for</span> m <span style="color: #0000FF;">in</span> k.loaded()]
<span style="color: #0000FF;">else</span>:
<span style="color: #BA36A5;">modules</span> = []
<span style="color: #0000FF;">if</span> collect_gpus:
<span style="color: #BA36A5;">gpus</span> = format_gpu_device_list(get_pci_devices())
<span style="color: #0000FF;">else</span>:
<span style="color: #BA36A5;">gpus</span> = []
<span style="color: #BA36A5;">data</span> = {<span style="color: #008000;">'usb'</span>: usb_devices, <span style="color: #008000;">'pci'</span>: pci_devices, <span style="color: #008000;">'modules'</span>: modules, <span style="color: #008000;">'gpus'</span>: gpus}
module.exit_json(changed=<span style="color: #D0372D;">False</span>, ansible_facts=data, msg=data)
<span style="color: #0000FF;">if</span> <span style="color: #006FE0;">__name__</span> == <span style="color: #008000;">'__main__'</span>:
main()
</pre>
</div>
</div>
</div>
<div id="outline-container-org1b209d3" class="outline-3">
<h3 id="org1b209d3"><span class="section-number-3">9.2</span> satip_facts.py</h3>
<div class="outline-text-3" id="text-9-2">
<div class="org-src-container">
<pre class="src src-python"><span style="color: #BA36A5;">DOCUMENTATION</span> = <span style="color: #008000;">'''</span>
<span style="color: #008000;">---</span>
<span style="color: #008000;">module: hardware_facts</span>
<span style="color: #008000;">short_description: "check if at least one SAT&gt;IP server responds on the network"</span>
<span style="color: #008000;">description:</span>
<span style="color: #008000;"> - This script sends a multicast message and awaits responses by Sat&gt;IP servers.</span>
<span style="color: #008000;"> Returns the boolean variable 'satip_detected'</span>
<span style="color: #008000;">'''</span>
<span style="color: #BA36A5;">EXAMPLES</span> = <span style="color: #008000;">'''</span>
<span style="color: #008000;">- name: "detect SAT&gt;IP Server on the network"</span>
<span style="color: #008000;"> action: satip_facts</span>
<span style="color: #008000;">- debug:</span>
<span style="color: #008000;"> var: satip_detected</span>
<span style="color: #008000;">'''</span>
<span style="color: #0000FF;">import</span> json
<span style="color: #0000FF;">import</span> socket
<span style="color: #0000FF;">import</span> sys
<span style="color: #0000FF;">import</span> time
<span style="color: #0000FF;">from</span> ansible.module_utils.basic <span style="color: #0000FF;">import</span> *
<span style="color: #BA36A5;">SSDP_ADDR</span> = <span style="color: #008000;">"239.255.255.250"</span>
<span style="color: #BA36A5;">SSDP_PORT</span> = 1900
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">SSDP_MX = max delay for server response</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">a value of 2s is recommended by the SAT&gt;IP specification 1.2.2</span>
<span style="color: #BA36A5;">SSDP_MX</span> = 2
<span style="color: #BA36A5;">SSDP_ST</span> = <span style="color: #008000;">"urn:ses-com:device:SatIPServer:1"</span>
<span style="color: #BA36A5;">ssdpRequest</span> = <span style="color: #008000;">"\r\n"</span>.join((
<span style="color: #008000;">"M-SEARCH * HTTP/1.1"</span>,
<span style="color: #008000;">"HOST: %s:%d"</span> % (SSDP_ADDR, SSDP_PORT),
<span style="color: #008000;">"MAN: \"ssdp:discover\""</span>,
<span style="color: #008000;">"MX: %d"</span> % (SSDP_MX),
<span style="color: #008000;">"ST: %s"</span> % (SSDP_ST),
<span style="color: #008000;">"\r\n"</span>))
<span style="color: #0000FF;">def</span> <span style="color: #006699;">main</span>():
<span style="color: #BA36A5;">module</span> = AnsibleModule(argument_spec={}, supports_check_mode=<span style="color: #D0372D;">True</span>,)
<span style="color: #BA36A5;">sock</span> = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">according to Sat&gt;IP Specification 1.2.2, p. 20</span>
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">a client should send three requests within 100 ms with a ttl of 2</span>
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
sock.settimeout(SSDP_MX + 0.5)
<span style="color: #0000FF;">for</span> _ <span style="color: #0000FF;">in</span> <span style="color: #006FE0;">range</span>(3):
sock.sendto(ssdpRequest, (SSDP_ADDR, SSDP_PORT))
time.sleep(0.03)
<span style="color: #0000FF;">try</span>:
<span style="color: #BA36A5;">response</span> = sock.recv(1000)
<span style="color: #0000FF;">if</span> response <span style="color: #0000FF;">and</span> <span style="color: #008000;">"SERVER:"</span> <span style="color: #0000FF;">in</span> response:
<span style="color: #BA36A5;">got_response</span> = <span style="color: #D0372D;">True</span>
<span style="color: #0000FF;">else</span>:
<span style="color: #0000FF;">raise</span> <span style="color: #6434A3;">ValueError</span>(<span style="color: #008000;">'No satip server detected'</span>)
<span style="color: #0000FF;">except</span> (socket.timeout, <span style="color: #6434A3;">ValueError</span>):
<span style="color: #BA36A5;">got_response</span> = <span style="color: #D0372D;">False</span>
module.exit_json(changed=<span style="color: #D0372D;">False</span>, ansible_facts={<span style="color: #008000;">'satip_detected'</span>: got_response})
<span style="color: #0000FF;">if</span> <span style="color: #006FE0;">__name__</span> == <span style="color: #008000;">'__main__'</span>:
main()
</pre>
</div>
</div>
</div>
<div id="outline-container-orgf126714" class="outline-3">
<h3 id="orgf126714"><span class="section-number-3">9.3</span> xrandr_facts.py</h3>
<div class="outline-text-3" id="text-9-3">
<ul class="org-ul">
<li class="off"><code>[&#xa0;]</code> support multiple screens (-d :0.0 .. :0.n)</li>
</ul>
<div class="org-src-container">
<pre class="src src-python"><span style="color: #0000FF;">from</span> __future__ <span style="color: #0000FF;">import</span> print_function
<span style="color: #0000FF;">import</span> ast
<span style="color: #0000FF;">import</span> binascii
<span style="color: #0000FF;">import</span> csv
<span style="color: #0000FF;">import</span> re
<span style="color: #0000FF;">import</span> subprocess
<span style="color: #0000FF;">from</span> collections <span style="color: #0000FF;">import</span> namedtuple
<span style="color: #0000FF;">from</span> ansible.module_utils.basic <span style="color: #0000FF;">import</span> *
<span style="color: #BA36A5;">DOCUMENTATION</span> = <span style="color: #008000;">'''</span>
<span style="color: #008000;">---</span>
<span style="color: #008000;">module: xrandr_facts</span>
<span style="color: #008000;">short_description: "gather facts about connected monitors and available modelines"</span>
<span style="color: #008000;">description:</span>
<span style="color: #008000;"> - This module needs a running x-server on a given display in order to successfully call xrandr.</span>
<span style="color: #008000;"> Returns the dictionary "xrandr", wich contains all screens with output states, connected displays,</span>
<span style="color: #008000;"> EDID info and their modes and a recommendation for the best fitting tv mode.</span>
<span style="color: #008000;">options:</span>
<span style="color: #008000;"> display:</span>
<span style="color: #008000;"> required: False</span>
<span style="color: #008000;"> default: ":0"</span>
<span style="color: #008000;"> description:</span>
<span style="color: #008000;"> - the DISPLAY variable to use when calling xrandr</span>
<span style="color: #008000;"> preferred_outpus:</span>
<span style="color: #008000;"> required: False</span>
<span style="color: #008000;"> default: ["HDMI", "DP", "DVI", "VGA", "TV": 0]</span>
<span style="color: #008000;"> description:</span>
<span style="color: #008000;"> - ranking of the preferred display connectors</span>
<span style="color: #008000;"> preferred_refreshrates:</span>
<span style="color: #008000;"> required: False</span>
<span style="color: #008000;"> default: ["50", "60", "75", "30", "25"]</span>
<span style="color: #008000;"> description:</span>
<span style="color: #008000;"> - ranking of the preferred display refreshrate</span>
<span style="color: #008000;"> preferred_resolutions:</span>
<span style="color: #008000;"> required: False</span>
<span style="color: #008000;"> default: ["7680x4320", "3840x2160", "1920x1080", "1280x720", "720x576"]</span>
<span style="color: #008000;"> description:</span>
<span style="color: #008000;"> - ranking of the preferred display resolutions</span>
<span style="color: #008000;"> write_edids:</span>
<span style="color: #008000;"> required: False</span>
<span style="color: #008000;"> default: True</span>
<span style="color: #008000;"> description:</span>
<span style="color: #008000;"> - write edid data to /etc/X11/edid.{connector}.bin</span>
<span style="color: #008000;">'''</span>
<span style="color: #BA36A5;">EXAMPLES</span> = <span style="color: #008000;">'''</span>
<span style="color: #008000;">- name: "collect facts for connected displays"</span>
<span style="color: #008000;"> action: xserver_facts</span>
<span style="color: #008000;"> display: ":0"</span>
<span style="color: #008000;">- debug:</span>
<span style="color: #008000;"> var: xrandr</span>
<span style="color: #008000;">- debug:</span>
<span style="color: #008000;"> var: xorg</span>
<span style="color: #008000;">'''</span>
<span style="color: #BA36A5;">ARG_SPECS</span> = {
<span style="color: #008000;">'display'</span>: <span style="color: #006FE0;">dict</span>(default=<span style="color: #008000;">":0"</span>, <span style="color: #006FE0;">type</span>=<span style="color: #008000;">'str'</span>, required=<span style="color: #D0372D;">False</span>),
<span style="color: #008000;">'preferred_outputs'</span>: <span style="color: #006FE0;">dict</span>(
default=[<span style="color: #008000;">"HDMI"</span>, <span style="color: #008000;">"DP"</span>, <span style="color: #008000;">"DVI"</span>, <span style="color: #008000;">"VGA"</span>, <span style="color: #008000;">"TV"</span>], <span style="color: #006FE0;">type</span>=<span style="color: #008000;">'list'</span>, required=<span style="color: #D0372D;">False</span>),
<span style="color: #008000;">'preferred_refreshrates'</span>: <span style="color: #006FE0;">dict</span>(
default=[50, 60, 75, 30, 25], <span style="color: #006FE0;">type</span>=<span style="color: #008000;">'list'</span>, required=<span style="color: #D0372D;">False</span>),
<span style="color: #008000;">'preferred_resolutions'</span>: <span style="color: #006FE0;">dict</span>(
default=[
<span style="color: #008000;">"7680x4320"</span>, <span style="color: #008000;">"3840x2160"</span>, <span style="color: #008000;">"1920x1080"</span>, <span style="color: #008000;">"1280x720"</span>, <span style="color: #008000;">"720x576"</span>],
<span style="color: #006FE0;">type</span>=<span style="color: #008000;">'list'</span>, required=<span style="color: #D0372D;">False</span>),
<span style="color: #008000;">'write_edids'</span>: <span style="color: #006FE0;">dict</span>(default=<span style="color: #D0372D;">True</span>, <span style="color: #006FE0;">type</span>=<span style="color: #008000;">'bool'</span>, required=<span style="color: #D0372D;">False</span>),
}
<span style="color: #BA36A5;">SCREEN_REGEX</span> = re.<span style="color: #006FE0;">compile</span>(<span style="color: #008000;">"^(?P&lt;screen&gt;Screen\s\d+:)(?:.*)"</span>)
<span style="color: #BA36A5;">CONNECTOR_REGEX</span> = re.<span style="color: #006FE0;">compile</span>(
<span style="color: #008000;">"^(?P&lt;connector&gt;.*-\d+)\s(?P&lt;connection_state&gt;connected|disconnected)\s(?P&lt;primary&gt;primary)?"</span>)
<span style="color: #BA36A5;">MODE_REGEX</span> = re.<span style="color: #006FE0;">compile</span>(<span style="color: #008000;">"^\s+(?P&lt;resolution&gt;\d{3,}x\d{3,}).*"</span>)
<span style="color: #BA36A5;">Mode</span> = namedtuple(<span style="color: #008000;">'Mode'</span>, [<span style="color: #008000;">'connection'</span>, <span style="color: #008000;">'resolution'</span>, <span style="color: #008000;">'refreshrate'</span>])
<span style="color: #0000FF;">def</span> <span style="color: #006699;">check_for_screen</span>(line):
<span style="color: #036A07;">"""check line for screen information"""</span>
<span style="color: #BA36A5;">match</span> = re.match(SCREEN_REGEX, line)
<span style="color: #0000FF;">if</span> match:
<span style="color: #0000FF;">return</span> match.groupdict()[<span style="color: #008000;">'screen'</span>]
<span style="color: #0000FF;">def</span> <span style="color: #006699;">check_for_connection</span>(line):
<span style="color: #036A07;">"""check line for connection name and state"""</span>
<span style="color: #BA36A5;">match</span> = re.match(CONNECTOR_REGEX, line)
<span style="color: #BA36A5;">connector</span> = <span style="color: #D0372D;">None</span>
<span style="color: #BA36A5;">is_connected</span> = <span style="color: #D0372D;">False</span>
<span style="color: #0000FF;">if</span> match:
<span style="color: #BA36A5;">match</span> = match.groupdict()
<span style="color: #BA36A5;">connector</span> = match[<span style="color: #008000;">'connector'</span>]
<span style="color: #BA36A5;">is_connected</span> = <span style="color: #D0372D;">True</span> <span style="color: #0000FF;">if</span> match[<span style="color: #008000;">'connection_state'</span>] == <span style="color: #008000;">'connected'</span> <span style="color: #0000FF;">else</span> <span style="color: #D0372D;">False</span>
<span style="color: #0000FF;">return</span> connector, is_connected
<span style="color: #0000FF;">def</span> <span style="color: #006699;">get_indentation</span>(line):
<span style="color: #036A07;">"""return the number of leading whitespace characters"""</span>
<span style="color: #0000FF;">return</span> <span style="color: #006FE0;">len</span>(line) - <span style="color: #006FE0;">len</span>(line.lstrip())
<span style="color: #0000FF;">def</span> <span style="color: #006699;">sort_mode</span>(mode):
<span style="color: #036A07;">"""rate modes by several criteria"""</span>
<span style="color: #BA36A5;">connection_score</span> = 0
<span style="color: #BA36A5;">rrate_score</span> = 0
<span style="color: #BA36A5;">resolution_score</span> = 0
<span style="color: #BA36A5;">preferred_rrates</span> = module.params[<span style="color: #008000;">'preferred_refreshrates'</span>]
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">[50, 60]</span>
<span style="color: #BA36A5;">preferred_resolutions</span> = module.params[<span style="color: #008000;">'preferred_resolutions'</span>]
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">["7680x4320", "3840x2160", "1920x1080", "1280x720", "720x576"]</span>
<span style="color: #BA36A5;">preferred_outputs</span> = module.params[<span style="color: #008000;">'preferred_outputs'</span>]
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">["HDMI", "DP", "DVI", "VGA"]</span>
<span style="color: #0000FF;">if</span> mode.refreshrate <span style="color: #0000FF;">in</span> preferred_rrates:
<span style="color: #BA36A5;">rrate_score</span> = <span style="color: #006FE0;">len</span>(preferred_rrates) - preferred_rrates.index(mode.refreshrate)
<span style="color: #0000FF;">if</span> mode.resolution <span style="color: #0000FF;">in</span> preferred_resolutions:
<span style="color: #BA36A5;">resolution_score</span> = <span style="color: #006FE0;">len</span>(preferred_resolutions) - preferred_resolutions.index(mode.resolution)
<span style="color: #BA36A5;">x_resolution</span>, <span style="color: #BA36A5;">y_resolution</span> = (<span style="color: #006FE0;">int</span>(n) <span style="color: #0000FF;">for</span> n <span style="color: #0000FF;">in</span> mode.resolution.split(<span style="color: #008000;">'x'</span>))
<span style="color: #BA36A5;">connection</span> = mode.connection.split(<span style="color: #008000;">'-'</span>)[0]
<span style="color: #0000FF;">if</span> connection <span style="color: #0000FF;">in</span> preferred_outputs:
<span style="color: #BA36A5;">connection_score</span> = <span style="color: #006FE0;">len</span>(preferred_outputs) - preferred_outputs.index(connection)
<span style="color: #0000FF;">return</span> (rrate_score, resolution_score, x_resolution, y_resolution, connection_score)
<span style="color: #0000FF;">def</span> <span style="color: #006699;">parse_xrandr_verbose</span>(iterator):
<span style="color: #036A07;">"""parse the output of xrandr --verbose using an iterator delivering single lines"""</span>
<span style="color: #BA36A5;">xorg</span> = {}
<span style="color: #BA36A5;">is_connected</span> = <span style="color: #D0372D;">False</span>
<span style="color: #0000FF;">for</span> line <span style="color: #0000FF;">in</span> iterator:
<span style="color: #0000FF;">if</span> line.startswith(<span style="color: #008000;">'Screen'</span>):
<span style="color: #BA36A5;">screen</span> = check_for_screen(line)
<span style="color: #BA36A5;">xorg</span>[screen] = {}
<span style="color: #0000FF;">elif</span> <span style="color: #008000;">'connected'</span> <span style="color: #0000FF;">in</span> line:
<span style="color: #BA36A5;">connector</span>, <span style="color: #BA36A5;">is_connected</span> = check_for_connection(line)
xorg[screen][connector] = {
<span style="color: #008000;">'is_connected'</span>: is_connected,
<span style="color: #008000;">'EDID'</span>: <span style="color: #008000;">''</span>,
<span style="color: #008000;">'modes'</span>: {},
<span style="color: #008000;">'preferred'</span>: <span style="color: #008000;">''</span>,
<span style="color: #008000;">'current'</span>: <span style="color: #008000;">''</span>,
<span style="color: #008000;">'auto'</span>: <span style="color: #008000;">''</span>,
}
<span style="color: #0000FF;">elif</span> is_connected <span style="color: #0000FF;">and</span> <span style="color: #008000;">'EDID:'</span> <span style="color: #0000FF;">in</span> line:
<span style="color: #BA36A5;">edid_str</span> = <span style="color: #008000;">""</span>
<span style="color: #BA36A5;">outer_indentation</span> = get_indentation(line)
<span style="color: #0000FF;">while</span> <span style="color: #D0372D;">True</span>:
<span style="color: #BA36A5;">line</span> = <span style="color: #006FE0;">next</span>(iterator)
<span style="color: #0000FF;">if</span> get_indentation(line) &gt; outer_indentation:
<span style="color: #BA36A5;">edid_str</span> += line.strip()
<span style="color: #0000FF;">else</span>:
<span style="color: #0000FF;">break</span>
xorg[screen][connector][<span style="color: #008000;">'EDID'</span>] = edid_str
<span style="color: #0000FF;">elif</span> is_connected <span style="color: #0000FF;">and</span> <span style="color: #008000;">"MHz"</span> <span style="color: #0000FF;">in</span> line <span style="color: #0000FF;">and</span> <span style="color: #0000FF;">not</span> <span style="color: #008000;">"Interlace"</span> <span style="color: #0000FF;">in</span> line:
<span style="color: #BA36A5;">match</span> = re.match(MODE_REGEX, line)
<span style="color: #0000FF;">if</span> match:
<span style="color: #BA36A5;">match</span> = match.groupdict()
<span style="color: #BA36A5;">preferred</span> = <span style="color: #006FE0;">bool</span>(<span style="color: #008000;">"+preferred"</span> <span style="color: #0000FF;">in</span> line)
<span style="color: #BA36A5;">current</span> = <span style="color: #006FE0;">bool</span>(<span style="color: #008000;">"*current"</span> <span style="color: #0000FF;">in</span> line)
<span style="color: #0000FF;">while</span> <span style="color: #D0372D;">True</span>:
<span style="color: #BA36A5;">line</span> = <span style="color: #006FE0;">next</span>(iterator)
<span style="color: #0000FF;">if</span> line.strip().startswith(<span style="color: #008000;">'v:'</span>):
<span style="color: #BA36A5;">refresh_rate</span> = ast.literal_eval(line.split()[-1][:-2])
<span style="color: #BA36A5;">rrate</span> = <span style="color: #006FE0;">int</span>(<span style="color: #006FE0;">round</span>(refresh_rate))
<span style="color: #0000FF;">if</span> xorg[screen][connector][<span style="color: #008000;">'modes'</span>].get(match[<span style="color: #008000;">'resolution'</span>]) <span style="color: #0000FF;">is</span> <span style="color: #D0372D;">None</span>:
xorg[screen][connector][<span style="color: #008000;">'modes'</span>][match[<span style="color: #008000;">'resolution'</span>]] = []
<span style="color: #0000FF;">if</span> rrate <span style="color: #0000FF;">not</span> <span style="color: #0000FF;">in</span> xorg[screen][connector][<span style="color: #008000;">'modes'</span>][match[<span style="color: #008000;">'resolution'</span>]]:
xorg[screen][connector][<span style="color: #008000;">'modes'</span>][match[<span style="color: #008000;">'resolution'</span>]].append(rrate)
<span style="color: #0000FF;">if</span> preferred:
xorg[screen][connector][<span style="color: #008000;">'preferred'</span>] = <span style="color: #008000;">"{}_{}"</span>.<span style="color: #006FE0;">format</span>(
match[<span style="color: #008000;">'resolution'</span>], rrate)
<span style="color: #0000FF;">if</span> current:
xorg[screen][connector][<span style="color: #008000;">'current'</span>] = <span style="color: #008000;">"{}_{}"</span>.<span style="color: #006FE0;">format</span>(
match[<span style="color: #008000;">'resolution'</span>], rrate)
<span style="color: #0000FF;">break</span>
<span style="color: #0000FF;">return</span> xorg
<span style="color: #0000FF;">def</span> <span style="color: #006699;">parse_edid_data</span>(edid):
<span style="color: #BA36A5;">vendor</span> = <span style="color: #008000;">"Unknown"</span>
<span style="color: #BA36A5;">model</span> = <span style="color: #008000;">"Unknown"</span>
<span style="color: #BA36A5;">data</span> = subprocess.check_output(<span style="color: #008000;">"parse-edid &lt; {}"</span>.<span style="color: #006FE0;">format</span>(edid), shell=<span style="color: #D0372D;">True</span>, universal_newlines=<span style="color: #D0372D;">True</span>)
<span style="color: #0000FF;">for</span> line <span style="color: #0000FF;">in</span> data.splitlines():
<span style="color: #0000FF;">if</span> <span style="color: #008000;">"VendorName"</span> <span style="color: #0000FF;">in</span> line:
<span style="color: #BA36A5;">vendor</span> = line.strip().split(<span style="color: #008000;">'"'</span>)[1]
<span style="color: #0000FF;">if</span> <span style="color: #008000;">"ModelName"</span> <span style="color: #0000FF;">in</span> line:
<span style="color: #BA36A5;">model</span> = line.strip().split(<span style="color: #008000;">'"'</span>)[1]
<span style="color: #0000FF;">return</span> vendor, model
<span style="color: #0000FF;">def</span> <span style="color: #006699;">collect_nvidia_data</span>():
<span style="color: #BA36A5;">BusID_RE</span> = re.<span style="color: #006FE0;">compile</span>((
<span style="color: #008000;">'(?P&lt;domain&gt;[0-9a-fA-F]+)'</span>
<span style="color: #008000;">':'</span>
<span style="color: #008000;">'(?P&lt;bus&gt;[0-9a-fA-F]+)'</span>
<span style="color: #008000;">':'</span>
<span style="color: #008000;">'(?P&lt;device&gt;[0-9a-fA-F]+)'</span>
<span style="color: #008000;">'\.'</span>
<span style="color: #008000;">'(?P&lt;function&gt;[0-9a-fA-F]+)'</span>
))
<span style="color: #0000FF;">try</span>:
<span style="color: #BA36A5;">data</span> = subprocess.check_output([<span style="color: #008000;">"nvidia-smi"</span>, <span style="color: #008000;">"--query-gpu=name,pci.bus_id"</span>, <span style="color: #008000;">"--format=csv"</span>, <span style="color: #008000;">"-i0"</span>],
universal_newlines=<span style="color: #D0372D;">True</span>)
<span style="color: #0000FF;">except</span> subprocess.CalledProcessError:
<span style="color: #0000FF;">pass</span>
<span style="color: #0000FF;">else</span>:
<span style="color: #0000FF;">for</span> row <span style="color: #0000FF;">in</span> csv.DictReader(data.splitlines(), delimiter=<span style="color: #008000;">','</span>, skipinitialspace=<span style="color: #D0372D;">True</span>):
<span style="color: #BA36A5;">name</span> = row[<span style="color: #008000;">'name'</span>]
<span style="color: #BA36A5;">bus_id</span> = row[<span style="color: #008000;">'pci.bus_id'</span>]
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">pci.bus_id structure as reported by nvidia-smi: "domain:bus:device.function", in hex.</span>
<span style="color: #BA36A5;">match</span> = BusID_RE.search(bus_id)
<span style="color: #0000FF;">if</span> match:
<span style="color: #BA36A5;">domain</span>, <span style="color: #BA36A5;">bus</span>, <span style="color: #BA36A5;">device</span>, <span style="color: #BA36A5;">function</span> = (<span style="color: #006FE0;">int</span>(n, 16) <span style="color: #0000FF;">for</span> n <span style="color: #0000FF;">in</span> match.groups())
<span style="color: #BA36A5;">bus_id</span> = <span style="color: #008000;">"PCI:{:d}@{:d}:{:d}:{:d}"</span>.<span style="color: #006FE0;">format</span>(bus, domain, device, function)
<span style="color: #0000FF;">return</span> name, bus_id
<span style="color: #0000FF;">raise</span> <span style="color: #6434A3;">ValueError</span>
<span style="color: #0000FF;">def</span> <span style="color: #006699;">output_data</span>(data, write_edids=<span style="color: #D0372D;">True</span>):
<span style="color: #0000FF;">if</span> data:
<span style="color: #BA36A5;">modes</span> = []
<span style="color: #0000FF;">for</span> _, screen_data <span style="color: #0000FF;">in</span> data.items():
<span style="color: #0000FF;">for</span> connector, connection_data <span style="color: #0000FF;">in</span> screen_data.items():
<span style="color: #0000FF;">if</span> connection_data.get(<span style="color: #008000;">'EDID'</span>) <span style="color: #0000FF;">and</span> write_edids:
<span style="color: #0000FF;">with</span> <span style="color: #006FE0;">open</span>(<span style="color: #008000;">'/etc/X11/edid.{}.bin'</span>.<span style="color: #006FE0;">format</span>(connector), <span style="color: #008000;">'wb'</span>) <span style="color: #0000FF;">as</span> edid:
edid.write(binascii.a2b_hex(connection_data[<span style="color: #008000;">'EDID'</span>]))
<span style="color: #0000FF;">for</span> resolution, refreshrates <span style="color: #0000FF;">in</span> connection_data[<span style="color: #008000;">'modes'</span>].items():
<span style="color: #0000FF;">for</span> refreshrate <span style="color: #0000FF;">in</span> refreshrates:
modes.append(Mode(connector, resolution, refreshrate))
<span style="color: #0000FF;">if</span> modes:
<span style="color: #BA36A5;">result</span> = {}
<span style="color: #0000FF;">try</span>:
<span style="color: #BA36A5;">gpu_name</span>, <span style="color: #BA36A5;">bus_id</span> = collect_nvidia_data()
<span style="color: #0000FF;">except</span> <span style="color: #6434A3;">ValueError</span>:
<span style="color: #BA36A5;">gpu_name</span> = <span style="color: #D0372D;">None</span>
<span style="color: #BA36A5;">bus_id</span> = <span style="color: #D0372D;">None</span>
<span style="color: #0000FF;">def</span> <span style="color: #006699;">create_entry</span>(my_dict, name, connector, resolution, refreshrate, vendor, model):
<span style="color: #BA36A5;">my_dict</span>[name] = {
<span style="color: #008000;">'connector'</span>: connector,
<span style="color: #008000;">'resolution'</span>: resolution,
<span style="color: #008000;">'refreshrate'</span>: refreshrate,
<span style="color: #008000;">'edid'</span>: <span style="color: #008000;">'/etc/X11/edid.{}.bin'</span>.<span style="color: #006FE0;">format</span>(connector),
<span style="color: #008000;">'mode'</span>: <span style="color: #008000;">"{}_{}"</span>.<span style="color: #006FE0;">format</span>(resolution, refreshrate),
<span style="color: #008000;">'vendor'</span>: vendor,
<span style="color: #008000;">'model'</span>: model,
}
<span style="color: #0000FF;">if</span> gpu_name <span style="color: #0000FF;">and</span> bus_id:
result[name][<span style="color: #008000;">'gpu_name'</span>] = gpu_name
result[name][<span style="color: #008000;">'bus_id'</span>] = bus_id
<span style="color: #BA36A5;">connector_0</span>, <span style="color: #BA36A5;">resolution_0</span>, <span style="color: #BA36A5;">refreshrate_0</span> = <span style="color: #006FE0;">max</span>(modes, key=sort_mode)[:3]
<span style="color: #BA36A5;">vendor_0</span>, <span style="color: #BA36A5;">model_0</span> = parse_edid_data(<span style="color: #008000;">'/etc/X11/edid.{}.bin'</span>.<span style="color: #006FE0;">format</span>(connector_0))
create_entry(result, <span style="color: #008000;">'primary'</span>, connector_0, resolution_0, refreshrate_0, vendor_0, model_0)
<span style="color: #8D8D84;"># </span><span style="color: #8D8D84; font-style: italic;">check if additional monitors exist</span>
<span style="color: #BA36A5;">other_modes</span> = [mode <span style="color: #0000FF;">for</span> mode <span style="color: #0000FF;">in</span> modes <span style="color: #0000FF;">if</span> mode[0] != connector_0]
<span style="color: #0000FF;">if</span> other_modes:
<span style="color: #BA36A5;">connector_1</span>, <span style="color: #BA36A5;">resolution_1</span>, <span style="color: #BA36A5;">refreshrate_1</span> = <span style="color: #006FE0;">max</span>(other_modes, key=sort_mode)[:3]
<span style="color: #BA36A5;">vendor_1</span>, <span style="color: #BA36A5;">model_1</span> = parse_edid_data(<span style="color: #008000;">'/etc/X11/edid.{}.bin'</span>.<span style="color: #006FE0;">format</span>(connector_1))
create_entry(result, <span style="color: #008000;">'secondary'</span>, connector_1, resolution_1, refreshrate_1, vendor_1, model_1)
<span style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">print(json.dumps(data, sort_keys=True, indent=4))</span>
module.exit_json(changed=<span style="color: #D0372D;">True</span> <span style="color: #0000FF;">if</span> write_edids <span style="color: #0000FF;">else</span> <span style="color: #D0372D;">False</span>, ansible_facts={<span style="color: #008000;">'xrandr'</span>: data, <span style="color: #008000;">'xorg'</span>: result})
<span style="color: #0000FF;">if</span> <span style="color: #006FE0;">__name__</span> == <span style="color: #008000;">'__main__'</span>:
<span style="color: #BA36A5;">module</span> = AnsibleModule(argument_spec=ARG_SPECS, supports_check_mode=<span style="color: #D0372D;">False</span>,)
<span style="color: #0000FF;">try</span>:
<span style="color: #BA36A5;">d</span> = subprocess.check_output([<span style="color: #008000;">'xrandr'</span>, <span style="color: #008000;">'-d'</span>, module.params[<span style="color: #008000;">'display'</span>], <span style="color: #008000;">'--verbose'</span>], universal_newlines=<span style="color: #D0372D;">True</span>).splitlines()
<span style="color: #0000FF;">except</span> subprocess.CalledProcessError:
<span style="color: #BA36A5;">xorg_data</span> = {}
<span style="color: #0000FF;">else</span>:
<span style="color: #BA36A5;">xorg_data</span> = parse_xrandr_verbose(<span style="color: #006FE0;">iter</span>(d))
output_data(xorg_data, module.params[<span style="color: #008000;">'write_edids'</span>])
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-orgb81ba9d" class="outline-2">
<h2 id="orgb81ba9d"><span class="section-number-2">10</span> Handlers</h2>
<div class="outline-text-2" id="text-10">
<div class="org-src-container">
<pre class="src src-yaml">- <span style="color: #BA36A5;">name</span>: Restart Samba
<span style="color: #BA36A5;">systemd</span>:
<span style="color: #BA36A5;">name</span>: smbd.service
<span style="color: #BA36A5;">state</span>: restarted
<span style="color: #BA36A5;">enabled</span>: <span style="color: #D0372D;">yes</span>
<span style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">masked: no</span>
<span style="color: #BA36A5;">register</span>: samba_reload
- <span style="color: #BA36A5;">name</span>: Restart NFS Kernel Server
<span style="color: #BA36A5;">systemd</span>:
<span style="color: #BA36A5;">name</span>: nfs-server.service
<span style="color: #BA36A5;">state</span>: restarted
<span style="color: #BA36A5;">enabled</span>: <span style="color: #D0372D;">yes</span>
<span style="color: #8D8D84;">#</span><span style="color: #8D8D84; font-style: italic;">masked: no</span>
<span style="color: #BA36A5;">register</span>: nfs_reload
- <span style="color: #BA36A5;">name</span>: Restart VDR
<span style="color: #BA36A5;">systemd</span>:
<span style="color: #BA36A5;">name</span>: vdr.service
<span style="color: #BA36A5;">state</span>: restarted
<span style="color: #BA36A5;">enabled</span>: <span style="color: #D0372D;">yes</span>
<span style="color: #BA36A5;">register</span>: vdr_restart
- <span style="color: #BA36A5;">name</span>: Stop VDR
<span style="color: #BA36A5;">systemd</span>:
<span style="color: #BA36A5;">name</span>: vdr.service
<span style="color: #BA36A5;">state</span>: stopped
<span style="color: #BA36A5;">enabled</span>: <span style="color: #D0372D;">yes</span>
<span style="color: #BA36A5;">register</span>: vdr_stop
- <span style="color: #BA36A5;">name</span>: Start VDR
<span style="color: #BA36A5;">systemd</span>:
<span style="color: #BA36A5;">name</span>: vdr.service
<span style="color: #BA36A5;">state</span>: started
<span style="color: #BA36A5;">enabled</span>: <span style="color: #D0372D;">yes</span>
<span style="color: #BA36A5;">register</span>: vdr_start
- <span style="color: #BA36A5;">name</span>: Stop xlogin
<span style="color: #BA36A5;">systemd</span>:
<span style="color: #BA36A5;">name</span>: xlogin@vdr.service
<span style="color: #BA36A5;">state</span>: stopped
<span style="color: #BA36A5;">enabled</span>: <span style="color: #D0372D;">yes</span>
<span style="color: #BA36A5;">register</span>: xlogin_stop
- <span style="color: #BA36A5;">name</span>: Stop x
<span style="color: #BA36A5;">systemd</span>:
<span style="color: #BA36A5;">name</span>: x@vt7.service
<span style="color: #BA36A5;">state</span>: stopped
<span style="color: #BA36A5;">register</span>: x_stop
</pre>
</div>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Autor: Alexander Grothe &lt;seahawk1986@gmx.de&gt;</p>
<p class="date">Created: 2017-07-09 So 10:58</p>
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>
</html>