summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortv <tv@xso>2011-08-22 12:48:27 +0200
committertv <tv@xso>2011-08-22 12:48:27 +0200
commit624a21ce26f49950594f4c072d81cb73e29a18fa (patch)
tree61e2ac2d7069e0cffdda8c7c038aa2e1288f9a8e
parent45ceee319c70522d821f65505735bc514d123df5 (diff)
parent9fdb1fc7da782eba9a61da55349cd814f8fb13da (diff)
Merge branch 'master' of github.com:krebscode/painload
-rwxr-xr-xbtc/mtgox/json_ticker_helper.py7
-rwxr-xr-xbtc/mtgox/ticker_text.sh3
-rw-r--r--cholerab/bling/krebs-v2_320x240.pngbin0 -> 1210 bytes
-rw-r--r--cholerab/bling/krebs_inverse_r0ket.gifbin0 -> 508 bytes
-rw-r--r--cholerab/bling/krebs_plain_r0ket.gifbin0 -> 508 bytes
-rw-r--r--filebitch/README8
-rwxr-xr-xfilebitch/connect_narf.pl2
-rwxr-xr-xfilebitch/disconnect_narf.pl15
-rw-r--r--kachelmann/Makefile11
-rwxr-xr-x[-rw-r--r--]kachelmann/changes8
-rwxr-xr-xkachelmann/wetter6
-rw-r--r--morse/Makefile3
-rw-r--r--oncology/lcd4linux.conf551
13 files changed, 593 insertions, 21 deletions
diff --git a/btc/mtgox/json_ticker_helper.py b/btc/mtgox/json_ticker_helper.py
new file mode 100755
index 00000000..727dd594
--- /dev/null
+++ b/btc/mtgox/json_ticker_helper.py
@@ -0,0 +1,7 @@
+#!/usr/bin/python
+
+import json,sys
+
+result = json.load(sys.stdin)
+
+print "High: " + str(result["ticker"]["high"]) + " Low: " + str(result["ticker"]["low"]) + " Last: " + str(result["ticker"]["last"])
diff --git a/btc/mtgox/ticker_text.sh b/btc/mtgox/ticker_text.sh
new file mode 100755
index 00000000..2bcac134
--- /dev/null
+++ b/btc/mtgox/ticker_text.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+dirname=`dirname $(readlink -f $0)`
+$dirname/mtgox.ticker | python $dirname/json_ticker_helper.py
diff --git a/cholerab/bling/krebs-v2_320x240.png b/cholerab/bling/krebs-v2_320x240.png
new file mode 100644
index 00000000..cae1e835
--- /dev/null
+++ b/cholerab/bling/krebs-v2_320x240.png
Binary files differ
diff --git a/cholerab/bling/krebs_inverse_r0ket.gif b/cholerab/bling/krebs_inverse_r0ket.gif
new file mode 100644
index 00000000..58c753e7
--- /dev/null
+++ b/cholerab/bling/krebs_inverse_r0ket.gif
Binary files differ
diff --git a/cholerab/bling/krebs_plain_r0ket.gif b/cholerab/bling/krebs_plain_r0ket.gif
new file mode 100644
index 00000000..d246d0c7
--- /dev/null
+++ b/cholerab/bling/krebs_plain_r0ket.gif
Binary files differ
diff --git a/filebitch/README b/filebitch/README
index 177bb374..5ae3a666 100644
--- a/filebitch/README
+++ b/filebitch/README
@@ -1,12 +1,14 @@
-The connec_sh script morses the IP + "connected" when a user connects to filebitchs proftpd server.
+The connect_narf.pl script morses the IP + "connected" when a user connects to filebitchs proftpd server.
+The disconnect_narf.pl scritp will do the obvious opposite.
It will hopefully drive someone crazy.
To make it run you need to add some lines to your proftpd config.
I decided not to let Krebs do this as I didn't want to break your FTP Server (I know FTP is broken by default).
The 5 necessary lines are:
-ExtendedLog /var/log/proftpd/ftp_auth.log AUTH auth
+
<IfModule mod_exec.c>
ExecEngine on
- ExecOnConnect "/krebs/filebitch/connect_narf.pl"
+ ExecOnConnect "/krebs/filebitch/connect_narf.pl %a"
+ ExecOnExit "/krebs/filebitch/disconnect_narf.pl %a"
</IfModule>
diff --git a/filebitch/connect_narf.pl b/filebitch/connect_narf.pl
index 97cc7750..8e984150 100755
--- a/filebitch/connect_narf.pl
+++ b/filebitch/connect_narf.pl
@@ -14,5 +14,5 @@ $ip =~ s/\b(25[0-5]|2[0-4][0-9]|[1]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[1]?[0-9]
system("morse -l 42 -f 2000 $ip");
system("morse -l 42 -f 3000 \"connected\"");
-# my $ip = "USER";
+# Uncomment the beep below to play the enterprise connect sound
# system("beep -l 42 -f 2000 -D 42 -n -l 42 -f 3337");
diff --git a/filebitch/disconnect_narf.pl b/filebitch/disconnect_narf.pl
index af7bea6c..77fbf743 100755
--- a/filebitch/disconnect_narf.pl
+++ b/filebitch/disconnect_narf.pl
@@ -1,15 +1,16 @@
#!/usr/bin/perl
#Please add the following to your proftpd config file
-#ExtendedLog /var/log/proftpd/ftp_auth.log AUTH auth
-#and
#<IfModule mod_exec.c>
# ExecEngine on
-# ExecOnExit "/krebs/filebitch/disconnect_narf.pl"
+# ExecOnExit "/krebs/filebitch/connect_narf.pli %a"
#</IfModule>
-#$ip = system("tail -n 1 /var/log/proftpd/ftp_auth.log");
+$ip = $ARGV[0];
#I'm very sorry for this regex, but i only wanted it to get _real_ IPv4 Adresses of the log file, not any kind of timestamp bullshit
-#$ip =~ s/\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b//g;
+$ip =~ s/\b(25[0-5]|2[0-4][0-9]|[1]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[1]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[1]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[1]?[0-9][0-9]?)\b//g;
#getting some guys sitting next to the Server pissed :)
-my $ip = "USER";
-system("beep -l 42 -f 2000 -D 42 -n -l 42 -f 1000");
+system("morse -l 42 -f 2000 $ip");
+system("morse -l 42 -f 3000 \"disconnected\"");
+
+# Uncomment the beep below to play the enterprise connect sound
+# system("beep -l 42 -f 2000 -D 42 -n -l 42 -f 3337");
diff --git a/kachelmann/Makefile b/kachelmann/Makefile
index 7fa3ec2d..3343d941 100644
--- a/kachelmann/Makefile
+++ b/kachelmann/Makefile
@@ -1,8 +1,7 @@
.PHONY: infect
-INSTALL_DIR = /root/bin/
-infect:
- mkdir -p /tmp/kachelmann/
- cp conditions ${INSTALL_DIR}
- mv ${INSTALL_DIR}conditions ${INSTALL_DIR}kachelmann
- chmod +x ${INSTALL_DIR}kachelmann
+install:
+ # punani -Ei w3m php php-xml-simple
+ ln -s $$PWD/conditions ../bin/conditions
+ ln -s $$PWD/wetter ../bin/wetter
+ ln -s ${INSTALL_DIR}conditions ${INSTALL_DIR}kachelmann
diff --git a/kachelmann/changes b/kachelmann/changes
index 1875dabd..22116967 100644..100755
--- a/kachelmann/changes
+++ b/kachelmann/changes
@@ -10,15 +10,15 @@ my $condition_store = undef;
my $data_old = $condition_store;
while (1) {
&xml_update();
+ $data_old = $data_new;
$data_new = $condition_store;
- if($data_new == $data_old){
- system("espeak Das Wetter hat sich von $data_old in $data_new verändert");
+ if($data_new ne $data_old){
+ system("espeak \"Das Wetter hat sich von $data_old in $data_new verändert\n\"");
}
sleep 300;
- $data_new = $data_old;
}
sub xml_update(){
- $xml_store = system("w3m -dump \"http://www.google.com/ig/api?weather=70327-stuttgart&hl=de\"");
+ $xml_store = `w3m -dump "http://www.google.com/ig/api?weather=70327-stuttgart&hl=de"`;
$xml_store = $xml->XMLin($xml_store);
$condition_store = $xml_store->{weather}->{current_conditions}->{condition}->{data};
}
diff --git a/kachelmann/wetter b/kachelmann/wetter
new file mode 100755
index 00000000..957e13e2
--- /dev/null
+++ b/kachelmann/wetter
@@ -0,0 +1,6 @@
+#!/usr/bin/perl
+use XML::Simple;
+my $result = `w3m -dump "http://www.google.com/ig/api?weather=70327-stuttgart&hl=de"`;
+my $xml = new XML::Simple;
+my $data = $xml->XMLin($result);
+print ("$data->{weather}->{current_conditions}->{condition}->{data} bei $data->{weather}->{current_conditions}->{temp_c}->{data} Grad Zelsius\n");
diff --git a/morse/Makefile b/morse/Makefile
new file mode 100644
index 00000000..2afa845e
--- /dev/null
+++ b/morse/Makefile
@@ -0,0 +1,3 @@
+.phony: all
+all:
+ ln -fs $$PWD/morse.sh ../bin/morse
diff --git a/oncology/lcd4linux.conf b/oncology/lcd4linux.conf
new file mode 100644
index 00000000..c8cbe75e
--- /dev/null
+++ b/oncology/lcd4linux.conf
@@ -0,0 +1,551 @@
+Layout 'Krebs'
+Display 'DPF'
+
+Variables {
+ # Ticks:
+ second 1000
+ minute 60 * second
+
+ # Standard Dimensions:
+ linesize 53 # max line length, for status lines etc.
+ width100 51 # full width after padding (border)
+ width050 24 # 1/2 of full width
+ width033 17 # 1/3 of full width
+ width025 12 # 1/4 of full width
+ width010 5 # 1/10 of full width
+
+ # Colors:
+ # ToDo: Alphakanal ausnutzen
+ black '000000'
+ white 'ffffff'
+ red 'ff0000'
+ darkblue '000066'
+ lightgray 'b2b2b2'
+ darkgray '191919'
+ barcolor0 '5f5fff'
+ barcolor1 'ff5f5c'
+
+ # To be set later by timers:
+ FileMsg 'Dummy'
+}
+
+Display dpf {
+ Driver 'DPF'
+ Port 'usb0'
+ Font '6x8'
+ Foreground white
+ Background darkblue
+ Basecolor darkblue
+}
+
+Widget System {
+ class 'Text'
+ expression '*** ' . uname('nodename') . ' '. netinfo::ipaddr('eth0') . ' ***'
+ width linesize
+ align 'C'
+ update 0
+ Background lightgray
+ Foreground darkgray
+}
+
+Widget Time {
+ class 'Text'
+ expression strftime('%a, %d.%m.%Y %H:%M:%S', time()) . ' Up: ' . uptime('%d days %H:%M:%S')
+ width linesize
+ align 'C'
+ update 1 * second
+ Background lightgray
+ Foreground darkgray
+}
+
+Widget Busy {
+ class 'Text'
+ expression proc_stat::cpu('busy', 0.5 * second)
+ prefix 'Busy'
+ postfix '%'
+ width width050
+ precision 1
+ align 'R'
+ update 0.5 * second
+}
+
+Widget BusyBar {
+ class 'Bar'
+ expression proc_stat::cpu('busy', 0.5 * second)
+ expression2 proc_stat::cpu('system', 0.5 * second)
+ length width050
+ direction 'E'
+ update 0.5 * second
+ Background darkgray
+ BarColor0 barcolor0
+ BarColor1 barcolor1
+}
+
+Widget Load {
+ class 'Text'
+ expression loadavg(1)
+ prefix 'Load'
+ postfix loadavg(1) > 1.0 ? '!' : ' '
+ width width050
+ precision 1
+ align 'R'
+ update 0.5 * second
+# Foreground loadavg(1) > 1.0 ? red : white
+}
+
+Widget LoadBar {
+ class 'Bar'
+ expression loadavg(1)
+ max 4.0
+ length width050
+ direction 'E'
+ update 0.5 * second
+ Background darkgray
+ BarColor0 barcolor0
+ BarColor1 barcolor1
+}
+
+Widget Disk {
+ class 'Text'
+ # disk.[rw]blk return blocks, we assume a blocksize of 512
+ # to get the number in kB/s we would do blk*512/1024, which is blk/2
+ # expression (proc_stat::disk('.*', 'rblk', 0.5 * second)+proc_stat::disk('.*', 'wblk', 0.5 * second))/2
+ # with kernel 2.6, disk_io disappeared from /proc/stat but moved to /proc/diskstat
+ # therefore you have to use another function called 'diskstats':
+ expression (diskstats('sd[a-z]$', 'read_sectors', 0.5 * second) + diskstats('sd[a-z]$', 'write_sectors', 0.5 * second)) / 2 / 1024
+ prefix 'Disk'
+ postfix ' MB/s'
+ width width050
+ precision 1
+ align 'R'
+ update 0.5 * second
+}
+
+Widget DiskBar {
+ class 'Bar'
+ #expression proc_stat::disk('.*', 'rblk', 0.5 * second)
+ #expression2 proc_stat::disk('.*', 'wblk', 0.5 * second)
+ # for kernel 2.6:
+ expression diskstats('sd[a-z]$', 'read_sectors', 0.5 * second) / 2 / 1024
+ expression2 diskstats('sd[a-z]$', 'write_sectors', 0.5 * second) / 2 / 1024
+ length width050
+ direction 'E'
+ update 0.5 * second
+ Background darkgray
+ BarColor0 barcolor0
+ BarColor1 barcolor1
+}
+
+Widget Eth0 {
+ class 'Text'
+ expression (netdev('eth0', 'Rx_bytes', 0.5 * second) + netdev('eth0', 'Tx_bytes', 0.5 * second)) / 1024
+ prefix 'eth0'
+ postfix ' KB/s'
+ width width050
+ precision 1
+ align 'R'
+ update 0.5 * second
+}
+
+Widget Eth0Bar {
+ class 'Bar'
+ expression netdev('eth0', 'Rx_bytes', 0.5 * second) / 1024
+ expression2 netdev('eth0', 'Tx_bytes', 0.5 * second) / 1024
+ length width050
+ direction 'E'
+ update 0.5 * second
+ Background darkgray
+ BarColor0 barcolor0
+ BarColor1 barcolor1
+}
+
+Widget Eth0Traffic {
+ class 'Text'
+ expression (netdev('eth0', 'Rx_bytes', 0)+netdev('eth0', 'Tx_bytes', 0))/1024/1024/1024
+ prefix 'Traffic:'
+ postfix ' GB'
+ width 21
+ precision 3
+ align 'R'
+ update 10 * second
+}
+
+Widget MemoryTitle {
+ class 'Text'
+ expression 'Memory/Swap'
+ width width050
+ align 'L'
+ update 0
+}
+
+Widget MemoryTotal {
+ class 'Text'
+ expression meminfo('MemTotal') / 1024
+ prefix 'Memory Total '
+ postfix ' MB'
+ width width050
+ precision 0
+ align 'R'
+ update 0
+}
+
+Widget MemoryFree {
+ class 'Text'
+ expression (meminfo('MemFree') + meminfo('Cached')) / 1024
+ prefix 'Memory Free '
+ postfix ' MB'
+ width width050
+ precision 0
+ align 'R'
+ update 1 * second
+}
+
+Widget MemorySwappedTotal {
+ class 'Text'
+ expression (meminfo('SwapTotal')) / 1024
+ prefix 'Swap Total '
+ postfix ' MB'
+ width width050
+ precision 0
+ align 'R'
+ update 1 * second
+}
+
+Widget MemorySwappedFree {
+ class 'Text'
+ expression (meminfo('SwapTotal') - meminfo('SwapUsed')) / 1024
+ prefix 'Swap Free''
+ postfix ' MB'
+ width width050
+ precision 0
+ align 'R'
+ update 1 * second
+}
+
+Widget MemorySwappedUsed {
+ class 'Text'
+ expression (meminfo('SwapTotal') - meminfo('SwapFree')) / 1024
+ prefix 'Swap Used '
+ postfix ' MB'
+ width width050
+ precision 0
+ align 'R'
+ update 1 * second
+}
+
+Widget LoggedInTitle {
+ class 'Text'
+ expression 'Logged in users'
+ width width050
+ align 'L'
+ update 0
+}
+
+Widget LoggedIn {
+ class 'Text'
+ expression exec('who | awk \' { print $1 }\' | sort -ud | tr "\n" " "')
+ width width050
+ align 'L'
+ update 2 * second
+}
+
+Widget FSSpaceTitle {
+ class 'Text'
+ expression 'Disk Space available'
+ width width050
+ align 'L'
+ update 0
+}
+
+Widget FSSpace1 {
+ class 'Text'
+ expression statfs('/', 'bavail') * statfs('/', 'bsize') / 1024 / 1024 / 1024
+ prefix '/ (Root FS)'
+ postfix ' GB'
+ width width050
+ precision 2
+ align 'R'
+ update 10 * second
+}
+
+Widget HDDTempTitle {
+ class 'Text'
+ expression 'Disk Temperature°C'
+ width width050
+ align 'L'
+ update 0
+}
+
+Widget HDDTemp1 {
+ class 'Text'
+ expression hddtemp('/dev/sda')
+ width width010
+ precision 1
+ align 'R'
+ update 10 * second
+}
+
+Widget HDDTemp2 {
+ class 'Text'
+ expression hddtemp('/dev/sdb')
+ width width010
+ precision 1
+ align 'R'
+ update 10 * second
+}
+
+Widget HDDTemp3 {
+ class 'Text'
+ expression hddtemp('/dev/sdc')
+ width width010
+ precision 1
+ align 'R'
+ update 10 * second
+}
+
+Widget ServicesTitle {
+ class 'Text'
+ expression 'Services'
+ width width100
+ align 'C'
+ Background lightgray
+ Foreground darkgray
+}
+
+Widget ApacheStatus {
+ class 'Text'
+ expression 'Apache '
+ width width050
+ postfix strstr(exec('/etc/init.d/apache2 status', 10 * second), 'running') > 0 ? 'up' : 'down!'
+ update 10 * second
+}
+
+Widget BindDNSStatus {
+ class 'Text'
+ expression 'Bind DNS '
+ width width050
+ postfix strstr(exec('/etc/init.d/bind9 status', 10 * second), 'running') > 0 ? 'up' : 'down!'
+ update 10 * second
+}
+
+Widget MuninStatus {
+ class 'Text'
+ expression 'Monitoring '
+ width width050
+ postfix strstr(exec('/etc/init.d/munin-node status', 10 * second), 'running') > 0 ? 'up' : 'down!'
+ update 10 * second
+}
+
+Widget MiniDLNAStatus {
+ class 'Text'
+ expression 'MiniDLNA '
+ width width050
+ postfix strstr(exec('/etc/init.d/minidlna status', 10 * second), 'running') > 0 ? 'up' : 'down!'
+ update 10 * second
+}
+
+Widget MySQLStatus {
+ class 'Text'
+ expression 'MySQL '
+ width width050
+ postfix strstr(exec('/sbin/status mysql', 10 * second), 'running') > 0 ? 'up' : 'down!'
+ update 10 * second
+}
+
+Widget MythTVStatus {
+ class 'Text'
+ expression 'MythTV Backend '
+ width width050
+ postfix strstr(exec('/sbin/status mythtv-backend', 10 * second), 'running') > 0 ? 'up' : 'down!'
+ update 10 * second
+}
+
+Widget PostfixStatus {
+ class 'Text'
+ expression 'Postfix '
+ width width050
+ postfix strstr(exec('/etc/init.d/postfix status', 10 * second), 'not running') > 0 ? 'down!' : 'up'
+ update 10 * second
+}
+
+Widget ProFTPStatus {
+ class 'Text'
+ expression 'ProFTP '
+ width width050
+ postfix strstr(exec('/etc/init.d/proftpd status', 10 * second), 'not running') > 0 ? 'down!' : 'up'
+ update 10 * second
+}
+
+Widget SambaStatus {
+ class 'Text'
+ expression 'Samba '
+ width width050
+ postfix strstr(exec('/sbin/status smbd', 10 * second), 'running') > 0 ? 'up' : 'down!'
+ update 10 * second
+}
+
+Widget SambaStatusDS {
+ class 'Text'
+ expression 'Samba '
+ width width050
+ postfix strstr(exec('/etc/init.d/samba status', 10 * second), 'running') > 0 ? 'up' : 'down!'
+ update 10 * second
+}
+
+Widget SSHStatus {
+ class 'Text'
+ expression 'SSH '
+ width width050
+ postfix strstr(exec('/sbin/status ssh', 10 * second), 'running') > 0 ? 'up' : 'down!'
+ update 10 * second
+}
+
+Widget SSHStatusDS {
+ class 'Text'
+ expression 'SSH '
+ width width050
+ postfix strstr(exec('/etc/init.d/ssh status', 10 * second), 'running') > 0 ? 'up' : 'down!'
+ update 10 * second
+}
+
+Widget SWRAIDStatus {
+ class 'Text'
+ expression 'SW RAID '
+ width width050
+ postfix strstr(exec('cat /proc/mdstat', 10 * second), '[UUU]') > 0 ? 'up' : 'attention!'
+ update 10 * second
+}
+
+Widget TwonkyStatus {
+ class 'Text'
+ expression 'Twonkymedia '
+ width width050
+ postfix strstr(exec('/sbin/status twonkymedia', 10 * second), 'running') > 0 ? 'up' : 'down!'
+ update 10 * second
+}
+
+Widget FileTitle {
+ class 'Text'
+ expression 'NumPad Logging'
+ width width100
+ align 'C'
+ Background lightgray
+ Foreground darkgray
+}
+
+Widget SetFileMsg {
+ class 'Timer'
+ expression FileMsg = exec('tail -n 1 /root/dskeylistener/listener.log', 2 * second)
+ active 1
+ update 2 * second
+}
+
+Widget File1 {
+ class 'Text'
+ expression substr(FileMsg, 0 * width100, width100)
+ width width100
+ align 'L'
+ Background darkgray
+ update 2 * second
+}
+
+Widget File2 {
+ class 'Text'
+ expression substr(FileMsg, 1 * width100, width100)
+ width width100
+ align 'L'
+ Background darkgray
+ update 2 * second
+}
+
+Widget File3 {
+ class 'Text'
+ expression substr(FileMsg, 2 * width100, width100)
+ width width100
+ align 'L'
+ Background darkgray
+ update 2 * second
+}
+
+Widget Weather1 {
+ class 'Text'
+ expression exec('/krebs/kachelmann/wetter', 10 * second)
+ prefix 'Wetter'
+ width width100
+ align 'L'
+ Background darkgray
+ update 10 * second
+}
+
+Widget Debug {
+ class 'Text'
+ expression 'Serverdisplay - pkern.at'
+ width linesize
+ align 'C'
+ Foreground lightgray
+}
+
+Widget na {
+ class 'Text'
+ expression 'n/a'
+ width 3
+ align 'L'
+}
+
+Widget Bgnd {
+ class 'Image'
+ file '/krebs/cholerab/bling/krebs-v2_320x240.png '
+ reload 0
+ update 0
+ inverted 0
+ visible 1
+}
+
+Layout Krebs {
+ Row01.Col01 'System'
+ Row02.Col01 'Time'
+ Row04.Col02 'Busy'
+ Row05.Col02 'BusyBar'
+ Row07.Col02 'Load'
+ Row08.Col02 'LoadBar'
+ Row10.Col02 'Disk'
+ Row11.Col02 'DiskBar'
+ Row13.Col02 'Eth0'
+ Row14.Col02 'Eth0Bar'
+ Row15.Col02 'Eth0Traffic'
+
+ Row04.Col28 'MemoryTitle'
+ Row05.Col29 'MemoryTotal'
+ Row06.Col29 'MemoryFree'
+ Row07.Col29 'MemorySwappedTotal'
+ Row08.Col29 'MemorySwappedUsed'
+ Row10.Col28 'LoggedInTitle'
+ #Row11.Col29 'LoggedIn'
+ Row13.Col28 'FSSpaceTitle'
+ Row14.Col29 'FSSpace1'
+
+ Row17.Col02 'ServicesTitle'
+ Row18.Col02 'BindDNSStatus'
+ Row19.Col02 'MuninStatus'
+ Row20.Col02 'ApacheStatus'
+ Row21.Col02 'MiniDLNAStatus'
+ Row18.Col29 'PostfixStatus'
+ Row19.Col29 'ProFTPStatus'
+ Row20.Col29 'SambaStatusDS'
+ Row21.Col29 'SSHStatusDS'
+
+ Row23.Col02 'Weather1'
+
+ Row25.Col02 'FileTitle'
+ Row26.Col02 'File1'
+ Row27.Col02 'File2'
+ Row28.Col02 'File3'
+
+ Row30.Col01 'Debug'
+
+ #Timer1 'SetFileMsg'
+
+ Layer 2 {
+ X1.Y1 'Bgnd'
+ }
+}