{"id":79,"date":"2010-09-03T22:03:05","date_gmt":"2010-09-03T20:03:05","guid":{"rendered":"http:\/\/mmed.roulleau.net\/?p=79"},"modified":"2010-09-03T22:03:05","modified_gmt":"2010-09-03T20:03:05","slug":"mythtv-et-lextinction-automatique-pour-une-machine-bureatiquefrontendbackend","status":"publish","type":"post","link":"https:\/\/mmed.roulleau.net\/?p=79","title":{"rendered":"MythTV et l&rsquo;extinction automatique pour une machine bureautique\/frontend\/backend"},"content":{"rendered":"<p>L&rsquo;une des fonctions d&rsquo;un Media Center, peut \u00eatre la plus impressionnante \u00e0 l&rsquo;usage,\u00a0 est sa facult\u00e9 \u00e0 se transformer en un puissant magn\u00e9toscope num\u00e9rique.<br \/>\nUne fois bien configur\u00e9, mon chouchou MythTV est capable de renvoyer au vestiaire le fameux <a href=\"http:\/\/fr.wikipedia.org\/wiki\/TiVo\">TiVo<\/a>, qui est pourtant d\u00e9j\u00e0 une petite r\u00e9volution dans l&rsquo;usage et la consommation de programmes t\u00e9l\u00e9visuels. La consommation diff\u00e9r\u00e9e et massive, \u00e0 l&rsquo;origine difficile par l&rsquo;usage de supports magn\u00e9tiques volumineux et nombreux, a pris un tournant avec l&rsquo;apport du num\u00e9rique, sa facilit\u00e9 de stockage et l&rsquo;usage ergonomique des outils intelligents qu&rsquo;il propose.<\/p>\n<p>Pour atteindre cet objectif de super-magn\u00e9toscope, il faut avoir bien configurer une option essentielle : l&rsquo;allumage et l&rsquo;exctinction automatique de la machine. D&rsquo;une part pour ne rater aucun enregistrement pour cause de machine \u00e9teinte, et d&rsquo;autre par pour ne pas voir sa facture d&rsquo;\u00e9lectricit\u00e9 drastiquement augmenter. Bien que simple \u00e0 \u00e9noncer,\u00a0 cette fonction est tr\u00e8s complexe \u00e0 mettre en oeuvre. Et pourquoi donc? Premi\u00e8rement, le PC n&rsquo;a pas \u00e9t\u00e9 pens\u00e9 pour \u00e7a; et deuxi\u00e8mement, le grand nombre d&rsquo;installations possibles rend l&rsquo;automatisation de la configuration tr\u00e8s difficile \u00e0 mettre en oeuvre. Choix a donc \u00e9t\u00e9 fait de laisser l&rsquo;utilisateur final se d\u00e9brouiller pour faire monter la sauce de lui m\u00eame. Il faut alors se retrousser les manches et ne pas avoir peur de scripter son installation.<\/p>\n<p>Apr\u00e8s cette longue introduction, j&rsquo;en viens enfin \u00e0 expliquer le double but de ce billet. D&rsquo;une part pour faire ce qui n&rsquo;est pas fait souvent dans les <a href=\"http:\/\/www.mythtv.org\/wiki\/ACPI_Wakeup\">howto<\/a>, \u00e0 savoir expliquer ce qui se passe r\u00e9ellement derri\u00e8re la sc\u00e8ne (\u00e0 l&rsquo;instar de mon <a href=\"http:\/\/mmed.roulleau.net\/?p=7\">pr\u00e9c\u00e9dent billet sur LIRC<\/a>). Et d&rsquo;autre part pour couvrir un exemple pas vraiment explicit\u00e9 dans les diff\u00e9rents tutos que j&rsquo;ai pu trouver : la machine MythTV frontend+backend+desktop.<\/p>\n<p>AVERTISSEMENT : Cet article, qui se veut un compl\u00e9ment et non un tutorial aveugle, est donc \u00e0 appr\u00e9cier en parall\u00e8le de la <a href=\"http:\/\/www.mythtv.org\/wiki\/ACPI_Wakeup\">lecture du howto de mythtv.org sur le sujet<\/a>.<\/p>\n<h1>Allumage et extinction de MythTV, behind the scenes<\/h1>\n<p>Le r\u00e9veil d&rsquo;un PC \u00e0 une heure pr\u00e9cise se fait par l&rsquo;utilisation d&rsquo;une fonction ACPI pr\u00e9sente dans la plupart des BIOS des machines vendues au grand public. Cette fonction est activable dans les menus de votre syst\u00e8me au d\u00e9marrage, et charge est ensuite \u00e0 l&rsquo;OS de pr\u00e9voir une interface permettant l&rsquo;acc\u00e8s en \u00e9criture \u00e0 cette horloge. C&rsquo;est heureusement le cas de GNU\/Linux qui pr\u00e9sente g\u00e9n\u00e9ralement le pseudo fichier<em> \/sys\/class\/rtc\/rtc0\/wakealarm<\/em> pour cette t\u00e2che. Je n&rsquo;irais pas plus loin, il y a d\u00e9j\u00e0 abondance de mati\u00e8re sur le sujet sur Internet.<\/p>\n<p>Petit exercice de logique : le backend de MythTV, seul \u00e0 \u00eatre au courant de l&rsquo;heure du prochain enregistrement, doit\u00a0 \u00eatre celui qui configure l&rsquo;heure du r\u00e9veil par l&rsquo;utilisation de cette interface. Afin de ne pas \u00e9crire \u00e0 tout bout de champ dans la petite m\u00e9moire de la carte m\u00e8re, et risquer ainsi de la corrompre ou de l&rsquo;user, cette \u00e9criture doit se faire logiquement \u00e0 l&rsquo;arr\u00eat de la machine afin d&rsquo;assurer son r\u00e9veil. Ceci implique tout aussi logiquement que MythTV soit <strong>l&rsquo;acteur principal de cet arr\u00eat<\/strong>. Afin de d\u00e9terminer qu&rsquo;une machine peut \u00eatre arr\u00eat\u00e9e, MythTV va donc utiliser un certain nombre de r\u00e8gles basiques :<\/p>\n<ul>\n<li>Est ce que qu&rsquo;un frontend est connect\u00e9 ?<\/li>\n<li>Est ce qu&rsquo;un enregistrement est en cours?<\/li>\n<li>Est ce qu&rsquo;un enregistrement arrive tr\u00e8s bient\u00f4t, et est-il trop tard pour faire un arr\u00eat?<\/li>\n<\/ul>\n<h2><span style=\"color: #ff0000;\"><strong>1-<\/strong><\/span> Backend seul<\/h2>\n<p>Si toutes les r\u00e9ponses \u00e0 ces questions sont n\u00e9gatives, alors MythTV provoque un arr\u00eat. Et avant d&rsquo;\u00e9teindre la machine, MythTV va \u00e9crire dans la m\u00e9moire de l&rsquo;alarme pour le r\u00e9veil.\u00a0 <strong>Les options (commande d&rsquo;arr\u00eat, commande d&rsquo;\u00e9criture dans la m\u00e9moire, diff\u00e9rentes variables temporelles) sont accessibles depuis la configuration du backend.<\/strong><\/p>\n<p>Si tout s&rsquo;est bien pass\u00e9,\u00a0 vous ne raterez pas votre fantastique Th\u00e9ma \u00ab\u00a0L&rsquo;histoire des p\u00e2tes\u00a0\u00bb sur Arte. G\u00e9nial non? Pas si vite, ne partez pas !! Il subsiste de nombreux probl\u00e8mes. Le probl\u00e8me d&rsquo;une telle solution est son manque de souplesse, car elle ne s&rsquo;applique que pour une machine faisant office de backend seul. Un exemple : ma mythbox, \u00e0 la fois frontend et backend, est configur\u00e9e pour lancer une session et un frontend automatiquement au d\u00e9marrage. C&rsquo;est indispensable \u00e0 mon avis si son usage principal est de tra\u00eener sous votre TV et non pas dans un grenier. Comment en effet envisager un Media Center qui afficherait au d\u00e9marrage une odieuse fen\u00eatre de login ou un simple environnement de bureau?<br \/>\nLe probl\u00e8me d&rsquo;un tel d\u00e9marrage dirig\u00e9 vers un frontend, c&rsquo;est que la machine ne s&rsquo;arr\u00eatera\u00a0 jamais, m\u00eame \u00e0 la fin de l&rsquo;enregistrement, car un frontend sera toujours connect\u00e9.<\/p>\n<h2><strong><span style=\"color: #ff0000;\">2-<\/span><\/strong> Backend et frontend.<\/h2>\n<p>Bien s\u00fbr, les d\u00e9veloppeurs\/utilisateurs de MythTV ont\u00a0 pens\u00e9 \u00e0 \u00e7\u00e0, et ont cr\u00e9\u00e9 MythWelcome. Nous voil\u00e0 donc dans le cas d&rsquo;une machine frontend + backend avec d\u00e9marrage automatique de session et de frontend.<br \/>\nMythWelcome est un sympathique programme qui sera lanc\u00e9 \u00e0 la place de votre frontend et d\u00e9terminera que faire : si le d\u00e9marrage semble \u00eatre manuel (si aucun programme \u00e0 enregistrer n&rsquo;est visible dans la tranche horaire \u00e0 venir), alors un frontend est lanc\u00e9 par dessus. Si le d\u00e9marrage est automatique, MythWelcome reste le seul programme lanc\u00e9, et comme il ne se connecte pas au backend, ce dernier \u00e9teindra la machine en se croyant tout seul.<br \/>\nAutre situation : le fontend est lanc\u00e9 par MythWelcome; \u00e0 la fin de la session, on quitte MythTV; MythWelcome repasse alors au premier plan et l&rsquo;extinction peut avoir lieu d\u00e8s que le backend l&rsquo;a d\u00e9cid\u00e9.<br \/>\nComme MythWelcome poss\u00e8de d&rsquo;autres atouts dans sa manche (plage horaire de r\u00e9veil automatique, verrouillage emp\u00eachant l&rsquo;extinction), les d\u00e9veloppeurs ont choisi de lui confier \u00e0 lui et son partenaire \u00ab\u00a0mythshutdown\u00a0\u00bb, plut\u00f4t qu&rsquo;au backend, la logique de gestion de l&rsquo;arr\u00eat de la machine.<strong> Les options (commande d&rsquo;arr\u00eat, commande d&rsquo;\u00e9criture), sont d\u00e9sormais du ressort de MythWelcome et configurables depuis son interface<\/strong>. <strong>Il est bien sur n\u00e9cessaire de configurer le backend afin qu&rsquo;il d\u00e9l\u00e8gue sa gestion \u00e0 MythWelcome. Ceci explique l&rsquo;usage de la commande mythshutdown que l&rsquo;on constate dans les diff\u00e9rents tutos sur le sujet disponibles sur Internet : le backend d\u00e9l\u00e8gue le contr\u00f4le \u00e0 cet outil bien pratique qui utilise les param\u00e8tres de MythWelcome.<\/strong><\/p>\n<p>Une petite subtilit\u00e9 que j&rsquo;ai apprise \u00e0 mes d\u00e9pends : La commande<\/p>\n<pre>Command to set Wakeup Time            \u00a0: mythshutdown --setwakeup $time\n<\/pre>\n<p>est un pi\u00e8ge. Elle n&rsquo;\u00e9crit en fait pas dans l&rsquo;heure de r\u00e9veil du bios, seulement dans la base de donn\u00e9es. C&rsquo;est en effet la commande<\/p>\n<pre>Server halt command                   \u00a0: mythshutdown --shutdown\n<\/pre>\n<p>qui s&rsquo;occupe de l&rsquo;\u00e9criture, ainsi que de l&rsquo;arr\u00eat de la machine. Le but de ce changement est de permettre \u00e0 MythWelcome de prendre en compte les plages de r\u00e9veil quotidienne que vous pouvez configurer.<br \/>\nC&rsquo;est une diff\u00e9rence de fonctionnement fondamentale avec la configuration \u00ab\u00a0simple\u00a0\u00bb de MythTV vu dans le paragraphe \u00ab\u00a0backend seul\u00a0\u00bb. Vous aurez besoin de cette information si vous avez un probl\u00e8me et chercher \u00e0 debugger votre environnement.<\/p>\n<p>Super ! Voil\u00e0 donc le cas d&rsquo;un frontend + backend couvert. Mais qu&rsquo;en est-il des autres combinaisons impliquant un backend?<\/p>\n<h2><strong><span style=\"color: #ff0000;\">3-<\/span><\/strong> Le combo backend et desktop.<\/h2>\n<p>Celui ci est vicieux. On souhaite se servir de son PC pour autre chose qu&rsquo;un \u00ab\u00a0simple\u00a0\u00bb enregistreur Media Center.<br \/>\nLa seule difficult\u00e9 est d&#8217;emp\u00eacher MythTV d&rsquo;\u00e9teindre le PC lorsqu&rsquo;aucun frontend n&rsquo;est connect\u00e9. MythWelcome et sa fonction de lock peuvent \u00eatre utilis\u00e9s pour \u00e7a, mais ce serait un d\u00e9tournement de sa fonction, loin d&rsquo;\u00eatre ergonomique qui plus est : qui aimerait voir un \u00e9cran bizarre d&rsquo;enregistreur num\u00e9rique se lancer \u00e0 l&rsquo;ouverture de sa session alors qu&rsquo;il souhaite juste aller consulter ses mails? Non, la solution est encore une fois d\u00e9crite sur le <a href=\"http:\/\/www.mythtv.org\/wiki\/ACPI_Wakeup\">wiki de mythtv<\/a> (rubrique desktop user). On fait un petit script d\u00e9tectant si un utilisateur est connect\u00e9 au syst\u00e8me. Si oui, alors MythTV n&rsquo;a pas le droit d&rsquo;\u00e9teindre la machine. Tout simple et \u00e9vident.<strong> Dans cette configuration, c&rsquo;est le setup de MythTV qui est responsable de la configuration de cet ensemble, aid\u00e9 d&rsquo;un script de pr\u00e9-extinction contr\u00f4lant les utilisateurs connect\u00e9s<\/strong>. Ceci implique aussi d&#8217;emp\u00eacher toute extinction manuelle du syst\u00e8me (ou alors avec un script utilisant mythshutdown).\u00a0 <strong>On veillera donc du coup\u00a0 \u00e0 autoriser uniquement les utilisateurs \u00e0 se \u00ab\u00a0d\u00e9connecter\u00a0\u00bb<\/strong>, probablement par la configuration de votre environnement de bureau.<\/p>\n<p>Le v\u00e9ritable probl\u00e8me arrive, avec la derni\u00e8re combinaison impliquant un backend. Et c&rsquo;est sur ce point que je n&rsquo;ai pas vraiment vu de tutos sur Internet.<\/p>\n<h1>Le triple combo backend-frontend-desktop<\/h1>\n<p>Voil\u00e0 la situation : une machine enregistrant la t\u00e9l\u00e9vision en arri\u00e8re plan, servant principalement de frontend, mais pouvant aussi d\u00e9panner pour n&rsquo;importe quel t\u00e2che habituellement d\u00e9volue \u00e0 la bureautique (photos, mail, vid\u00e9os de <a href=\"http:\/\/icanhascheezburger.com\">lolcat<\/a> sur internet).<\/p>\n<p>Dans cette configuration, voici le cahier des charges :<\/p>\n<ul>\n<li>Allumage automatique sur le frontend<\/li>\n<li>Pas d&rsquo;extinction automatique si en cours d&rsquo;usage bureautique<\/li>\n<li>Allumage automatique pour un enregistrement<\/li>\n<li>Extinction automatique apr\u00e8s un enregistrement suite \u00e0 un allumage automatique<\/li>\n<\/ul>\n<p>Le point 1 et 4 implique l&rsquo;utilisation de MythWelcome.<br \/>\nLe point 2 implique l&rsquo;utilisation du script de d\u00e9tection d&rsquo;utilisateur connect\u00e9.<br \/>\nProbl\u00e8me : si une session est lanc\u00e9e au d\u00e9marrage, accompagn\u00e9e de MythWelcome, alors le script de d\u00e9tection d&rsquo;utilisateur connect\u00e9 emp\u00eachera toujours MythTV d&rsquo;\u00e9teindre la machine, ce qui ne respecte pas le point num\u00e9ro 4.<\/p>\n<p>Une solution sous entendue par les tutos du site MythTV, mais jamais \u00e9nonc\u00e9e directement, est d&rsquo;utiliser la fonction de lock offerte par MythWelcome. En verrouillant l&rsquo;arr\u00eat, on se pr\u00e9munit du probl\u00e8me et on peut alors utiliser son PC de fa\u00e7on bureautique. Le probl\u00e8me est qu&rsquo;il faut ensuite enlever ce verrou, soit en lan\u00e7ant de nouveau MythWelcome, soit par une ligne de commande, raccourci, ou touche de t\u00e9l\u00e9commande configur\u00e9e de fa\u00e7on ad\u00e9quate. On a vu mieux au niveau ergonomie.<br \/>\nLorsque j&rsquo;ai configur\u00e9 une telle machine pour mon environnement familial, j&rsquo;avais des besoins tr\u00e8s clairs : aucune contrainte superflue. Le verrou de MythWelcome dans cette situation d&rsquo;usage bureautique en \u00e9tait clairement une. MythWelcome doit se faire compl\u00e8tement oublier. Si je veux cliquer sur le menu K et demander l&rsquo;arr\u00eat de l&rsquo;ordinateur, je veux pouvoir le faire sans penser \u00e0 d\u00e9verrouiller l&rsquo;extinction automatique qui doit avoir lieu.<\/p>\n<p>La solution \u00e0 mon probl\u00e8me est une petite modification toute b\u00eate du script de d\u00e9tection de l&rsquo;utilisateur :<\/p>\n<pre># Check to see if anyone is currently logged in. Return zero if not and 1 if so.\n# Echoed text appears in log file. It can be removed and --quiet added to the\n# grep command once you are satisfied that mythTV is working properly\nresult=1\n#\nif\n    mythshutdown --check\nthen\n    echo mythshutdown ok to shut\n    result=0\nelse\n    result=1\n    echo mythshutdown not ok to shut\n    echo result : $result\nexit $result\nfi\n#\nif\n    w | grep -v grep | grep \" 0 user\"\nthen\n    echo `date` \" No one is logged in, ok to shut down.\" #&gt;&gt; \/home\/mythtv\/.mythtv\/extinction.log\n    result=0\nelse\n    echo `date` \" Someone is still logged in, do not shut down?\" #&gt;&gt; \/home\/mythtv\/.mythtv\/extinction.log\n    if\n        ps -edf | grep mythwelcome | grep -v grep\n    then\n        echo `date` \" Mythwelcome is launched, so its ok to shut\" #&gt;&gt; \/home\/mythtv\/.mythtv\/extinction.log\n        result=0\n    else\n        echo `date` \" No mythwelcome, no shutdown\" #&gt;&gt; \/home\/mythtv\/.mythtv\/extinction.log\n        result=1\n    fi\nfi\n#\necho result : $result\nexit $result<\/pre>\n<p>Ce script est \u00e0 lancer en pr\u00e9requis de tout arr\u00eat. C&rsquo;est \u00e0 dire qu&rsquo;il faut le placer \u00e0 \u00ab\u00a0Pre Shutdown check-command\u00a0\u00bb dans la configuration de MythTV, \u00e0 la place du \u00ab\u00a0mythshutdown &#8211;check\u00a0\u00bb mentionn\u00e9 pour la mise en place de MythWelcome. C&rsquo;est d&rsquo;ailleurs pour cette raison que la premi\u00e8re tache de ce script est d&rsquo;appeler \u00ab\u00a0mythshutdown &#8211;check\u00a0\u00bb pour effectuer les v\u00e9rifications qui lui sont li\u00e9es.<\/p>\n<p>Ce script v\u00e9rifie si un utilisateur est connect\u00e9. Si non, alors l&rsquo;arr\u00eat est autoris\u00e9 (c&rsquo;est par exemple le cas d&rsquo;un utilisateur qui s&rsquo;est d\u00e9connect\u00e9 de la session). Si oui, alors il v\u00e9rifie si MythWelcome est lanc\u00e9. Si MythWelcome n&rsquo;est pas lanc\u00e9, alors c&rsquo;est qu&rsquo;on est en train de faire un usage bureautique de sa machine et qu&rsquo;il ne faut pas s&rsquo;\u00e9teindre. Mais si MythWelcome est lanc\u00e9, alors nous avons l\u00e0 une exception \u00e0 la r\u00e8gle interdisant l&rsquo;arr\u00eat si un utilisateur est connect\u00e9, et il est donc possible d&rsquo;\u00e9teindre la machine.\u00a0 Ce script \u00e9tant lanc\u00e9 par le backend MythTV apr\u00e8s ses propres v\u00e9rifications (frontend lanc\u00e9?), on ne risque pas d&rsquo;interrompre une session de visualisation malgr\u00e9 le fait que MythWelcome soit toujours lanc\u00e9 lorsqu&rsquo;on utilise le frontend. Vous m&rsquo;avez suivi j&rsquo;esp\u00e8re?<\/p>\n<h2>Bonus : D\u00e9connexion par la touche d&rsquo;une t\u00e9l\u00e9commande<\/h2>\n<p>Dans ce cadre, j&rsquo;ai eu \u00e0 rechercher comment d\u00e9connecter l&rsquo;utilisateur par l&rsquo;action d&rsquo;une touche de la t\u00e9l\u00e9commande (toujours dans l&rsquo;optique de s&rsquo;affranchir au maximum des contraintes du retour \u00e0 MythWelcome). Voici la commande magique valable pour KDE 4:<\/p>\n<p><code>\/usr\/bin\/qdbus org.kde.ksmserver \/KSMServer logout 0 2 0<\/code><\/p>\n<p>Il est ensuite facile de combiner cette commande avec LIRC et irexec pour qu&rsquo;une touche lance le processus \u00ab\u00a0s\u00fbr\u00a0\u00bb d&rsquo;arr\u00eat de votre machine. Vous pouvez aussi utiliser mythshutdown \u00e0 la place pour que l&rsquo;arr\u00eat soit direct plut\u00f4t que temporis\u00e9.<\/p>\n<div id=\"_mcePaste\" style=\"overflow: hidden; position: absolute; left: -10000px; top: 1805px; width: 1px; height: 1px;\">\n<pre>Pre Shutdown check-command<\/pre>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>L&rsquo;une des fonctions d&rsquo;un Media Center, peut \u00eatre la plus impressionnante \u00e0 l&rsquo;usage,\u00a0 est sa facult\u00e9 \u00e0 se transformer en un puissant magn\u00e9toscope num\u00e9rique. Une fois bien configur\u00e9, mon chouchou MythTV est capable de renvoyer au vestiaire le fameux TiVo, qui est pourtant d\u00e9j\u00e0 une petite r\u00e9volution dans l&rsquo;usage et la consommation de programmes t\u00e9l\u00e9visuels. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[7],"tags":[10,15,19,29,41],"_links":{"self":[{"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=\/wp\/v2\/posts\/79"}],"collection":[{"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=79"}],"version-history":[{"count":0,"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=\/wp\/v2\/posts\/79\/revisions"}],"wp:attachment":[{"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=79"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=79"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=79"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}