Welcome to the IPFire Wiki

This wiki is a community-maintained resource about everything there is to know about IPFire. Join us and help us improving it!

Looking for something?

Use the search and find answers to everything about IPFire. If you cannot find what you are looking for, join our community and talk to fellow IPFire users, developers and everybody else involved in the project.

IPFire Community

Sample LCD4Linux Config File

  Driver    'Crystalfontz'
  Model     '634'
  Port      '/dev/ttyS0'
  Speed     19200
  Contrast  85
  Backlight 20
  Size    '20x4'
  Icons     1
}

Widget Time {
  class 'Text'
  expression strftime('%l:%M%p',time())
  width 7
  align 'L'
  update minute
}

Widget OS {
  class 'Text'
    expression '*'.uname('sysname').' '.uname('release').'*'
  width 20
  align 'M'
  speed 400
  update tick
}

Widget CPU {
  class  'Text'
  expression  uname('machine')
  prefix 'CPU '
  width  9
  align  'L'
  update tick
}

Widget RAM {
  class  'Text'
  expression meminfo('MemTotal')/1024
  postfix 'MB RAM'
  width  10
  precision 0
  align  'M'
  update tick
}

Widget RAMFree {
  class  'Text'
  expression meminfo('MemFree')/1024
  postfix 'MB F'
  width  10
  precision 0
  align  'L'
  update tick
}

Widget RAMUsed {
  class  'Text'
  expression meminfo('Active')/1024
  postfix 'MB U'
  width  10
  precision 0
  align  'R'
  update tick
}

Widget Busy {
  class 'Text'
  expression proc_stat::cpu('busy', tock)
  prefix 'Busy'
  postfix '%'
  width 10
  precision 1
  align 'R'
  update tick
}

Widget Load {
  class 'Text'
  expression loadavg(1)
  prefix 'Load'
  postfix loadavg(1)>1.0?'!':' '
  width 10
  precision 1
  align 'R'
  update tick
}

Widget Disk {
  class 'Text'
    expression (proc_stat::disk('.*', 'rblk', tick) + proc_stat::disk('.*', 'wblk', tick))/2
  prefix 'I/O'
  width 10
  precision 0
  align 'R'
  update tack
}

Widget red0 {
  class 'Text'
  expression (netdev('red0', 'Rx_bytes', tick)+netdev('red0', 'Tx_bytes', tick))/1024
  prefix 'WAN'
  postfix ' '
  width 10
  precision 0
  align 'R'
  update tick
}

Widget blue0 {
  class 'Text'
  expression (netdev('blue0', 'Rx_bytes', tick)+netdev('blue0', 'Tx_bytes', tick))/1024
  prefix 'WIFI'
  postfix ' '
  width 10
  precision 0
  align 'R'
  update tick
}

Widget green0 {
  class 'Text'
  expression (netdev('green0', 'Rx_bytes', tick)+netdev('green0', 'Tx_bytes', tick))/1024
  prefix 'LAN'
  postfix ' '
  width 10
  precision 0
  align 'R'
  update tick
}

Widget Temp {
  class 'Text'
    expression i2c_sensors('temp3_input')#*1.0324-67
  prefix 'Temp'
  width 9
  precision 1
  align 'R'
  update tick
}

Widget Uptime {
  class 'Text'
  expression uptime('%dD %H:%M')
  width 12
  align 'R'
  prefix 'Up:'
  update minute
}

Widget CoreNum {
  class 'Text'
  expression exec('cat /opt/pakfire/db/core/mine', 1000)
  width 9
  align 'R'
  prefix 'Core: '
  update minute
}

Layout Default {
  Row1 {
Col1  'Time'
Col9  'Uptime'
    }
  Row2 {
Col1  'Load'
      Col11 'Temp'
  }
  Row3 {
      Col1  'red0'
      Col11 'green0'
  }
  Row4 {
Col1 'blue0'
Col11 'CoreNum'
  }
}

Display 'CF634'

Layout 'Default'

