1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
\r
2 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
\r
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
\r
5 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
\r
6 <meta name="generator" content="AsciiDoc 8.6.7" />
\r
7 <title>Psensor README</title>
\r
8 <style type="text/css">
\r
11 background: #e2e2e2;
\r
13 font-family: Ubuntu,Arial,sans-serif;
\r
15 font-weight: lighter;
\r
16 margin: 1em 2em 2em 2em;
\r
22 margin: 0 0 0.267em 0;
\r
24 font-weight: normal;
\r
29 margin: 0 0 0.375em;
\r
31 font-weight: normal;
\r
36 margin: 0 0 0.522em;
\r
38 font-weight: normal;
\r
43 margin: 0 0 0.615em;
\r
45 font-weight: normal;
\r
56 font-weight: normal;
\r
58 letter-spacing: 0.1em;
\r
59 margin: 0 0 0.923em;
\r
60 text-transform: uppercase;
\r
80 text-decoration: none;
\r
84 text-decoration: underline;
\r
88 font-family: "Ubuntu Mono","Courier New",Courier,monospace;
\r
89 font-weight: normal;
\r
94 background: none repeat scroll 0 0 #e0e0e0;
\r
96 padding: 0.5em 0.5em;
\r
98 white-space: pre-wrap;
\r
99 word-wrap: break-word;
\r
110 font-weight: lighter;
\r
121 background: #ffffff;
\r
123 -moz-box-sizing: border-box;
\r
125 padding: 2em 2em 2em 2em;
\r
127 -moz-border-radius: 4px;
\r
128 -webkit-border-radius: 4px;
\r
129 border-radius: 4px;
\r
131 -webkit-box-shadow: 0 2px 2px 0 #C2C2C2;
\r
132 box-shadow: 0 2px 2px 0 #C2C2C2;
\r
136 background: #ffffff;
\r
137 -moz-box-sizing: border-box;
\r
138 padding: 2em 2em 2em 2em;
\r
140 -moz-border-radius: 4px;
\r
141 -webkit-border-radius: 4px;
\r
142 border-radius: 4px;
\r
144 -webkit-box-shadow: 0 2px 2px 0 #C2C2C2;
\r
145 box-shadow: 0 2px 2px 0 #C2C2C2;
\r
148 #menu-list, #menu-list > li > ul {
\r
149 list-style-type: none;
\r
152 /* menu on left col, content on right col */
\r
167 margin: 0em 0em 2em 0em;
\r
169 background: #ffffff;
\r
170 -moz-box-sizing: border-box;
\r
171 padding: 2em 2em 2em 2em;
\r
173 -moz-border-radius: 4px;
\r
174 -webkit-border-radius: 4px;
\r
175 border-radius: 4px;
\r
177 -webkit-box-shadow: 0 2px 2px 0 #C2C2C2;
\r
178 box-shadow: 0 2px 2px 0 #C2C2C2;
\r
181 <script type="text/javascript">
\r
183 var asciidoc = { // Namespace.
\r
185 /////////////////////////////////////////////////////////////////////
\r
186 // Table Of Contents generator
\r
187 /////////////////////////////////////////////////////////////////////
\r
189 /* Author: Mihai Bazon, September 2002
\r
190 * http://students.infoiasi.ro/~mishoo
\r
192 * Table Of Content generator
\r
195 * Feel free to use this script under the terms of the GNU General Public
\r
196 * License, as long as you do not remove or alter this notice.
\r
199 /* modified by Troy D. Hanson, September 2006. License: GPL */
\r
200 /* modified by Stuart Rackham, 2006, 2009. License: GPL */
\r
202 // toclevels = 1..4.
\r
203 toc: function (toclevels) {
\r
205 function getText(el) {
\r
207 for (var i = el.firstChild; i != null; i = i.nextSibling) {
\r
208 if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
\r
210 else if (i.firstChild != null)
\r
211 text += getText(i);
\r
216 function TocEntry(el, text, toclevel) {
\r
219 this.toclevel = toclevel;
\r
222 function tocEntries(el, toclevels) {
\r
223 var result = new Array;
\r
224 var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
\r
225 // Function that scans the DOM tree for header elements (the DOM2
\r
226 // nodeIterator API would be a better technique but not supported by all
\r
228 var iterate = function (el) {
\r
229 for (var i = el.firstChild; i != null; i = i.nextSibling) {
\r
230 if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
\r
231 var mo = re.exec(i.tagName);
\r
232 if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
\r
233 result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
\r
243 var toc = document.getElementById("toc");
\r
248 // Delete existing TOC entries in case we're reloading the TOC.
\r
249 var tocEntriesToRemove = [];
\r
251 for (i = 0; i < toc.childNodes.length; i++) {
\r
252 var entry = toc.childNodes[i];
\r
253 if (entry.nodeName.toLowerCase() == 'div'
\r
254 && entry.getAttribute("class")
\r
255 && entry.getAttribute("class").match(/^toclevel/))
\r
256 tocEntriesToRemove.push(entry);
\r
258 for (i = 0; i < tocEntriesToRemove.length; i++) {
\r
259 toc.removeChild(tocEntriesToRemove[i]);
\r
262 // Rebuild TOC entries.
\r
263 var entries = tocEntries(document.getElementById("content"), toclevels);
\r
264 for (var i = 0; i < entries.length; ++i) {
\r
265 var entry = entries[i];
\r
266 if (entry.element.id == "")
\r
267 entry.element.id = "_toc_" + i;
\r
268 var a = document.createElement("a");
\r
269 a.href = "#" + entry.element.id;
\r
270 a.appendChild(document.createTextNode(entry.text));
\r
271 var div = document.createElement("div");
\r
272 div.appendChild(a);
\r
273 div.className = "toclevel" + entry.toclevel;
\r
274 toc.appendChild(div);
\r
276 if (entries.length == 0)
\r
277 toc.parentNode.removeChild(toc);
\r
281 /////////////////////////////////////////////////////////////////////
\r
282 // Footnotes generator
\r
283 /////////////////////////////////////////////////////////////////////
\r
285 /* Based on footnote generation code from:
\r
286 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
\r
289 footnotes: function () {
\r
290 // Delete existing footnote entries in case we're reloading the footnodes.
\r
292 var noteholder = document.getElementById("footnotes");
\r
296 var entriesToRemove = [];
\r
297 for (i = 0; i < noteholder.childNodes.length; i++) {
\r
298 var entry = noteholder.childNodes[i];
\r
299 if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
\r
300 entriesToRemove.push(entry);
\r
302 for (i = 0; i < entriesToRemove.length; i++) {
\r
303 noteholder.removeChild(entriesToRemove[i]);
\r
306 // Rebuild footnote entries.
\r
307 var cont = document.getElementById("content");
\r
308 var spans = cont.getElementsByTagName("span");
\r
311 for (i=0; i<spans.length; i++) {
\r
312 if (spans[i].className == "footnote") {
\r
314 var note = spans[i].getAttribute("data-note");
\r
316 // Use [\s\S] in place of . so multi-line matches work.
\r
317 // Because JavaScript has no s (dotall) regex flag.
\r
318 note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
\r
319 spans[i].innerHTML =
\r
320 "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
\r
321 "' title='View footnote' class='footnote'>" + n + "</a>]";
\r
322 spans[i].setAttribute("data-note", note);
\r
324 noteholder.innerHTML +=
\r
325 "<div class='footnote' id='_footnote_" + n + "'>" +
\r
326 "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
\r
327 n + "</a>. " + note + "</div>";
\r
328 var id =spans[i].getAttribute("id");
\r
329 if (id != null) refs["#"+id] = n;
\r
333 noteholder.parentNode.removeChild(noteholder);
\r
335 // Process footnoterefs.
\r
336 for (i=0; i<spans.length; i++) {
\r
337 if (spans[i].className == "footnoteref") {
\r
338 var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
\r
339 href = href.match(/#.*/)[0]; // Because IE return full URL.
\r
341 spans[i].innerHTML =
\r
342 "[<a href='#_footnote_" + n +
\r
343 "' title='View footnote' class='footnote'>" + n + "</a>]";
\r
349 install: function(toclevels) {
\r
352 function reinstall() {
\r
353 asciidoc.footnotes();
\r
355 asciidoc.toc(toclevels);
\r
359 function reinstallAndRemoveTimer() {
\r
360 clearInterval(timerId);
\r
364 timerId = setInterval(reinstall, 500);
\r
365 if (document.addEventListener)
\r
366 document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
\r
368 window.onload = reinstallAndRemoveTimer;
\r
372 asciidoc.install(2);
\r
376 <body class="article">
\r
378 <h1>Psensor README</h1>
\r
380 <div id="toctitle">Table of Contents</div>
381 <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
385 <div class="sect1">
\r
386 <h2 id="_introduction">1. Introduction</h2>
\r
387 <div class="sectionbody">
\r
388 <div class="paragraph"><p>Psensor is a graphical hardware monitoring application for Linux.</p></div>
\r
389 <div class="paragraph"><p>It draws realtime charts and raises alerts about:</p></div>
\r
390 <div class="ulist"><ul>
\r
393 the temperature of the motherboard and CPU sensors (using
\r
399 the temperature of the NVidia GPUs (using XNVCtrl).
\r
404 the temperature of the Hard Disk Drives (using hddtemp or libatasmart).
\r
409 the rotation speed of the fans (using lm-sensors).
\r
414 the temperature of a remote computer.
\r
423 <div class="paragraph"><p>Alerts are using Desktop Notification and a specific GTK+ status icon.</p></div>
\r
424 <div class="paragraph"><p>For Ubuntu users, Psensor is providing an Application Indicator which turns
\r
425 red under alert and a menu for quickly check all sensors.</p></div>
\r
426 <div class="paragraph"><p>It is possible to monitor remotely a computer:</p></div>
\r
427 <div class="ulist"><ul>
\r
430 start <tt>psensor-server</tt> on the remote computer.
\r
435 start <tt>psensor</tt> using: <tt>psensor --url=http://hostname:3131</tt>.
\r
439 <div class="paragraph"><p><tt>psensor-server</tt> is a minimal Web server, a Web browser can be used to
\r
440 monitor the remote computer by opening the URL:
\r
441 <tt>http://hostname:3131</tt>.</p></div>
\r
442 <div class="admonitionblock">
\r
445 <div class="title">Warning</div>
\r
447 <td class="content"><tt>psensor-server</tt> does not provide any way to restrict the connection
\r
448 to the HTTP server, worst, no effort has been made against malicious
\r
449 HTTP attacks. You should make the <tt>psensor-server</tt> port available
\r
450 only to a network or computer you trust by using the usual network
\r
451 security tools of the system (for example:
\r
452 <a href="http://www.netfilter.org/projects/iptables/index.html">iptables</a>).</td>
\r
457 <div class="sect1">
\r
458 <h2 id="_installation_using_distribution_packages">2. Installation Using Distribution Packages</h2>
\r
459 <div class="sectionbody">
\r
460 <div class="sect2">
\r
461 <h3 id="_debian">2.1. Debian</h3>
\r
462 <div class="paragraph"><p>For Debian, the binary and source packages are available in the
\r
463 Wheezy, unstable and testing repositories.</p></div>
\r
464 <div class="paragraph"><p>Debian package information is available at:
\r
465 <a href="http://packages.qa.debian.org/p/psensor.html">http://packages.qa.debian.org/p/psensor.html</a>.</p></div>
\r
466 <div class="paragraph"><p>To do the installation:</p></div>
\r
467 <div class="listingblock">
\r
468 <div class="content">
\r
469 <pre><tt>sudo apt-get install psensor psensor-server</tt></pre>
\r
472 <div class="sect2">
\r
473 <h3 id="_ubuntu">2.2. Ubuntu</h3>
\r
474 <div class="paragraph"><p>Since Ubuntu Oneiric (11.10), psensor is available in the universe
\r
475 repository of Ubuntu.</p></div>
\r
476 <div class="paragraph"><p>To install <tt>psensor</tt> or <tt>psensor-server</tt>:</p></div>
\r
477 <div class="listingblock">
\r
478 <div class="content">
\r
479 <pre><tt>sudo apt-get install psensor
\r
480 sudo apt-get install psensor-server</tt></pre>
\r
482 <div class="paragraph"><p>Or search them in the Ubuntu Software Center.</p></div>
\r
483 <div class="paragraph"><p>For other Ubuntu releases or user the more recent release, the easiest
\r
484 way is to use the dedicated PPA.</p></div>
\r
485 <div class="paragraph"><p>Last stable version:</p></div>
\r
486 <div class="listingblock">
\r
487 <div class="content">
\r
488 <pre><tt>sudo apt-get apt-add-repository ppa:/jfi/psensor
\r
489 sudo apt-get update
\r
490 sudo apt-get install psensor
\r
491 sudo apt-get install psensor-server</tt></pre>
\r
493 <div class="paragraph"><p>Last development version which should not contain major bugs:</p></div>
\r
494 <div class="listingblock">
\r
495 <div class="content">
\r
496 <pre><tt>sudo apt-get apt-add-repository ppa:/jfi/psensor-unstable
\r
497 sudo apt-get update
\r
498 sudo apt-get install psensor
\r
499 sudo apt-get install psensor-server</tt></pre>
\r
501 <div class="paragraph"><p>Daily trunk build which may contain major bugs and partialy
\r
502 implemented features:</p></div>
\r
503 <div class="listingblock">
\r
504 <div class="content">
\r
505 <pre><tt>sudo apt-get apt-add-repository ppa:/jfi/psensor-daily-trunk
\r
506 sudo apt-get update
\r
507 sudo apt-get install psensor
\r
508 sudo apt-get install psensor-server</tt></pre>
\r
513 <div class="sect1">
\r
514 <h2 id="_installation_from_source_archive">3. Installation From Source Archive</h2>
\r
515 <div class="sectionbody">
\r
516 <div class="paragraph"><p><tt>psensor</tt> and <tt>psensor-server</tt> can be compiled and installed on any
\r
517 modern GNU/Linux distribution.</p></div>
\r
518 <div class="sect2">
\r
519 <h3 id="_compilation_prerequisites">3.1. Compilation Prerequisites</h3>
\r
520 <div class="paragraph"><p>The compilation of <tt>psensor</tt> requires:</p></div>
\r
521 <div class="ulist"><ul>
\r
544 library gtk3 >=3.4
\r
559 asciidoc (optional, required to produce the html version of the
\r
565 cppcheck (optional, static source checker)
\r
570 library libnotify (optional)
\r
575 library libappindicator (optional)
\r
580 library libXNVCtrl (optional)
\r
585 library json0 and curl (optional, required for remote monitoring)
\r
590 library unity (>=v3.4.2, optional)
\r
595 library gtop2 (optional, required for CPU usage)
\r
600 library atasmart (optional, for disk monitoring)
\r
604 <div class="paragraph"><p>The specific requirements for <tt>psensor-server</tt>:</p></div>
\r
605 <div class="ulist"><ul>
\r
608 library libmicrohttpd
\r
617 <div class="paragraph"><p>For Debian 7.0:</p></div>
\r
618 <div class="listingblock">
\r
619 <div class="content">
\r
620 <pre><tt>sudo apt-get install asciidoc cppcheck gcc gettext libgtk-3-dev
\r
621 libgconf2-dev libnotify-dev libsensors4-dev help2man
\r
622 libcurl4-openssl-dev libjson0-dev libmicrohttpd-dev libgtop2-dev
\r
623 libatasmart-dev make</tt></pre>
\r
625 <div class="paragraph"><p>For Fedora 17:</p></div>
\r
626 <div class="listingblock">
\r
627 <div class="content">
\r
628 <pre><tt>sudo yum install gcc gtk3-devel GConf2-devel lm_sensors-devel cppcheck
\r
629 libatasmart-devel libcurl-devel json-c-devel libmicrohttpd-devel
\r
630 help2man libnotify-devel libgtop2-devel make</tt></pre>
\r
632 <div class="paragraph"><p>For Ubuntu 12.10:</p></div>
\r
633 <div class="listingblock">
\r
634 <div class="content">
\r
635 <pre><tt>sudo apt-get install asciidoc autoconf automake autopoint
\r
636 debhelper (>= 9) cppcheck gettext help2man libappindicator3-dev
\r
637 libatasmart-dev libcurl4-gnutls-dev libgconf2-dev libgtk-3-dev
\r
638 libgtop2-dev libjson0-dev libmicrohttpd-dev libnotify-dev
\r
639 libsensors4-dev libunity-dev nvidia-settings perl</tt></pre>
\r
642 <div class="sect2">
\r
643 <h3 id="_compilation_and_installation_steps">3.2. Compilation and Installation Steps</h3>
\r
644 <div class="olist arabic"><ol class="arabic">
\r
647 download the source archive from: <a href="http://wpitchoune.net/psensor/files">http://wpitchoune.net/psensor/files</a>
\r
652 Extract files from the source archive
\r
657 Compilation: <tt>./configure;make clean all</tt>
\r
662 Installation: <tt>make install</tt> (require to have root permission)
\r
667 Start the sensor detection script: <tt>sensors-detect</tt> and follows the
\r
668 instructions. Reboot or activate the kernel modules which have
\r
674 To monitor HDDs, the <tt>hddtemp</tt> daemon must be installed and running.
\r
679 Run: <tt>psensor</tt>
\r
684 <div class="sect2">
\r
685 <h3 id="_ati_amd_gpu_support">3.3. ATI/AMD GPU Support</h3>
\r
686 <div class="paragraph"><p>When the OpenSource ATI driver is used, the monitoring
\r
687 information is available throw lm-sensors and does not require the
\r
688 following instructions.</p></div>
\r
689 <div class="paragraph"><p>When the proprietary ATI driver(Catalyst) is used, the build is
\r
690 requiring an additional library.</p></div>
\r
691 <div class="paragraph"><p>Download the
\r
692 <a href="http://developer.amd.com/sdks/ADLSDK/Pages/default.aspx">ATI ADL SDK</a>
\r
693 and extracts the files of the archive into a directory [dir].</p></div>
\r
694 <div class="paragraph"><p>Replace the step 3. of the above section by <tt>./configure
\r
695 --with-libatiadl=[dir]</tt> where <tt>[dir]</tt> must be the directory where you
\r
696 have extracted the ATI ADL SDK. Other steps are indentical.</p></div>
\r
700 <div class="sect1">
\r
701 <h2 id="_contact">4. Contact</h2>
\r
702 <div class="sectionbody">
\r
703 <div class="paragraph"><p>Bugs and comments can be sent to <a href="mailto:jeanfi@gmail.com">jeanfi@gmail.com</a>.</p></div>
\r
704 <div class="paragraph"><p>Home page: <a href="http://wpitchoune.net/psensor">http://wpitchoune.net/psensor</a></p></div>
\r
708 <div id="footnotes"><hr /></div>
\r
710 <div id="footer-text">
\r
711 Last updated 2014-04-10 01:57:33 CEST
\r