Fixed restoration of the panel divider position.
[psensor.git] / README.html
1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
6 <meta name="viewport" content="width=device-width, initial-scale=1.0">
7 <meta name="generator" content="Asciidoctor 1.5.4">
8 <title>Psensor README</title>
9 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
10 <style>
11 /* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
12 /* Remove comment around @import statement below when using as a custom stylesheet */
13 /*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
14 article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
15 audio,canvas,video{display:inline-block}
16 audio:not([controls]){display:none;height:0}
17 [hidden],template{display:none}
18 script{display:none!important}
19 html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
20 body{margin:0}
21 a{background:transparent}
22 a:focus{outline:thin dotted}
23 a:active,a:hover{outline:0}
24 h1{font-size:2em;margin:.67em 0}
25 abbr[title]{border-bottom:1px dotted}
26 b,strong{font-weight:bold}
27 dfn{font-style:italic}
28 hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
29 mark{background:#ff0;color:#000}
30 code,kbd,pre,samp{font-family:monospace;font-size:1em}
31 pre{white-space:pre-wrap}
32 q{quotes:"\201C" "\201D" "\2018" "\2019"}
33 small{font-size:80%}
34 sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
35 sup{top:-.5em}
36 sub{bottom:-.25em}
37 img{border:0}
38 svg:not(:root){overflow:hidden}
39 figure{margin:0}
40 fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
41 legend{border:0;padding:0}
42 button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
43 button,input{line-height:normal}
44 button,select{text-transform:none}
45 button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
46 button[disabled],html input[disabled]{cursor:default}
47 input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
48 input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}
49 input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}
50 button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
51 textarea{overflow:auto;vertical-align:top}
52 table{border-collapse:collapse;border-spacing:0}
53 *,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
54 html,body{font-size:100%}
55 body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto}
56 a:hover{cursor:pointer}
57 img,object,embed{max-width:100%;height:auto}
58 object,embed{height:100%}
59 img{-ms-interpolation-mode:bicubic}
60 .left{float:left!important}
61 .right{float:right!important}
62 .text-left{text-align:left!important}
63 .text-right{text-align:right!important}
64 .text-center{text-align:center!important}
65 .text-justify{text-align:justify!important}
66 .hide{display:none}
67 body{-webkit-font-smoothing:antialiased}
68 img,object,svg{display:inline-block;vertical-align:middle}
69 textarea{height:auto;min-height:50px}
70 select{width:100%}
71 .center{margin-left:auto;margin-right:auto}
72 .spread{width:100%}
73 p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{font-size:1.21875em;line-height:1.6}
74 .subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
75 div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
76 a{color:#2156a5;text-decoration:underline;line-height:inherit}
77 a:hover,a:focus{color:#1d4b8f}
78 a img{border:none}
79 p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
80 p aside{font-size:.875em;line-height:1.35;font-style:italic}
81 h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
82 h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
83 h1{font-size:2.125em}
84 h2{font-size:1.6875em}
85 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
86 h4,h5{font-size:1.125em}
87 h6{font-size:1em}
88 hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
89 em,i{font-style:italic;line-height:inherit}
90 strong,b{font-weight:bold;line-height:inherit}
91 small{font-size:60%;line-height:inherit}
92 code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
93 ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
94 ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em}
95 ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
96 ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
97 ul.square{list-style-type:square}
98 ul.circle{list-style-type:circle}
99 ul.disc{list-style-type:disc}
100 ul.no-bullet{list-style:none}
101 ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
102 dl dt{margin-bottom:.3125em;font-weight:bold}
103 dl dd{margin-bottom:1.25em}
104 abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
105 abbr{text-transform:none}
106 blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
107 blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
108 blockquote cite:before{content:"\2014 \0020"}
109 blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
110 blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
111 @media only screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
112 h1{font-size:2.75em}
113 h2{font-size:2.3125em}
114 h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
115 h4{font-size:1.4375em}}
116 table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
117 table thead,table tfoot{background:#f7f8f7;font-weight:bold}
118 table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
119 table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
120 table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}
121 table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
122 body{tab-size:4}
123 h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
124 h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
125 .clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:" ";display:table}
126 .clearfix:after,.float-group:after{clear:both}
127 *:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
128 pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
129 .keyseq{color:rgba(51,51,51,.8)}
130 kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background-color:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
131 .keyseq kbd:first-child{margin-left:0}
132 .keyseq kbd:last-child{margin-right:0}
133 .menuseq,.menu{color:rgba(0,0,0,.8)}
134 b.button:before,b.button:after{position:relative;top:-1px;font-weight:400}
135 b.button:before{content:"[";padding:0 3px 0 2px}
136 b.button:after{content:"]";padding:0 2px 0 3px}
137 p a>code:hover{color:rgba(0,0,0,.9)}
138 #header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
139 #header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:" ";display:table}
140 #header:after,#content:after,#footnotes:after,#footer:after{clear:both}
141 #content{margin-top:1.25em}
142 #content:before{content:none}
143 #header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
144 #header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}
145 #header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #ddddd8;padding-bottom:8px}
146 #header .details{border-bottom:1px solid #ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
147 #header .details span:first-child{margin-left:-.125em}
148 #header .details span.email a{color:rgba(0,0,0,.85)}
149 #header .details br{display:none}
150 #header .details br+span:before{content:"\00a0\2013\00a0"}
151 #header .details br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
152 #header .details br+span#revremark:before{content:"\00a0|\00a0"}
153 #header #revnumber{text-transform:capitalize}
154 #header #revnumber:after{content:"\00a0"}
155 #content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
156 #toc{border-bottom:1px solid #efefed;padding-bottom:.5em}
157 #toc>ul{margin-left:.125em}
158 #toc ul.sectlevel0>li>a{font-style:italic}
159 #toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
160 #toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
161 #toc li{line-height:1.3334;margin-top:.3334em}
162 #toc a{text-decoration:none}
163 #toc a:active{text-decoration:underline}
164 #toctitle{color:#7a2518;font-size:1.2em}
165 @media only screen and (min-width:768px){#toctitle{font-size:1.375em}
166 body.toc2{padding-left:15em;padding-right:0}
167 #toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
168 #toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
169 #toc.toc2>ul{font-size:.9em;margin-bottom:0}
170 #toc.toc2 ul ul{margin-left:0;padding-left:1em}
171 #toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
172 body.toc2.toc-right{padding-left:0;padding-right:15em}
173 body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #efefed;left:auto;right:0}}
174 @media only screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
175 #toc.toc2{width:20em}
176 #toc.toc2 #toctitle{font-size:1.375em}
177 #toc.toc2>ul{font-size:.95em}
178 #toc.toc2 ul ul{padding-left:1.25em}
179 body.toc2.toc-right{padding-left:0;padding-right:20em}}
180 #content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
181 #content #toc>:first-child{margin-top:0}
182 #content #toc>:last-child{margin-bottom:0}
183 #footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}
184 #footer-text{color:rgba(255,255,255,.8);line-height:1.44}
185 .sect1{padding-bottom:.625em}
186 @media only screen and (min-width:768px){.sect1{padding-bottom:1.25em}}
187 .sect1+.sect1{border-top:1px solid #efefed}
188 #content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
189 #content h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
190 #content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
191 #content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
192 #content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
193 .audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
194 .admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
195 table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0}
196 .paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type p{color:rgba(0,0,0,.85)}
197 table.tableblock #preamble>.sectionbody>.paragraph:first-of-type p{font-size:inherit}
198 .admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
199 .admonitionblock>table td.icon{text-align:center;width:80px}
200 .admonitionblock>table td.icon img{max-width:none}
201 .admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
202 .admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #ddddd8;color:rgba(0,0,0,.6)}
203 .admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
204 .exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
205 .exampleblock>.content>:first-child{margin-top:0}
206 .exampleblock>.content>:last-child{margin-bottom:0}
207 .sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
208 .sidebarblock>:first-child{margin-top:0}
209 .sidebarblock>:last-child{margin-bottom:0}
210 .sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
211 .exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
212 .literalblock pre,.listingblock pre:not(.highlight),.listingblock pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}
213 .sidebarblock .literalblock pre,.sidebarblock .listingblock pre:not(.highlight),.sidebarblock .listingblock pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight "],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock pre.prettyprint{background:#f2f1f1}
214 .literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}
215 .literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock pre.nowrap,.listingblock pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}
216 @media only screen and (min-width:768px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:.90625em}}
217 @media only screen and (min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock pre[class]{font-size:1em}}
218 .literalblock.output pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
219 .listingblock pre.highlightjs{padding:0}
220 .listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
221 .listingblock pre.prettyprint{border-width:0}
222 .listingblock>.content{position:relative}
223 .listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}
224 .listingblock:hover code[data-lang]:before{display:block}
225 .listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:#999}
226 .listingblock.terminal pre .command:not([data-prompt]):before{content:"$"}
227 table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none}
228 table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0;line-height:1.45}
229 table.pyhltable td.code{padding-left:.75em;padding-right:0}
230 pre.pygments .lineno,table.pyhltable td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px solid #ddddd8}
231 pre.pygments .lineno{display:inline-block;margin-right:.25em}
232 table.pyhltable .linenodiv{background:none!important;padding-right:0!important}
233 .quoteblock{margin:0 1em 1.25em 1.5em;display:table}
234 .quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
235 .quoteblock blockquote,.quoteblock blockquote p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
236 .quoteblock blockquote{margin:0;padding:0;border:0}
237 .quoteblock blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
238 .quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
239 .quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}
240 .quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 0;border-left:3px solid rgba(0,0,0,.6)}
241 .quoteblock .quoteblock blockquote{padding:0 0 0 .75em}
242 .quoteblock .quoteblock blockquote:before{display:none}
243 .verseblock{margin:0 1em 1.25em 1em}
244 .verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
245 .verseblock pre strong{font-weight:400}
246 .verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
247 .quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
248 .quoteblock .attribution br,.verseblock .attribution br{display:none}
249 .quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
250 .quoteblock.abstract{margin:0 0 1.25em 0;display:block}
251 .quoteblock.abstract blockquote,.quoteblock.abstract blockquote p{text-align:left;word-spacing:0}
252 .quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote p:first-of-type:before{display:none}
253 table.tableblock{max-width:100%;border-collapse:separate}
254 table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0}
255 table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
256 table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 1px 0}
257 table.grid-all tfoot>tr>th.tableblock,table.grid-all tfoot>tr>td.tableblock{border-width:1px 1px 0 0}
258 table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 0 0}
259 table.grid-all *>tr>.tableblock:last-child,table.grid-cols *>tr>.tableblock:last-child{border-right-width:0}
260 table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 1px 0}
261 table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all tbody>tr:last-child>td.tableblock,table.grid-all thead:last-child>tr>th.tableblock,table.grid-rows tbody>tr:last-child>th.tableblock,table.grid-rows tbody>tr:last-child>td.tableblock,table.grid-rows thead:last-child>tr>th.tableblock{border-bottom-width:0}
262 table.grid-rows tfoot>tr>th.tableblock,table.grid-rows tfoot>tr>td.tableblock{border-width:1px 0 0 0}
263 table.frame-all{border-width:1px}
264 table.frame-sides{border-width:0 1px}
265 table.frame-topbot{border-width:1px 0}
266 th.halign-left,td.halign-left{text-align:left}
267 th.halign-right,td.halign-right{text-align:right}
268 th.halign-center,td.halign-center{text-align:center}
269 th.valign-top,td.valign-top{vertical-align:top}
270 th.valign-bottom,td.valign-bottom{vertical-align:bottom}
271 th.valign-middle,td.valign-middle{vertical-align:middle}
272 table thead th,table tfoot th{font-weight:bold}
273 tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
274 tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
275 p.tableblock>code:only-child{background:none;padding:0}
276 p.tableblock{font-size:1em}
277 td>div.verse{white-space:pre}
278 ol{margin-left:1.75em}
279 ul li ol{margin-left:1.5em}
280 dl dd{margin-left:1.125em}
281 dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
282 ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
283 ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none}
284 ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em}
285 ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em}
286 ul.checklist li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px}
287 ul.inline{margin:0 auto .625em auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden}
288 ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block}
289 ul.inline>li>*{display:block}
290 .unstyled dl dt{font-weight:400;font-style:normal}
291 ol.arabic{list-style-type:decimal}
292 ol.decimal{list-style-type:decimal-leading-zero}
293 ol.loweralpha{list-style-type:lower-alpha}
294 ol.upperalpha{list-style-type:upper-alpha}
295 ol.lowerroman{list-style-type:lower-roman}
296 ol.upperroman{list-style-type:upper-roman}
297 ol.lowergreek{list-style-type:lower-greek}
298 .hdlist>table,.colist>table{border:0;background:none}
299 .hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
300 td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
301 td.hdlist1{font-weight:bold;padding-bottom:1.25em}
302 .literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
303 .colist>table tr>td:first-of-type{padding:0 .75em;line-height:1}
304 .colist>table tr>td:last-of-type{padding:.25em 0}
305 .thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
306 .imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 0}
307 .imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em .625em}
308 .imageblock>.title{margin-bottom:0}
309 .imageblock.thumb,.imageblock.th{border-width:6px}
310 .imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
311 .image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
312 .image.left{margin-right:.625em}
313 .image.right{margin-left:.625em}
314 a.image{text-decoration:none;display:inline-block}
315 a.image object{pointer-events:none}
316 sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
317 sup.footnote a,sup.footnoteref a{text-decoration:none}
318 sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
319 #footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
320 #footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 0;border-width:1px 0 0 0}
321 #footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;text-indent:-1.05em;margin-bottom:.2em}
322 #footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none}
323 #footnotes .footnote:last-of-type{margin-bottom:0}
324 #content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
325 .gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
326 .gist .file-data>table td.line-data{width:99%}
327 div.unbreakable{page-break-inside:avoid}
328 .big{font-size:larger}
329 .small{font-size:smaller}
330 .underline{text-decoration:underline}
331 .overline{text-decoration:overline}
332 .line-through{text-decoration:line-through}
333 .aqua{color:#00bfbf}
334 .aqua-background{background-color:#00fafa}
335 .black{color:#000}
336 .black-background{background-color:#000}
337 .blue{color:#0000bf}
338 .blue-background{background-color:#0000fa}
339 .fuchsia{color:#bf00bf}
340 .fuchsia-background{background-color:#fa00fa}
341 .gray{color:#606060}
342 .gray-background{background-color:#7d7d7d}
343 .green{color:#006000}
344 .green-background{background-color:#007d00}
345 .lime{color:#00bf00}
346 .lime-background{background-color:#00fa00}
347 .maroon{color:#600000}
348 .maroon-background{background-color:#7d0000}
349 .navy{color:#000060}
350 .navy-background{background-color:#00007d}
351 .olive{color:#606000}
352 .olive-background{background-color:#7d7d00}
353 .purple{color:#600060}
354 .purple-background{background-color:#7d007d}
355 .red{color:#bf0000}
356 .red-background{background-color:#fa0000}
357 .silver{color:#909090}
358 .silver-background{background-color:#bcbcbc}
359 .teal{color:#006060}
360 .teal-background{background-color:#007d7d}
361 .white{color:#bfbfbf}
362 .white-background{background-color:#fafafa}
363 .yellow{color:#bfbf00}
364 .yellow-background{background-color:#fafa00}
365 span.icon>.fa{cursor:default}
366 .admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
367 .admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c}
368 .admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
369 .admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900}
370 .admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400}
371 .admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000}
372 .conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
373 .conum[data-value] *{color:#fff!important}
374 .conum[data-value]+b{display:none}
375 .conum[data-value]:after{content:attr(data-value)}
376 pre .conum[data-value]{position:relative;top:-.125em}
377 b.conum *{color:inherit!important}
378 .conum:not([data-value]):empty{display:none}
379 dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
380 h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
381 p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
382 p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
383 p{margin-bottom:1.25rem}
384 .sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
385 .exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
386 .print-only{display:none!important}
387 @media print{@page{margin:1.25cm .75cm}
388 *{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
389 a{color:inherit!important;text-decoration:underline!important}
390 a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
391 a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
392 abbr[title]:after{content:" (" attr(title) ")"}
393 pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
394 thead{display:table-header-group}
395 svg{max-width:100%}
396 p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
397 h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
398 #toc,.sidebarblock,.exampleblock>.content{background:none!important}
399 #toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}
400 .sect1{padding-bottom:0!important}
401 .sect1+.sect1{border:0!important}
402 #header>h1:first-child{margin-top:1.25rem}
403 body.book #header{text-align:center}
404 body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0}
405 body.book #header .details{border:0!important;display:block;padding:0!important}
406 body.book #header .details span:first-child{margin-left:0!important}
407 body.book #header .details br{display:block}
408 body.book #header .details br+span:before{content:none!important}
409 body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
410 body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
411 .listingblock code[data-lang]:before{display:block}
412 #footer{background:none!important;padding:0 .9375em}
413 #footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em}
414 .hide-on-print{display:none!important}
415 .print-only{display:block!important}
416 .hide-for-print{display:none!important}
417 .show-for-print{display:inherit!important}}
418 </style>
419 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css">
420 </head>
421 <body class="article">
422 <div id="header">
423 <h1>Psensor README</h1>
424 <div id="toc" class="toc">
425 <div id="toctitle">Table of Contents</div>
426 <ul class="sectlevel1">
427 <li><a href="#_introduction">1. Introduction</a></li>
428 <li><a href="#_installation_using_distribution_packages">2. Installation Using Distribution Packages</a>
429 <ul class="sectlevel2">
430 <li><a href="#_debian">2.1. Debian</a></li>
431 <li><a href="#_ubuntu">2.2. Ubuntu</a></li>
432 </ul>
433 </li>
434 <li><a href="#_installation_from_source_archive">3. Installation From Source Archive</a>
435 <ul class="sectlevel2">
436 <li><a href="#_compilation_prerequisites">3.1. Compilation Prerequisites</a></li>
437 <li><a href="#_compilation_and_installation_steps">3.2. Compilation and Installation Steps</a></li>
438 <li><a href="#_ati_amd_gpu_support">3.3. ATI/AMD GPU Support</a></li>
439 </ul>
440 </li>
441 <li><a href="#_contact">4. Contact</a></li>
442 </ul>
443 </div>
444 </div>
445 <div id="content">
446 <div class="sect1">
447 <h2 id="_introduction">1. Introduction</h2>
448 <div class="sectionbody">
449 <div class="paragraph">
450 <p>Psensor is a graphical hardware monitoring application for Linux.</p>
451 </div>
452 <div class="paragraph">
453 <p>It draws realtime charts and raises alerts about:</p>
454 </div>
455 <div class="ulist">
456 <ul>
457 <li>
458 <p>the temperature of the motherboard and CPU sensors (using
459 lm-sensors).</p>
460 </li>
461 <li>
462 <p>the temperature of the NVidia GPUs (using XNVCtrl).</p>
463 </li>
464 <li>
465 <p>the temperature of ATI GPUs (using ATI ADL SDK).</p>
466 </li>
467 <li>
468 <p>the temperature of the Hard Disk Drives (using hddtemp, libatasmart
469 or udisks2).</p>
470 </li>
471 <li>
472 <p>the rotation speed of the fans.</p>
473 </li>
474 <li>
475 <p>the temperature of a remote computer.</p>
476 </li>
477 <li>
478 <p>the CPU load.</p>
479 </li>
480 </ul>
481 </div>
482 <div class="paragraph">
483 <p>Alerts are using Desktop Notification and a specific GTK+ status icon.</p>
484 </div>
485 <div class="paragraph">
486 <p>For Ubuntu users, Psensor is providing an Application Indicator which turns
487 red under alert and a menu for quickly check all sensors.</p>
488 </div>
489 <div class="paragraph">
490 <p>It is possible to monitor remotely a computer:</p>
491 </div>
492 <div class="ulist">
493 <ul>
494 <li>
495 <p>start psensor-server on the remote computer.</p>
496 </li>
497 <li>
498 <p>start psensor using: psensor --url=http://hostname:3131.</p>
499 </li>
500 </ul>
501 </div>
502 <div class="paragraph">
503 <p>psensor-server is a minimal Web server, a Web browser can be used to
504 monitor the remote computer by opening the URL:
505 http://hostname:3131.</p>
506 </div>
507 <div class="admonitionblock warning">
508 <table>
509 <tr>
510 <td class="icon">
511 <i class="fa icon-warning" title="Warning"></i>
512 </td>
513 <td class="content">
514 psensor-server does not provide any way to restrict the connection
515 to the HTTP server, worst, no effort has been made against malicious
516 HTTP attacks.  You should make the psensor-server port available
517 only to a network or computer you trust by using the usual network
518 security tools of the system (for example:
519 <a href="http://www.netfilter.org/projects/iptables/index.html">iptables</a>).
520 </td>
521 </tr>
522 </table>
523 </div>
524 </div>
525 </div>
526 <div class="sect1">
527 <h2 id="_installation_using_distribution_packages">2. Installation Using Distribution Packages</h2>
528 <div class="sectionbody">
529 <div class="sect2">
530 <h3 id="_debian">2.1. Debian</h3>
531 <div class="paragraph">
532 <p>For Debian, the binary and source packages are available in the
533 Wheezy, unstable and testing repositories.</p>
534 </div>
535 <div class="paragraph">
536 <p>Debian package information is available at:
537 <a href="http://packages.qa.debian.org/p/psensor.html" class="bare">http://packages.qa.debian.org/p/psensor.html</a>.</p>
538 </div>
539 <div class="paragraph">
540 <p>To do the installation:</p>
541 </div>
542 <div class="listingblock">
543 <div class="content">
544 <pre>sudo apt-get install psensor psensor-server</pre>
545 </div>
546 </div>
547 </div>
548 <div class="sect2">
549 <h3 id="_ubuntu">2.2. Ubuntu</h3>
550 <div class="paragraph">
551 <p>Since Ubuntu Oneiric (11.10), psensor is available in the universe
552 repository of Ubuntu.</p>
553 </div>
554 <div class="paragraph">
555 <p>To install psensor or psensor-server:</p>
556 </div>
557 <div class="listingblock">
558 <div class="content">
559 <pre>sudo apt-get install psensor
560 sudo apt-get install psensor-server</pre>
561 </div>
562 </div>
563 <div class="paragraph">
564 <p>Or search them in the Ubuntu Software Center.</p>
565 </div>
566 <div class="paragraph">
567 <p>For other Ubuntu releases or user the more recent release, the easiest
568 way is to use the dedicated PPA.</p>
569 </div>
570 <div class="paragraph">
571 <p>Last stable version:</p>
572 </div>
573 <div class="listingblock">
574 <div class="content">
575 <pre>sudo apt-get apt-add-repository ppa:/jfi/psensor
576 sudo apt-get update
577 sudo apt-get install psensor
578 sudo apt-get install psensor-server</pre>
579 </div>
580 </div>
581 <div class="paragraph">
582 <p>Last development version which should not contain major bugs:</p>
583 </div>
584 <div class="listingblock">
585 <div class="content">
586 <pre>sudo apt-get apt-add-repository ppa:/jfi/psensor-unstable
587 sudo apt-get update
588 sudo apt-get install psensor
589 sudo apt-get install psensor-server</pre>
590 </div>
591 </div>
592 <div class="paragraph">
593 <p>Daily trunk build which may contain major bugs and partialy
594 implemented features:</p>
595 </div>
596 <div class="listingblock">
597 <div class="content">
598 <pre>sudo apt-get apt-add-repository ppa:/jfi/psensor-daily-trunk
599 sudo apt-get update
600 sudo apt-get install psensor
601 sudo apt-get install psensor-server</pre>
602 </div>
603 </div>
604 </div>
605 </div>
606 </div>
607 <div class="sect1">
608 <h2 id="_installation_from_source_archive">3. Installation From Source Archive</h2>
609 <div class="sectionbody">
610 <div class="paragraph">
611 <p>psensor and psensor-server can be compiled and installed on any
612 modern GNU/Linux distribution.</p>
613 </div>
614 <div class="sect2">
615 <h3 id="_compilation_prerequisites">3.1. Compilation Prerequisites</h3>
616 <div class="paragraph">
617 <p>The compilation of psensor requires:</p>
618 </div>
619 <div class="ulist">
620 <ul>
621 <li>
622 <p>make</p>
623 </li>
624 <li>
625 <p>gcc (or llvm)</p>
626 </li>
627 <li>
628 <p>lm-sensors</p>
629 </li>
630 <li>
631 <p>library sensors4</p>
632 </li>
633 <li>
634 <p>library gtk3 &gt;=3.4</p>
635 </li>
636 <li>
637 <p>help2man (optional, required to produce the manpage)</p>
638 </li>
639 <li>
640 <p>asciidoctor (optional, required to produce the html version of the
641 faq)</p>
642 </li>
643 <li>
644 <p>cppcheck (optional, static source checker)</p>
645 </li>
646 <li>
647 <p>library libnotify (optional)</p>
648 </li>
649 <li>
650 <p>library libappindicator &gt;= 3.0 (optional)</p>
651 </li>
652 <li>
653 <p>library libXNVCtrl (optional)</p>
654 </li>
655 <li>
656 <p>library json-c &gt;= 0.11.99 and curl (optional, required for remote monitoring)</p>
657 </li>
658 <li>
659 <p>library unity (&gt;=v3.4.2, optional)</p>
660 </li>
661 <li>
662 <p>library gtop2 (optional, required for CPU usage)</p>
663 </li>
664 <li>
665 <p>library atasmart (optional, for disk monitoring)</p>
666 </li>
667 <li>
668 <p>library udisk2 (optional, for disk monitoring)</p>
669 </li>
670 </ul>
671 </div>
672 <div class="paragraph">
673 <p>The specific requirements for psensor-server:</p>
674 </div>
675 <div class="ulist">
676 <ul>
677 <li>
678 <p>library libmicrohttpd</p>
679 </li>
680 <li>
681 <p>library json-c &gt;= 0.11.99</p>
682 </li>
683 </ul>
684 </div>
685 </div>
686 <div class="sect2">
687 <h3 id="_compilation_and_installation_steps">3.2. Compilation and Installation Steps</h3>
688 <div class="olist arabic">
689 <ol class="arabic">
690 <li>
691 <p>download the source archive from: <a href="http://wpitchoune.net/psensor/files" class="bare">http://wpitchoune.net/psensor/files</a></p>
692 </li>
693 <li>
694 <p>Extract files from the source archive</p>
695 </li>
696 <li>
697 <p>Compilation: ./configure;make clean all</p>
698 </li>
699 <li>
700 <p>Installation:  make install (require to have root permission)</p>
701 </li>
702 <li>
703 <p>Start the sensor detection script: sensors-detect and follows the
704 instructions. Reboot or activate the kernel modules which have
705 been found.</p>
706 </li>
707 <li>
708 <p>Run: psensor</p>
709 </li>
710 </ol>
711 </div>
712 </div>
713 <div class="sect2">
714 <h3 id="_ati_amd_gpu_support">3.3. ATI/AMD GPU Support</h3>
715 <div class="paragraph">
716 <p>When the OpenSource ATI driver is used, the monitoring
717 information is available throw lm-sensors and does not require the
718 following instructions.</p>
719 </div>
720 <div class="paragraph">
721 <p>When the proprietary ATI driver(Catalyst) is used, the build is
722 requiring an additional library.</p>
723 </div>
724 <div class="paragraph">
725 <p>Download the
726 <a href="http://developer.amd.com/sdks/ADLSDK/Pages/default.aspx">ATI ADL SDK</a>
727 and extracts the files of the archive into a directory [dir].</p>
728 </div>
729 <div class="paragraph">
730 <p>Replace the step 3. of the above section by ./configure
731 --with-libatiadl=[dir] where [dir] must be the directory where you
732 have extracted the ATI ADL SDK. Other steps are indentical.</p>
733 </div>
734 </div>
735 </div>
736 </div>
737 <div class="sect1">
738 <h2 id="_contact">4. Contact</h2>
739 <div class="sectionbody">
740 <div class="paragraph">
741 <p>Bugs and comments can be sent to <a href="mailto:jeanfi@gmail.com">jeanfi@gmail.com</a>.</p>
742 </div>
743 <div class="paragraph">
744 <p>Home page: <a href="http://wpitchoune.net/psensor" class="bare">http://wpitchoune.net/psensor</a></p>
745 </div>
746 </div>
747 </div>
748 </div>
749 <div id="footer">
750 <div id="footer-text">
751 Last updated 2017-02-04 23:26:13 CET
752 </div>
753 </div>
754 </body>
755 </html>