Variables {
 tick 500
 tack 100
 tock 1000
 minute 60000
 hour 3600000
}
`

## Sample LCD4Linux Config File for picoLCD 256x64 Sideshow
`
  Driver   'picoLCDGraphic'
  Size     '256x64'
  Contrast  200
  Backlight 1
  Inverted   1
  Icons     1
}

Variables {
 tick 500
 tack 100
 minute 60000
}



#Plugin MySQL {
#    server 'gsmlandia.com' # if none, localhost assumed
#    port 3306          # if none, MySQL default assumed
#    user 'lcd4linux'       # if none, lcd4linux unix owner assumed
#    password 'lcd4linux'   # if none, empty password assumed
#    database 'lcd4linux'   # MUST be specified
#}

#Plugin Pop3 {
#   server1 'localhost'
#   port1 110
#   user1 'user'
#   password1 'pass'
#}


Widget OS {
  class 'Text'
    expression '*** '.uname('sysname').' '.uname('release').' ***'
  width 20
  align 'M'
  style 'bold'
  speed 50
  update tick
}



Widget HDDTemp {
  class 'Text'
  expression 'IDE Temp'.exec ('hddtemp /dev/sda | cut -f 3 -d :', 1000)
  width 14
  align 'L'
  update 1000
}

Widget FSSpace {
  class  'Text'
    expression a=((statfs('/', 'bavail')*statfs('/', 'bsize'))/1024/1024);b=((statfs('/backup/', 'bavail')*statfs('/backup/', 'bsize'))/1024/1024);c='/ '.' '.a.'MB  /backup/ '.b.' MB'
  prefix 'Free Space:'
  postfix ''
  width  42
  align  'M'
  #precision 0
  update 1000
}


Widget BottomTicker {
  class  'Text'
  expression uname('sysname').' '.uname('nodename').' '.uname('release').' '.uname('machine').' '.cpuinfo('model name')
  #expression strftime('%A %d/%m %H:%M:%S',time()).' '.cpuinfo('model name').' '. uptime('%d days %H:%M:%S')
  #expression strftime('%A %d/%m %H:%M:%S',time())
  prefix ''
  width  42
  align  'M'
  speed 1000
  update tick
  style 'bold'
}

#Widget CPU {
#    class  'Text'
#    expression  uname('machine')
#    prefix 'CPU '
#    width  9
#    align  'L'
#    style test::onoff(7)>0?'bold':'norm'
#    update tick
#}


Widget CPULabel {
  class 'text'
  expression 'CPU:'
  width 4
  align 'L'
  style 'bold'
}

Widget CPU {
  class 'Text'
  expression proc_stat::cpu('busy', 500)
  prefix ''
  postfix '% '
  width 5
  precision 0
  align 'R'
  update tick
}

Widget CPUBar {
  class 'Bar'
  expression  proc_stat::cpu('busy',   500)
  expression2 proc_stat::cpu('system', 500)
  length 10
  min 1
  max 100
  direction 'E'
  style 'H'
  update tick
}


Widget RAMLabel {
  class 'text'
  expression 'RAM:'
  width 4
  align 'L'
  style 'bold'
}


Widget RAMTotal {
  class  'Text'
  expression meminfo('MemTotal')/1024
  postfix  'MB FREE'
  width  11
  precision 0
  align  'L'
  update tick
}

Widget RAMFree {
  class  'Text'
  expression meminfo('MemFree')/1024
  prefix ''
  postfix '/'
  width  5
  precision 0
  align  'R'
  update tick
}

Widget IDELabel {
  class 'text'
  expression 'IDE:'
  width 4
  align 'L'
  style 'bold'
}

Widget IDEIn {
  class 'text'
  # In MB/s
  expression (diskstats('sda', 'read_sectors', 500))/2048
  prefix 'OUT '
  postfix 'MB'
  precision 2
  align 'R'
  width 10
  update tick
}

Widget IDEOut {
  class 'text'
  # In MB/s
  expression (diskstats('sda', 'write_sectors', 500))/2048
  prefix 'IN '
  postfix 'MB'
  precision 2
  align 'R'
  width 10
  update tick
}

Widget IDEBar {
  class 'Bar'
  expression  diskstats('sda', 'read_sectors',  500)
  expression2 diskstats('sda', 'write_sectors', 500)
  length 14
  direction 'E'
  style 'H'
  update tick
}

