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
10 padding: 1em 1em 1em 1em;
\r
11 font-family: "Ubuntu", sans-serif;
\r
14 font-weight: normal;
\r
16 background-color: #fff;
\r
23 text-decoration: none;
\r
27 text-decoration: underline;
\r
34 text-transform: uppercase;
\r
44 text-transform: uppercase;
\r
45 margin: 2em 0em 1em 0em;
\r
71 background-color: #000;
\r
81 padding: 0.25em 0.5em 0.25em 0.5em;
\r
83 font-weight: normal;
\r
87 padding: 0.25em 0.25em 0em 0.25em;
\r
93 font-weight: normal;
\r
123 font-style: normal;
\r
127 font-weight: normal;
\r
131 text-transform: uppercase;
\r
135 padding-bottom: 1em;
\r
139 padding: 0 0 0 0em;
\r
143 <script type="text/javascript">
\r
145 var asciidoc = { // Namespace.
\r
147 /////////////////////////////////////////////////////////////////////
\r
148 // Table Of Contents generator
\r
149 /////////////////////////////////////////////////////////////////////
\r
151 /* Author: Mihai Bazon, September 2002
\r
152 * http://students.infoiasi.ro/~mishoo
\r
154 * Table Of Content generator
\r
157 * Feel free to use this script under the terms of the GNU General Public
\r
158 * License, as long as you do not remove or alter this notice.
\r
161 /* modified by Troy D. Hanson, September 2006. License: GPL */
\r
162 /* modified by Stuart Rackham, 2006, 2009. License: GPL */
\r
164 // toclevels = 1..4.
\r
165 toc: function (toclevels) {
\r
167 function getText(el) {
\r
169 for (var i = el.firstChild; i != null; i = i.nextSibling) {
\r
170 if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
\r
172 else if (i.firstChild != null)
\r
173 text += getText(i);
\r
178 function TocEntry(el, text, toclevel) {
\r
181 this.toclevel = toclevel;
\r
184 function tocEntries(el, toclevels) {
\r
185 var result = new Array;
\r
186 var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
\r
187 // Function that scans the DOM tree for header elements (the DOM2
\r
188 // nodeIterator API would be a better technique but not supported by all
\r
190 var iterate = function (el) {
\r
191 for (var i = el.firstChild; i != null; i = i.nextSibling) {
\r
192 if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
\r
193 var mo = re.exec(i.tagName);
\r
194 if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
\r
195 result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
\r
205 var toc = document.getElementById("toc");
\r
210 // Delete existing TOC entries in case we're reloading the TOC.
\r
211 var tocEntriesToRemove = [];
\r
213 for (i = 0; i < toc.childNodes.length; i++) {
\r
214 var entry = toc.childNodes[i];
\r
215 if (entry.nodeName.toLowerCase() == 'div'
\r
216 && entry.getAttribute("class")
\r
217 && entry.getAttribute("class").match(/^toclevel/))
\r
218 tocEntriesToRemove.push(entry);
\r
220 for (i = 0; i < tocEntriesToRemove.length; i++) {
\r
221 toc.removeChild(tocEntriesToRemove[i]);
\r
224 // Rebuild TOC entries.
\r
225 var entries = tocEntries(document.getElementById("content"), toclevels);
\r
226 for (var i = 0; i < entries.length; ++i) {
\r
227 var entry = entries[i];
\r
228 if (entry.element.id == "")
\r
229 entry.element.id = "_toc_" + i;
\r
230 var a = document.createElement("a");
\r
231 a.href = "#" + entry.element.id;
\r
232 a.appendChild(document.createTextNode(entry.text));
\r
233 var div = document.createElement("div");
\r
234 div.appendChild(a);
\r
235 div.className = "toclevel" + entry.toclevel;
\r
236 toc.appendChild(div);
\r
238 if (entries.length == 0)
\r
239 toc.parentNode.removeChild(toc);
\r
243 /////////////////////////////////////////////////////////////////////
\r
244 // Footnotes generator
\r
245 /////////////////////////////////////////////////////////////////////
\r
247 /* Based on footnote generation code from:
\r
248 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
\r
251 footnotes: function () {
\r
252 // Delete existing footnote entries in case we're reloading the footnodes.
\r
254 var noteholder = document.getElementById("footnotes");
\r
258 var entriesToRemove = [];
\r
259 for (i = 0; i < noteholder.childNodes.length; i++) {
\r
260 var entry = noteholder.childNodes[i];
\r
261 if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
\r
262 entriesToRemove.push(entry);
\r
264 for (i = 0; i < entriesToRemove.length; i++) {
\r
265 noteholder.removeChild(entriesToRemove[i]);
\r
268 // Rebuild footnote entries.
\r
269 var cont = document.getElementById("content");
\r
270 var spans = cont.getElementsByTagName("span");
\r
273 for (i=0; i<spans.length; i++) {
\r
274 if (spans[i].className == "footnote") {
\r
276 var note = spans[i].getAttribute("data-note");
\r
278 // Use [\s\S] in place of . so multi-line matches work.
\r
279 // Because JavaScript has no s (dotall) regex flag.
\r
280 note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
\r
281 spans[i].innerHTML =
\r
282 "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
\r
283 "' title='View footnote' class='footnote'>" + n + "</a>]";
\r
284 spans[i].setAttribute("data-note", note);
\r
286 noteholder.innerHTML +=
\r
287 "<div class='footnote' id='_footnote_" + n + "'>" +
\r
288 "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
\r
289 n + "</a>. " + note + "</div>";
\r
290 var id =spans[i].getAttribute("id");
\r
291 if (id != null) refs["#"+id] = n;
\r
295 noteholder.parentNode.removeChild(noteholder);
\r
297 // Process footnoterefs.
\r
298 for (i=0; i<spans.length; i++) {
\r
299 if (spans[i].className == "footnoteref") {
\r
300 var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
\r
301 href = href.match(/#.*/)[0]; // Because IE return full URL.
\r
303 spans[i].innerHTML =
\r
304 "[<a href='#_footnote_" + n +
\r
305 "' title='View footnote' class='footnote'>" + n + "</a>]";
\r
311 install: function(toclevels) {
\r
314 function reinstall() {
\r
315 asciidoc.footnotes();
\r
317 asciidoc.toc(toclevels);
\r
321 function reinstallAndRemoveTimer() {
\r
322 clearInterval(timerId);
\r
326 timerId = setInterval(reinstall, 500);
\r
327 if (document.addEventListener)
\r
328 document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
\r
330 window.onload = reinstallAndRemoveTimer;
\r
334 asciidoc.install(2);
\r
338 <body class="article">
\r
340 <h1>Psensor README</h1>
\r
342 <div id="toctitle">Table of Contents</div>
343 <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
347 <div class="sect1">
\r
348 <h2 id="_introduction">1. Introduction</h2>
\r
349 <div class="sectionbody">
\r
350 <div class="paragraph"><p>Psensor is a graphical hardware monitoring application for Linux.</p></div>
\r
351 <div class="paragraph"><p>It draws realtime charts and raises alerts about:</p></div>
\r
352 <div class="ulist"><ul>
\r
355 the temperature of the motherboard and CPU sensors (using
\r
361 the temperature of the NVidia GPUs (using XNVCtrl).
\r
366 the temperature of the Hard Disk Drives (using hddtemp or libatasmart).
\r
371 the rotation speed of the fans (using lm-sensors).
\r
376 the temperature of a remote computer.
\r
385 <div class="paragraph"><p>Alerts are using Desktop Notification and a specific GTK+ status icon.</p></div>
\r
386 <div class="paragraph"><p>For Ubuntu users, Psensor is providing an Application Indicator which turns
\r
387 red under alert and a menu for quickly check all sensors.</p></div>
\r
388 <div class="paragraph"><p>It is possible to monitor remotely a computer:</p></div>
\r
389 <div class="ulist"><ul>
\r
392 start <tt>psensor-server</tt> on the remote computer.
\r
397 start <tt>psensor</tt> using: <tt>psensor --url=http://hostname:3131</tt>.
\r
401 <div class="paragraph"><p><tt>psensor-server</tt> is a minimal Web server, a Web browser can be used to
\r
402 monitor the remote computer by opening the URL:
\r
403 <tt>http://hostname:3131</tt>.</p></div>
\r
404 <div class="admonitionblock">
\r
407 <div class="title">Warning</div>
\r
409 <td class="content"><tt>psensor-server</tt> does not provide any way to restrict the connection
\r
410 to the HTTP server, worst, no effort has been made against malicious
\r
411 HTTP attacks. You should make the <tt>psensor-server</tt> port available
\r
412 only to a network or computer you trust by using the usual network
\r
413 security tools of the system (for example:
\r
414 <a href="http://www.netfilter.org/projects/iptables/index.html">iptables</a>).</td>
\r
419 <div class="sect1">
\r
420 <h2 id="_installation_using_distribution_packages">2. Installation Using Distribution Packages</h2>
\r
421 <div class="sectionbody">
\r
422 <div class="sect2">
\r
423 <h3 id="_debian">2.1. Debian</h3>
\r
424 <div class="paragraph"><p>For Debian, the binary and source packages are available in the
\r
425 Wheezy, unstable and testing repositories.</p></div>
\r
426 <div class="paragraph"><p>Debian package information is available at:
\r
427 <a href="http://packages.qa.debian.org/p/psensor.html">http://packages.qa.debian.org/p/psensor.html</a>.</p></div>
\r
428 <div class="paragraph"><p>To do the installation:</p></div>
\r
429 <div class="listingblock">
\r
430 <div class="content">
\r
431 <pre><tt>sudo apt-get install psensor psensor-server</tt></pre>
\r
434 <div class="sect2">
\r
435 <h3 id="_ubuntu">2.2. Ubuntu</h3>
\r
436 <div class="paragraph"><p>Since Ubuntu Oneiric (11.10), psensor is available in the universe
\r
437 repository of Ubuntu.</p></div>
\r
438 <div class="paragraph"><p>To install <tt>psensor</tt> or <tt>psensor-server</tt>:</p></div>
\r
439 <div class="listingblock">
\r
440 <div class="content">
\r
441 <pre><tt>sudo apt-get install psensor
\r
442 sudo apt-get install psensor-server</tt></pre>
\r
444 <div class="paragraph"><p>Or search them in the Ubuntu Software Center.</p></div>
\r
445 <div class="paragraph"><p>For other Ubuntu releases or user the more recent release, the easiest
\r
446 way is to use the dedicated PPA.</p></div>
\r
447 <div class="paragraph"><p>Last stable version:</p></div>
\r
448 <div class="listingblock">
\r
449 <div class="content">
\r
450 <pre><tt>sudo apt-get apt-add-repository ppa:/jfi/psensor
\r
451 sudo apt-get update
\r
452 sudo apt-get install psensor
\r
453 sudo apt-get install psensor-server</tt></pre>
\r
455 <div class="paragraph"><p>Last development version which should not contain major bugs:</p></div>
\r
456 <div class="listingblock">
\r
457 <div class="content">
\r
458 <pre><tt>sudo apt-get apt-add-repository ppa:/jfi/psensor-unstable
\r
459 sudo apt-get update
\r
460 sudo apt-get install psensor
\r
461 sudo apt-get install psensor-server</tt></pre>
\r
463 <div class="paragraph"><p>Daily trunk build which may contain major bugs and partialy
\r
464 implemented features:</p></div>
\r
465 <div class="listingblock">
\r
466 <div class="content">
\r
467 <pre><tt>sudo apt-get apt-add-repository ppa:/jfi/psensor-daily-trunk
\r
468 sudo apt-get update
\r
469 sudo apt-get install psensor
\r
470 sudo apt-get install psensor-server</tt></pre>
\r
475 <div class="sect1">
\r
476 <h2 id="_installation_from_source_archive">3. Installation From Source Archive</h2>
\r
477 <div class="sectionbody">
\r
478 <div class="paragraph"><p><tt>psensor</tt> and <tt>psensor-server</tt> can be compiled and installed on any
\r
479 modern GNU/Linux distribution.</p></div>
\r
480 <div class="sect2">
\r
481 <h3 id="_compilation_prerequisites">3.1. Compilation Prerequisites</h3>
\r
482 <div class="paragraph"><p>The compilation of <tt>psensor</tt> requires:</p></div>
\r
483 <div class="ulist"><ul>
\r
521 asciidoc (optional, required to produce the html version of the
\r
527 cppcheck (optional, static source checker)
\r
532 library libnotify (optional)
\r
537 library libappindicator (optional)
\r
542 library libXNVCtrl (optional)
\r
547 library json0 and curl (optional, required for remote monitoring)
\r
552 library unity (>=v3.4.2, optional)
\r
557 library gtop2 (optional, required for CPU usage)
\r
562 library atasmart (optional, for disk monitoring)
\r
566 <div class="paragraph"><p>The specific requirements for <tt>psensor-server</tt>:</p></div>
\r
567 <div class="ulist"><ul>
\r
570 library libmicrohttpd
\r
579 <div class="paragraph"><p>For Debian 7.0:</p></div>
\r
580 <div class="listingblock">
\r
581 <div class="content">
\r
582 <pre><tt>sudo apt-get install asciidoc cppcheck gcc gettext libgtk-3-dev
\r
583 libgconf2-dev libnotify-dev libsensors4-dev help2man
\r
584 libcurl4-openssl-dev libjson0-dev libmicrohttpd-dev libgtop2-dev
\r
585 libatasmart-dev make</tt></pre>
\r
587 <div class="paragraph"><p>For Fedora 17:</p></div>
\r
588 <div class="listingblock">
\r
589 <div class="content">
\r
590 <pre><tt>sudo yum install gcc gtk3-devel GConf2-devel lm_sensors-devel cppcheck
\r
591 libatasmart-devel libcurl-devel json-c-devel libmicrohttpd-devel
\r
592 help2man libnotify-devel libgtop2-devel make</tt></pre>
\r
594 <div class="paragraph"><p>For Ubuntu 12.04:</p></div>
\r
595 <div class="listingblock">
\r
596 <div class="content">
\r
597 <pre><tt>sudo apt-get install autoconf automake asciidoc cppcheck gcc gettext
\r
598 autopoint libgtk-3-dev libgconf2-dev libnotify-dev libsensors4-dev
\r
599 help2man libcurl4-openssl-dev libjson0-dev libmicrohttpd-dev
\r
600 libgtop2-dev make perl libunity-dev libgtop2-dev libappindicator-dev
\r
601 nvidia-settings</tt></pre>
\r
604 <div class="sect2">
\r
605 <h3 id="_compilation_and_installation_steps">3.2. Compilation and Installation Steps</h3>
\r
606 <div class="olist arabic"><ol class="arabic">
\r
609 download the source archive from: <a href="http://wpitchoune.net/psensor/files">http://wpitchoune.net/psensor/files</a>
\r
614 Extract files from the source archive
\r
619 Compilation: <tt>./configure;make clean all</tt>
\r
624 Installation: <tt>make install</tt> (require to have root permission)
\r
629 Start the sensor detection script: <tt>sensors-detect</tt> and follows the
\r
630 instructions. Reboot or activate the kernel modules which have
\r
636 To monitor HDDs, the <tt>hddtemp</tt> daemon must be installed and running.
\r
641 Run: <tt>psensor</tt>
\r
646 <div class="sect2">
\r
647 <h3 id="_ati_amd_gpu_support">3.3. ATI/AMD GPU Support</h3>
\r
648 <div class="paragraph"><p>When the OpenSource ATI driver is used, the monitoring
\r
649 information is available throw lm-sensors and does not require the
\r
650 following instructions.</p></div>
\r
651 <div class="paragraph"><p>When the proprietary ATI driver(Catalyst) is used, the build is
\r
652 requiring an additional library.</p></div>
\r
653 <div class="paragraph"><p>Download the
\r
654 <a href="http://developer.amd.com/sdks/ADLSDK/Pages/default.aspx">ATI ADL SDK</a>
\r
655 and extracts the files of the archive into a directory [dir].</p></div>
\r
656 <div class="paragraph"><p>Replace the step 3. of the above section by <tt>./configure
\r
657 --with-libatiadl=[dir]</tt> where <tt>[dir]</tt> must be the directory where you
\r
658 have extracted the ATI ADL SDK. Other steps are indentical.</p></div>
\r
662 <div class="sect1">
\r
663 <h2 id="_contact">4. Contact</h2>
\r
664 <div class="sectionbody">
\r
665 <div class="paragraph"><p>Bugs and comments can be sent to <a href="mailto:jeanfi@gmail.com">jeanfi@gmail.com</a>.</p></div>
\r
666 <div class="paragraph"><p>Home page: <a href="http://wpitchoune.net/psensor">http://wpitchoune.net/psensor</a></p></div>
\r
670 <div id="footnotes"><hr /></div>
\r
672 <div id="footer-text">
\r
673 Last updated 2013-03-13 10:55:37 CET
\r