msgbox

dghdfh

Sep 10th, 2011
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 8.03 KB | None | 0 0
  1. #! /usr/bin/perl -w
  2. use strict;
  3. $| = 1;
  4. use constant COLOR_BG => scalar 'None';
  5. use constant COLOR_FG => scalar '#303030';
  6. use constant COLOR_BORDER => scalar 'None';
  7.  
  8.  
  9.  
  10. sub display_normalize {
  11.     my $disp = shift() || '';
  12.     my ($host, $display, $screen) = ('localhost', '0', '0');
  13.     $disp =~ m{^([^:]+)?(?::(\d+)(?:\.(\d+))?)?$};
  14.     $host = $1 if ($1);
  15.     $display = $2 if ($2);
  16.     $screen = $3 if ($3);
  17.     return sprintf('%s:%s.%s', $host, $display, $screen);
  18. }
  19.  
  20. sub get_cmdline {
  21.     my $cmdline = '';
  22.     my $pid = shift() || -1;
  23.     return $cmdline unless ($pid > 0);
  24.     my $dirname = sprintf('/proc/%d/', $pid);
  25.     if (-d $dirname) {
  26.         my %prepend = ();
  27.         if (my (undef, undef, undef, undef, $uid, $gid) = stat($dirname)) {
  28.             $prepend{'UID'} = $uid;
  29.             if ($uid >= 0) {
  30.                 my ($user) = getpwuid($uid);
  31.                 $prepend{'USER'} = $user if ($user);
  32.             }
  33.             $prepend{'GID'} = $gid;
  34.             if ($gid >= 0) {
  35.                 my ($group) = getgrgid($gid);
  36.                 $prepend{'GROUP'} = $group if ($group);
  37.             }
  38.         }
  39.         my $filename = $dirname.'cmdline';
  40.         if (-r $filename && open(F, '<', $filename)) {
  41.             $cmdline = join('', <F>);
  42.             close(F);
  43.             $cmdline =~ tr/\x00/ /;
  44.             $cmdline =~ s/(^\s+|\s+$)//;
  45.             if ($pid == $$) {
  46.                 $prepend{'DISPLAY'} = &display_normalize($ENV{'DISPLAY'}) if ($ENV{'DISPLAY'});
  47.             } else {
  48.                 $filename = $dirname.'environ';
  49.                 if (-r $filename && open(F, '<', $filename)) {
  50.                     my $env = join('', <F>);
  51.                     close(F);
  52.                     foreach my $var (split(/\x00/, $env)) {
  53.                         my @tmp = split(/=/, $var);
  54.                         my $name = shift(@tmp);
  55.                         my $value = join('=', @tmp);
  56.                         $prepend{$name} = &display_normalize($value) if ($name eq 'DISPLAY');
  57.                     }
  58.                 }
  59.             }
  60.         }
  61.         if ($cmdline) {
  62.             $cmdline = sprintf('U=%d:%s/G=%d:%s/D=%s#%s',
  63.                 $prepend{'UID'} || 0,
  64.                 $prepend{'USER'} || '',
  65.                 $prepend{'GID'} || 0,
  66.                 $prepend{'GROUP'} || '',
  67.                 $prepend{'DISPLAY'} || '',
  68.                 $cmdline || ''
  69.             );
  70.         }
  71.         #$cmdline = join(' ', map({ sprintf('%s=%s', $_, $prepend{$_}); } sort(keys(%prepend))), $cmdline) if ($cmdline);
  72.     }
  73.     return $cmdline;
  74. }
  75.  
  76. sub is_running {
  77.     my $my_cmdline = &get_cmdline($$);
  78.     foreach my $d (</proc/*>) {
  79.         (-d $d) or next;
  80.         my $pid = -1;
  81.         $pid = int($1) if ($d =~ m{/(\d+)(/|$)});
  82.         next if ($pid <= 0 || $pid == $$);
  83.         my $cmdline = &get_cmdline($pid);
  84.         next unless ($cmdline);
  85.         return 1 if ($cmdline eq $my_cmdline);
  86.     }
  87.     return 0;
  88. }
  89. &is_running($0) and die("Applet is already running!\n");
  90.  
  91. my $sysfs = '';
  92. open(F, '</proc/mounts') || die $!;
  93. while (<F>) {
  94.     last if ($sysfs);
  95.     chomp();
  96.     my ($dev, $mntpt, $type, $opts, $n1, $n2) = split(/\s+/);
  97.     $sysfs = $mntpt if ($type eq 'sysfs');
  98. }
  99. close(F);
  100. my @sensors = ();
  101. if ($sysfs) {
  102.     foreach my $d (<$sysfs/bus/i2c/devices/*>) {
  103.         (-d $d) or next;
  104.         foreach my $f (<$d/temp*_input>) {
  105.             (-r $f) or next;
  106.             $f =~ m{^/.*/temp(\d+)_input$};
  107.             ($1 == 2) or next;  # FIXME: use sensor #2 (works for me...)
  108.             push(@sensors, [ $f, sub {
  109.                 my $fh = shift();
  110.                 my $ret = <$fh> || '';
  111.                 chomp($ret);
  112.                 return int($ret) / 1000;
  113.             } ]) if ($1);
  114.         }
  115.     }
  116. }
  117. unless (@sensors) {
  118.     foreach my $d (</proc/acpi/thermal_zone/*>) {
  119.         (-d $d) or next;
  120.         foreach my $f (<$d/temperature>) {
  121.             (-r $f) or next;
  122.             push(@sensors, [ $f, sub {
  123.                 my $fh = shift();
  124.                 my $ln = <$fh> || '';
  125.                 $ln = ($ln =~ m{^temperature:\s*(\d+)}) ? $1 : -1;
  126.                 return int($ln);
  127.             } ]);
  128.         }
  129.     }
  130. }
  131. die("Can't find any temperature sensors!\n") unless (@sensors);
  132.  
  133. sub lm_get_temp {
  134.     my @temps = ();
  135.     foreach (@sensors) {
  136.         open(F, '<', $_->[0]) || die $!;
  137.         my $temp = undef;
  138.         if ($_->[1]) {
  139.             $temp = $_->[1](\*F);
  140.         } else {
  141.             $temp = <F>;
  142.         }
  143.         close(F);
  144.         push(@temps, $temp);
  145.     }
  146.     return wantarray() ? @temps : shift(@temps);
  147. }
  148.  
  149. use Gtk2;
  150. # use Gtk2::TrayIcon;
  151. # my ($icon, $eventbox, $img, $tt, $timeout) = (undef, undef, undef, undef, undef);
  152. # my %nums = (
  153. #   '-w' => 6,
  154. #   '-h' => 15,
  155. #   '0' => [
  156. #       ' oooo ',
  157. #       'o oo o',
  158. #       'oo  oo',
  159. #       'oo  oo',
  160. #       'oo  oo',
  161. #       'oo  oo',
  162. #       'o    o',
  163. #       '      ',
  164. #       'o    o',
  165. #       'oo  oo',
  166. #       'oo  oo',
  167. #       'oo  oo',
  168. #       'oo  oo',
  169. #       'o oo o',
  170. #       ' oooo '
  171. #   ],
  172. #   '1' => [
  173. #       '      ',
  174. #       '     o',
  175. #       '    oo',
  176. #       '    oo',
  177. #       '    oo',
  178. #       '    oo',
  179. #       '     o',
  180. #       '      ',
  181. #       '     o',
  182. #       '    oo',
  183. #       '    oo',
  184. #       '    oo',
  185. #       '    oo',
  186. #       '     o',
  187. #       '      '
  188. #   ],
  189. #   '2' => [
  190. #       ' oooo ',
  191. #       '  oo o',
  192. #       '    oo',
  193. #       '    oo',
  194. #       '    oo',
  195. #       '    oo',
  196. #       '  oo o',
  197. #       ' oooo ',
  198. #       'o oo  ',
  199. #       'oo    ',
  200. #       'oo    ',
  201. #       'oo    ',
  202. #       'oo    ',
  203. #       'o oo  ',
  204. #       ' oooo '
  205. #   ],
  206. #   '3' => [
  207. #       ' oooo ',
  208. #       '  oo o',
  209. #       '    oo',
  210. #       '    oo',
  211. #       '    oo',
  212. #       '    oo',
  213. #       '  oo o',
  214. #       ' oooo ',
  215. #       '  oo o',
  216. #       '    oo',
  217. #       '    oo',
  218. #       '    oo',
  219. #       '    oo',
  220. #       '  oo o',
  221. #       ' oooo '
  222. #   ],
  223. #   '4' => [
  224. #       '      ',
  225. #       'o    o',
  226. #       'oo  oo',
  227. #       'oo  oo',
  228. #       'oo  oo',
  229. #       'oo  oo',
  230. #       'o oo o',
  231. #       ' oooo ',
  232. #       '  oo o',
  233. #       '    oo',
  234. #       '    oo',
  235. #       '    oo',
  236. #       '    oo',
  237. #       '     o',
  238. #       '      '
  239. #   ],
  240. #   '5' => [
  241. #       ' oooo ',
  242. #       'o oo  ',
  243. #       'oo    ',
  244. #       'oo    ',
  245. #       'oo    ',
  246. #       'oo    ',
  247. #       'o oo  ',
  248. #       ' oooo ',
  249. #       '  oo o',
  250. #       '    oo',
  251. #       '    oo',
  252. #       '    oo',
  253. #       '    oo',
  254. #       '  oo o',
  255. #       ' oooo '
  256. #   ],
  257. #   '6' => [
  258. #       ' oooo ',
  259. #       'o oo  ',
  260. #       'oo    ',
  261. #       'oo    ',
  262. #       'oo    ',
  263. #       'oo    ',
  264. #       'o oo  ',
  265. #       ' oooo ',
  266. #       'o oo o',
  267. #       'oo  oo',
  268. #       'oo  oo',
  269. #       'oo  oo',
  270. #       'oo  oo',
  271. #       'o oo o',
  272. #       ' oooo '
  273. #   ],
  274. #   '7' => [
  275. #       ' oooo ',
  276. #       '  oo o',
  277. #       '    oo',
  278. #       '    oo',
  279. #       '    oo',
  280. #       '    oo',
  281. #       '     o',
  282. #       '      ',
  283. #       '     o',
  284. #       '    oo',
  285. #       '    oo',
  286. #       '    oo',
  287. #       '    oo',
  288. #       '     o',
  289. #       '      '
  290. #   ],
  291. #   '8' => [
  292. #       ' oooo ',
  293. #       'o oo o',
  294. #       'oo  oo',
  295. #       'oo  oo',
  296. #       'oo  oo',
  297. #       'oo  oo',
  298. #       'o oo o',
  299. #       ' oooo ',
  300. #       'o oo o',
  301. #       'oo  oo',
  302. #       'oo  oo',
  303. #       'oo  oo',
  304. #       'oo  oo',
  305. #       'o oo o',
  306. #       ' oooo '
  307. #   ],
  308. #   '9' => [
  309. #       ' oooo ',
  310. #       'o oo o',
  311. #       'oo  oo',
  312. #       'oo  oo',
  313. #       'oo  oo',
  314. #       'oo  oo',
  315. #       'o oo o',
  316. #       ' oooo ',
  317. #       '  oo o',
  318. #       '    oo',
  319. #       '    oo',
  320. #       '    oo',
  321. #       '    oo',
  322. #       '  oo o',
  323. #       ' oooo '
  324. #   ],
  325. #   '-deg' => [
  326. #       ' oo ',
  327. #       'o  o',
  328. #       'o  o',
  329. #       ' oo ',
  330. #       '    ',
  331. #       '    ',
  332. #       '    ',
  333. #       '    ',
  334. #       '    ',
  335. #       '    ',
  336. #       '    ',
  337. #       '    ',
  338. #       '    ',
  339. #       '    '
  340. #   ]
  341. # );
  342.  
  343. #my $old_temp = 0;
  344. #sub icon_refresh {
  345. #   my $val = int(shift() || 0);
  346. #   return if ($old_temp == $val);
  347. #   $old_temp = $val;
  348. #   my $w = 24;
  349. #   my $h = 24;
  350. #   my ($i, $j, $k) = (0, 0, 0);
  351. #   my $pixbuf = $img->get_pixbuf();
  352. #   my @data = (
  353. #       sprintf('%d %d 4 1', $w, $h),
  354. #       '# c None',
  355. #       '  c '.COLOR_BG,
  356. #       'o c '.COLOR_FG,
  357. #       '. c '.COLOR_BORDER
  358. #   );
  359. #   push(@data, '#' x $w);
  360. #   push(@data, '##'.('.' x ($w - 4)).'##');
  361. #   $j++;
  362. #   my $h_top = int(($h - $nums{'-h'}) / 2 + 0.5);
  363. #   while ($j <= $h_top - 2) {
  364. #       push(@data, '#.'.(' ' x ($w - 4)).'.#');
  365. #       $j++;
  366. #   }
  367. #   my @nums = split(//, int($val)."");
  368. #   my $w_left = int(($w - ($nums{'-w'} * (scalar(@nums) - 1) + (scalar(@nums) - 1))) / 2) - length($nums{'-deg'}->[0]) - 1;
  369. #   push(@nums, '-deg');
  370. #   $k = 0;
  371. #   while ($k < $nums{'-h'}) {
  372. #       my $ln = '#.'.(' ' x ($w_left - 2));
  373. #       foreach (@nums) {
  374. #           $ln .= $nums{$_}->[$k] || (' ' x ($nums{'-w'} - 2));
  375. #           $ln .= ' ';
  376. #       }
  377. #       $k++;
  378. #       $ln .= (' ' x ($w - length($ln) - 2)).'.#';
  379. #       push(@data, $ln);
  380. #       $j++;
  381. #   }
  382. #   while ($j < $h - 3) {
  383. #       push(@data, '#.'.(' ' x ($w - 4)).'.#');
  384. #       $j++;
  385. #   }
  386. #   push(@data, '##'.('.' x ($w - 4)).'##');
  387. #   push(@data, '#' x $w);
  388. #   my $tmp = Gtk2::Gdk::Pixbuf->new_from_xpm_data(@data);
  389. #   $img->set_from_pixbuf($tmp);
  390. #   $tt->set_tip($eventbox, sprintf('CPU temperature: %.01f%sC', $val, chr(176)));
  391. #}
  392.  
  393. Gtk2->init();
  394. &get_cmdline;
  395. print $ln;
  396. #$icon = Gtk2::TrayIcon->new("TempSensor_Applet");
  397. #$eventbox = Gtk2::EventBox->new();
  398. #$img = Gtk2::Image->new();
  399. #$eventbox->add($img);
  400. #$icon->add($eventbox);
  401. #$tt = Gtk2::Tooltips->new();
  402. #&icon_refresh(&lm_get_temp());
  403. #$timeout = Glib::Timeout->add(1500, sub {
  404. #   &icon_refresh(&lm_get_temp());
  405. #   1;
  406. #});
  407. #$icon->show_all();
  408. Gtk2->main();
  409. exit $?;
Advertisement
Add Comment
Please, Sign In to add comment