Widget ETHLabel {
  class 'text'
  expression 'ETH:'
  width 4
  align 'L'
  style 'bold'
}


Widget ETHIn {
  class 'Text'
  expression (netdev('eth0', 'Rx_bytes', 500))/1024
  prefix 'OUT'
  postfix 'KB'
  width 9
  precision 0
  align 'R'
  update tick
}

Widget ETHOut {
  class 'Text'
  expression (netdev('eth0', 'Tx_bytes', 500))/1024
  prefix 'IN'
  postfix 'KB'
  width 9
  precision 0
  align 'R'
  update tick
}

Widget ETHBar {
  class 'Bar'
  expression  netdev('eth0', 'Rx_bytes', 500)
  expression2 netdev('eth0', 'Tx_bytes', 500)
  length 14
  direction 'E'
  style 'H'
  update tick
}

Widget Time {
  class 'Text'
  expression strftime('%a,%d/%m %H:%M:%S',time())
  width 20
  align 'Left'
  update 1000
}

Widget Uptime {
  class 'Text'
  expression uptime('%d d %H:%M:%S')
  width 21
  align 'R'
  prefix 'Uptime '
  update 1000
}


#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', 500)+proc_stat::disk('.*', 'wblk', 500))/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('sda', 'read_sectors', 500) + diskstats('sda', 'write_sectors', 500)
#    prefix ''
#    postfix ' '
#    width 7
#    precision 0
#    align 'R'
#    update tick
#}

#Widget DiskBar {
#    class 'Bar'
#    #expression  proc_stat::disk('.*', 'rblk', 500)
#    #expression2 proc_stat::disk('.*', 'wblk', 500)
#    # for kernel 2.6:
#    expression  diskstats('sda', 'read_sectors',  500)
#    expression2 diskstats('sda', 'write_sectors', 500)
#    length 14
#    direction 'E'
#    update tack
#}


Widget PPP {
  class 'Text'
  expression (ppp('Rx:0', 500)+ppp('Tx:0', 500))
  prefix 'PPP'
  width 9
  precision 0
  align 'R'
  update tick
}

Widget Temp {
  class 'Text'
    expression i2c_sensors('temp_input3')*1.0324-67
  prefix 'Temp'
  width 9
  precision 1
  align 'R'
  update tick
}

Widget TempBar {
  class 'Bar'
    expression  i2c_sensors('temp_input3')*1.0324-67
  min 40
  max 80
  length 10
  direction 'E'
  update tack
}

Widget MySQLtest1 {
  class 'Text'
  expression MySQL::query('SELECT id FROM table1')
  width 20
  align 'R'
  prefix 'MySQL test:'
  update minute
}

Widget MySQLtest2 {
  class 'Text'
  expression MySQL::status()
  width 20
  align 'M'
  prefix 'Status: '
  update minute
}




# Icons

Widget Heartbeat {
  class 'Icon'
  speed 800
  Bitmap {
    Row1 '.....|.....'
    Row2 '.*.*.|.*.*.'
    Row3 '*****|*.*.*'
    Row4 '*****|*...*'
    Row5 '.***.|.*.*.'
    Row6 '.***.|.*.*.'
    Row7 '..*..|..*..'
    Row8 '.....|.....'
  }
}

Widget EKG {
  class 'Icon'
  speed 50
  Bitmap {
    Row1 '.....|.....|.....|.....|.....|.....|.....|.....'
    Row2 '.....|....*|...*.|..*..|.*...|*....|.....|.....'
    Row3 '.....|....*|...*.|..*..|.*...|*....|.....|.....'
    Row4 '.....|....*|...**|..**.|.**..|**...|*....|.....'
    Row5 '.....|....*|...**|..**.|.**..|**...|*....|.....'
    Row6 '.....|....*|...*.|..*.*|.*.*.|*.*..|.*...|*....'
    Row7 '*****|*****|****.|***..|**..*|*..**|..***|.****'
    Row8 '.....|.....|.....|.....|.....|.....|.....|.....'
  }
}
Widget Karo {
  class 'Icon'
  speed 200
  Bitmap {
    Row1 '.....|.....|.....|.....|..*..|.....|.....|.....'
    Row2 '.....|.....|.....|..*..|.*.*.|..*..|.....|.....'
    Row3 '.....|.....|..*..|.*.*.|*...*|.*.*.|..*..|.....'
    Row4 '.....|..*..|.*.*.|*...*|.....|*...*|.*.*.|..*..'
    Row5 '.....|.....|..*..|.*.*.|*...*|.*.*.|..*..|.....'
    Row6 '.....|.....|.....|..*..|.*.*.|..*..|.....|.....'
    Row7 '.....|.....|.....|.....|..*..|.....|.....|.....'
    Row8 '.....|.....|.....|.....|.....|.....|.....|.....'
  }
}
Widget Heart {
  class 'Icon'
  speed 250
  Bitmap {
    Row1 '.....|.....|.....|.....|.....|.....'
    Row2 '.*.*.|.....|.*.*.|.....|.....|.....'
    Row3 '*****|.*.*.|*****|.*.*.|.*.*.|.*.*.'
    Row4 '*****|.***.|*****|.***.|.***.|.***.'
    Row5 '.***.|.***.|.***.|.***.|.***.|.***.'
    Row6 '.***.|..*..|.***.|..*..|..*..|..*..'
    Row7 '..*..|.....|..*..|.....|.....|.....'
    Row8 '.....|.....|.....|.....|.....|.....'
  }
}
Widget Blob {
  class 'Icon'
  speed 250
  Bitmap {
    Row1 '.....|.....|.....'
    Row2 '.....|.....|.***.'
    Row3 '.....|.***.|*...*'
    Row4 '..*..|.*.*.|*...*'
    Row5 '.....|.***.|*...*'
    Row6 '.....|.....|.***.'
    Row7 '.....|.....|.....'
    Row8 '.....|.....|.....'
  }
}
Widget Wave {
  class 'Icon'
  speed 100
  Bitmap {
    Row1 '..**.|.**..|**...|*....|.....|.....|.....|.....|....*|...**'
    Row2 '.*..*|*..*.|..*..|.*...|*....|.....|.....|....*|...*.|..*..'
    Row3 '*....|....*|...*.|..*..|.*...|*....|....*|...*.|..*..|.*...'
    Row4 '*....|....*|...*.|..*..|.*...|*....|....*|...*.|..*..|.*...'
    Row5 '*....|....*|...*.|..*..|.*...|*....|....*|...*.|..*..|.*...'
    Row6 '.....|.....|....*|...*.|..*..|.*..*|*..*.|..*..|.*...|*....'
    Row7 '.....|.....|.....|....*|...**|..**.|.**..|**...|*....|.....'
    Row8 '.....|.....|.....|.....|.....|.....|.....|.....|.....|.....'
  }
}
Widget Squirrel {
  class 'Icon'
  speed 100
  Bitmap {
    Row1 '.....|.....|.....|.....|.....|.....'
    Row2 '.....|.....|.....|.....|.....|.....'
    Row3 '.....|.....|.....|.....|.....|.....'
    Row4 '**...|.**..|..**.|...**|....*|.....'
    Row5 '*****|*****|*****|*****|*****|*****'
    Row6 '...**|..**.|.**..|**...|*....|.....'
    Row7 '.....|.....|.....|.....|.....|.....'
    Row8 '.....|.....|.....|.....|.....|.....'
  }
}

Widget IOIcon {
  class 'Icon'
  speed 100
  Bitmap {
    Row1 '.....|.....|.....|.....|.....|.....'
    Row2 '...*.|.....|...*.|.....|...*.|.....'
    Row3 '*****|.....|*****|.....|*****|.....'
    Row4 '...*.|.....|...*.|.....|...*.|.....'
    Row5 '.*...|.....|.*...|.....|.*...|.....'
    Row6 '*****|.....|*****|.....|*****|.....'
    Row7 '.*...|.....|.*...|.....|.*...|.....'
    Row8 '.....|.....|.....|.....|.....|.....'
  }
}

Widget Lightning {
  class 'icon'
  speed 100
  visible cpu('busy', 500)-50
  bitmap {
        row1 '...***'
        row2 '..***.'
        row3 '.***..'
        row4 '.****.'
        row5 '..**..'
        row6 '.**...'
        row7 '**....'
        row8 '*.....'
  }
}

Widget Rain {
  class 'icon'
  speed 200
  bitmap {
    row1 '...*.|.....|.....|.*...|....*|..*..|.....|*....'
    row2 '*....|...*.|.....|.....|.*...|....*|..*..|.....'
    row3 '.....|*....|...*.|.....|.....|.*...|....*|..*..'
    row4 '..*..|.....|*....|...*.|.....|.....|.*...|....*'
    row5 '....*|..*..|.....|*....|...*.|.....|.....|.*...'
    row6 '.*...|....*|..*..|.....|*....|...*.|.....|.....'
    row7 '.....|.*...|....*|..*..|.....|*....|...*.|.....'
    row8 '.....|.....|.*...|....*|..*..|.....|*....|...*.'
  }
}


Widget GPO_Val1 {
  class 'Text'
  expression LCD::GPO(1)
  prefix 'GPO#1'
  width 10
  precision 0
  align 'R'
  update tick
}

Widget GPI_Val1 {
  class 'Text'
  expression LCD::GPI(1)
  prefix 'GPI#1'
  width 10
  precision 0
  align 'R'
  update tick
}

Widget GPO_Val4 {
  class 'Text'
  expression LCD::GPO(4)
  prefix 'GPO#4'
  width 10
  precision 0
  align 'R'
  update tick
}

Widget GPO_Test1 {
  class 'GPO'
    expression 255*test::onoff(1)
  update 300
}

Widget GPO_Test255 {
  class 'GPO'
  expression test::bar(0,255, 0, 1)
  update 100
}

Widget GPO_picolcd {
  class 'GPO'
  expression test::onoff(1)
  update 300
}

Widget CpuImage {
  class 'Image'
  file '/etc/picoLCDGraphic/Images/cpu_a.png'
  update 1000
  visible 1
  inverted 0
  reload 0
}

Widget HddImage {
  class 'Image'
  file '/etc/picoLCDGraphic/Images/hdd_a.png'
  update 1000
  visible 1
  inverted 0
  reload 0
}

Widget RamImage {
  class 'Image'
  file '/etc/picoLCDGraphic/Images/ram_a.png'
  update 1000
  visible 1
  inverted 0
  reload 0
}

Widget NetImage {
  class 'Image'
  file '/etc/picoLCDGraphic/Images/net_a.png'
  update 1000
  visible 1
  inverted 0
  reload 0
}

Widget FanImage {
  class 'Image'
  file '/etc/picoLCDGraphic/Images/fan_a.png'
  update 1000
  visible 1
  inverted 0
  reload 0
}


Layout picoLCD {
#    Layer 1 {
#       X0.Y0 'BandwidthImage'
#   }
#    Layer 1 {
#   X0.Y0 'CpuImage'
#    }
  Row1 {
    Col1 'CPULabel'
    Col6 'CPU'
    Col11 'CPUBar'
    Col21 'RAMLabel'
    Col26 'RAMFree'
    Col31 'RAMTotal'
  }
  Row2 {
    Col1 'IDELabel'
    Col6 'IDEIn'
    Col17 'IDEOut'
    Col28 'IDEBar'
  }
  Row3 {
    Col1 'FSSpace'
  }
  Row4 {
    Col1 'ETHLabel'
    Col6 'ETHIn'
    Col17 'ETHOut'
    Col28 'ETHBar'
  }
  Row7 {
    Col1 'Time'
    Col22 'Uptime'
  }

  Row8 {
    Col1 'Uptime'
    Col1 'BottomTicker'
  }
  #Layer 2 {
  # X0.Y0 'ImageTest'
  #}

#GPO1 'GPO_picolcd'
#GPO2 'GPO_picolcd'
#GPO8 'GPO_picolcd'
}

Display 'picoLCD'
Layout  'picoLCD'
Edit Page ‐ Yes, you can edit!

Older Revisions • Wednesday at 8:34 pm • Jon