From cc95d6f89282c9d66120f2a9b40a9aaff2f981bb Mon Sep 17 00:00:00 2001
From: fmertz <fireboxled@gmail.com>
Date: Wed, 24 Jun 2020 16:25:21 +0000
Subject: system display: T2564 Extend VyOS to support appliance LCDs

Added support for system LCDs under CLI system display

+data/templates/system-display/LCDd.conf.tmpl template for LCDd server configuration file
+data/templates/system-display/lcdproc.conf.tmpl template for lcdproc client configuration file
+interface-definitions/system-display.xml.in CLI for system display
+src/conf_mode/system-display.py processing code for system display
+src/systemd/lcdproc.service systemd service definition file for lcdproc client

CLI:
    system display model (SDEC|EZIO)
    system display config (enabled|disabled)
    system display show host (cpu|cpu-all|cpu-hist|disk|load-hist|memory|proc|uptime)
                        network interface <intName> alias <alias>
                                units (bps|Bps|pps)
                        clock (big|mini|date-time)
                        title <name>

    system display duration <s>
    system display hello <string>
    system display bye <string>
---
 data/templates/system-display/LCDd.conf.tmpl    | 1525 +++++++++++++++++++++++
 data/templates/system-display/lcdproc.conf.tmpl |  177 +++
 2 files changed, 1702 insertions(+)
 create mode 100644 data/templates/system-display/LCDd.conf.tmpl
 create mode 100644 data/templates/system-display/lcdproc.conf.tmpl

(limited to 'data/templates')

diff --git a/data/templates/system-display/LCDd.conf.tmpl b/data/templates/system-display/LCDd.conf.tmpl
new file mode 100644
index 000000000..0b605e09d
--- /dev/null
+++ b/data/templates/system-display/LCDd.conf.tmpl
@@ -0,0 +1,1525 @@
+### Autogenerted by system-display.py ##
+# LCDd.conf -- configuration file for the LCDproc server daemon LCDd
+#
+# This file contains the configuration for the LCDd server.
+#
+# The format is ini-file-like. It is divided into sections that start at
+# markers that look like [section]. Comments are all line-based comments,
+# and are lines that start with '#' or ';'.
+#
+# The server has a 'central' section named [server]. For the menu there is
+# a section called [menu]. Further each driver has a section which
+# defines how the driver acts.
+#
+# The drivers are activated by specifying them in a driver= line in the
+# server section, like:
+#
+#   Driver=curses
+#
+# This tells LCDd to use the curses driver.
+# The first driver that is loaded and is capable of output defines the
+# size of the display. The default driver to use is curses.
+# If the driver is specified using the -d <driver> command line option,
+# the Driver= options in the config file are ignored.
+#
+# The drivers read their own options from the respective sections.
+
+
+
+## Server section with all kinds of settings for the LCDd server ##
+[server]
+
+# Where can we find the driver modules ?
+# IMPORTANT: Make sure to change this setting to reflect your
+#            specific setup! Otherwise LCDd won't be able to find
+#            the driver modules and will thus not be able to
+#            function properly.
+# NOTE: Always place a slash as last character !
+DriverPath=/usr/lib/x86_64-linux-gnu/lcdproc/
+
+# Tells the server to load the given drivers. Multiple lines can be given.
+# The name of the driver is case sensitive and determines the section
+# where to look for further configuration options of the specific driver
+# as well as the name of the dynamic driver module to load at runtime.
+# The latter one can be changed by giving a File= directive in the
+# driver specific section.
+#
+# The following drivers are supported:
+#   bayrad, CFontz, CFontzPacket, curses, CwLnx, ea65, EyeboxOne, futaba,
+#   g15, glcd, glcdlib, glk, hd44780, icp_a106, imon, imonlcd,, IOWarrior,
+#   irman, joy, lb216, lcdm001, lcterm, linux_input, lirc, lis, MD8800,
+#   mdm166a, ms6931, mtc_s16209x, MtxOrb, mx5000, NoritakeVFD,
+#   Olimex_MOD_LCD1x9, picolcd, pyramid, rawserial, sdeclcd, sed1330,
+#   sed1520, serialPOS, serialVFD, shuttleVFD, sli, stv5730, svga, t6963,
+#   text, tyan, ula200, vlsys_m428, xosd, yard2LCD
+{%- if model == 'SDEC' %}
+Driver=sdeclcd
+{%- endif %}
+
+{%- if model == 'EZIO' %}
+Driver=hd44780
+{%- endif %}
+
+# Tells the driver to bind to the given interface. [default: 127.0.0.1]
+#Bind=127.0.0.1
+
+# Listen on this specified port. [default: 13666]
+#Port=13666
+
+# Sets the reporting level; defaults to warnings and errors only.
+# [default: 2; legal: 0-5]
+#ReportLevel=3
+
+# Should we report to syslog instead of stderr? [default: no; legal: yes, no]
+#ReportToSyslog=yes
+
+# User to run as.  LCDd will drop its root privileges and run as this user
+# instead. [default: nobody]
+User=nobody
+
+# The server will stay in the foreground if set to yes.
+# [default: no, legal: yes, no]
+#Foreground=yes
+
+# Hello message: each entry represents a display line; default: builtin
+Hello="{%- if hello %}{{ hello }}{%- else %}Welcome to VyOS{%- endif %}"
+
+# GoodBye message: each entry represents a display line; default: builtin
+GoodBye="{%- if bye %}{{ bye }}{%- else %}Bye from VyOS{%- endif %}"
+
+# Sets the interval in microseconds for updating the display.
+# [default: 125000 meaning 8Hz]
+#FrameInterval=125000
+
+# Sets the default time in seconds to displays a screen. [default: 4]
+WaitTime={%- if duration %}{{ duration }}{%- else%}4{%- endif %}
+
+# If set to no, LCDd will start with screen rotation disabled. This has the
+# same effect as if the ToggleRotateKey had been pressed. Rotation will start
+# if the ToggleRotateKey is pressed. Note that this setting does not turn off
+# priority sorting of screens. [default: on; legal: on, off]
+#AutoRotate=off
+
+# If yes, the the serverscreen will be rotated as a usual info screen. If no,
+# it will be a background screen, only visible when no other screens are
+# active. The special value 'blank' is similar to no, but only a blank screen
+# is displayed. [default: on; legal: on, off, blank]
+ServerScreen=no
+
+# Set master backlight setting. If set to 'open' a client may control the
+# backlight for its own screens (only). [default: open; legal: off, open, on]
+#Backlight=open
+
+# Set master heartbeat setting. If set to 'open' a client may control the
+# heartbeat for its own screens (only). [default: open; legal: off, open, on]
+#Heartbeat=open
+
+# set title scrolling speed [default: 10; legal: 0-10]
+#TitleSpeed=10
+
+# The "...Key=" lines define what the server does with keypresses that
+# don't go to any client. The ToggleRotateKey stops rotation of screens, while
+# the PrevScreenKey and NextScreenKey go back / forward one screen (even if
+# rotation is disabled.
+# Assign the key string returned by the driver to the ...Key setting. These
+# are the defaults:
+ToggleRotateKey=Enter
+PrevScreenKey=Left
+NextScreenKey=Right
+#ScrollUpKey=Up
+#ScrollDownKey=Down
+
+## The menu section. The menu is an internal LCDproc client. ##
+[menu]
+# If true the server allows transitions between different client's menus
+# [default: false; legal: true, false]
+#PermissiveGoto=false
+
+# You can configure what keys the menu should use. Note that the MenuKey
+# will be reserved exclusively, the others work in shared mode.
+
+# Up to six keys are supported. The MenuKey (to enter and exit the menu), the
+# EnterKey (to select values) and at least one movement keys are required.
+# These are the default key assignments:
+MenuKey=Escape
+EnterKey=Enter
+UpKey=Up
+DownKey=Down
+#LeftKey=Left
+#RightKey=Right
+
+
+### Driver sections are below this line, in alphabetical order  ###
+
+
+## EMAC BayRAD driver ##
+[bayrad]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 9600; legal:  1200, 2400, 9600, 19200]
+Speed=9600
+
+
+
+## CrystalFontz driver (for CF632 & CF634) ##
+[CFontz]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+# Select the LCD size [default: 20x4]
+Size=20x4
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=0
+# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200,
+# 115200]
+Speed=9600
+# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
+NewFirmware=no
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# normally you shouldn't need this
+Reboot=no
+
+
+
+## CrystalFontz packet driver (for CFA533, CFA631, CFA633 & CFA635) ##
+[CFontzPacket]
+
+# Select the LCD model [default: 633; legal: 533, 631, 633, 635]
+Model=633
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS1
+
+# Set the initial contrast [default: 560; legal: 0 - 1000]
+Contrast=350
+
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+
+# Reinitialize the LCD's BIOS on driver start. [default: no; legal: yes, no]
+Reboot=yes
+
+# Enable the USB flag if the device is connected to an USB port. For
+# serial ports leave it disabled. [default: no; legal: yes, no]
+#USB=yes
+
+# Very old 633 firmware versions do not support partial screen updates using
+# 'Send Data to LCD' command (31). For those devices it may be necessary to
+# enable this flag. [default: no; legal: yes, no]
+#OldFirmware=yes
+
+# Override the LCD size known for the selected model. Usually setting this
+# value should not be necessary.
+#Size=20x4
+
+# Override the default communication speed known for the selected model.
+# Default value depends on model [legal: 19200, 115200]
+#Speed=115200
+
+
+
+## Curses driver ##
+[curses]
+
+# color settings
+# foreground color [default: blue]
+Foreground=blue
+# background color when "backlight" is off [default: cyan]
+Background=cyan
+# background color when "backlight" is on [default: red]
+Backlight=red
+
+# display size [default: 20x4]
+Size=20x2
+
+# What position (X,Y) to start the left top corner at...
+# Default: (7,7)
+TopLeftX=7
+TopLeftY=7
+
+# use ASC symbols for icons & bars [default: no; legal: yes, no]
+UseACS=no
+
+# draw Border [default: yes; legal: yes, no]
+DrawBorder=yes
+
+
+
+## Cwlinux driver ##
+[CwLnx]
+
+# Select the LCD model [default: 12232; legal: 12232, 12832, 1602]
+Model=12232
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyUSB0
+
+# Select the LCD size. Default depends on model:
+# 12232: 20x4
+# 12832: 21x4
+# 1602: 16x2
+Size=20x4
+
+# Set the communication speed [default: 19200; legal: 9600, 19200]
+Speed=19200
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+# normally you shouldn't need this
+Reboot=no
+
+# If you have a keypad connected. Keypad layout is currently not
+# configureable from the config file.
+Keypad=yes
+
+# If you have a non-standard keypad you can associate any keystrings to keys.
+# There are 6 input keys in the CwLnx hardware that generate characters
+# from 'A' to 'F'.
+#
+# The following is the built-in default mapping hardcoded in the driver.
+# You can leave those unchanged if you have a standard keypad.
+# You can change it if you want to report other keystrings or have a non
+# standard keypad.
+# KeyMap_A=Up
+# KeyMap_B=Down
+# KeyMap_C=Left
+# KeyMap_D=Right
+# KeyMap_E=Enter
+# KeyMap_F=Escape
+
+# keypad_test_mode permits one to test keypad assignment
+# Default value is no
+#keypad_test_mode=yes
+
+
+
+## ea65 driver for the display in AOpen XC Cube AV EA65 media barebones ##
+[ea65]
+
+# Device is fixed /dev/ttyS1
+# Width and Height are fixed 9x1
+
+# As the VFD is self luminescent we don't have a backlight
+# But we can use the backlight functions to control the front LEDs
+# Brightness 0 to 299 -> LEDs off
+# Brightness 300 to 699 -> LEDs half bright
+# Brightness 700 to 1000 -> LEDs full bright
+Brightness=500
+# OffBrightness is the the value used for the 'backlight off' state
+OffBrightness=0
+
+
+
+## EyeboxOne driver ##
+[EyeboxOne]
+
+# Select the output device to use [default: /dev/ttyS1]
+# Device=/dev/cua01
+Device=/dev/ttyS1
+
+# Set the display size [default: 20x4]
+Size=20x4
+
+# Switch on the backlight? [default: yes]
+Backlight=yes
+
+# Switch on the cursor? [default: no]
+Cursor=no
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200]
+Speed=19200
+
+# Enter Key is a \r character, so it's hardcoded in the driver
+LeftKey=D
+RightKey=C
+UpKey=A
+DownKey=B
+EscapeKey=P
+
+# You can find out which key of your display sends which
+# character by setting keypad_test_mode to yes and running
+# LCDd. LCDd will output all characters it receives.
+# Afterwards you can modify the settings above and set
+# keypad_set_mode to no again.
+keypad_test_mode=no
+
+## Futaba TOSD-5711BB VFD Driver ##
+[futaba]
+
+## g15 driver for Logitech G15 Keyboard LCDs ##
+[g15]
+
+# Display size (currently unused)
+size=20x5
+
+
+
+## glcd generic graphical display driver
+[glcd]
+# Select what type of connection. See documentation for types.
+ConnectionType=t6963
+
+# Width and height of the display in pixel. The supported sizes may depend on
+# the ConnectionType. [default: 128x64; legal: 1x1 - 640x480]
+#Size=128x64
+
+# Width and height of a character cell in pixels. This value is only used if
+# the driver has been compiled with FreeType and it is enabled. Otherwise the
+# default 6x8 cell is used.
+#CellSize=12x16
+
+# If LCDproc has been compiled with FreeType 2 support this option can be used
+# to turn if off intentionally. [default: yes; legal: yes, no]
+#useFT2=no
+
+# Path to font file to use for FreeType rendering. This font must be monospace
+# and should contain some special Unicode characters like arrows (Andale Mono
+# is recommended and can be fetched at http://corefonts.sf.net).
+#normal_font=/usr/local/lib/X11/fonts/TTF/andalemo.ttf
+
+# Some fonts miss the Unicode characters used to represent icons. In this case
+# the built-in 5x8 font can used if this option is turned off. [default: yes;
+# legal: yes, no]
+#fontHasIcons=no
+
+# Set the initial contrast if supported by connection type.
+# [default: 600; legal: 0 - 1000]
+#Contrast=600
+
+# Set brightness of the backlight if the backlight is switched 'on'.
+# [default: 800; legal: 0 - 1000]
+#Brightness=1000
+
+# Set brightness of the backlight if the backlight is switched 'off'. Set this
+# to zero to completely turn off the backlight. [default: 100; legal: 0 - 1000]
+#OffBrightness=0
+
+# Time (ms) from first key report to first repeat. Set to 0 to disable repeated
+# key reports. [default: 500; legal: 0 - 3000]
+#KeyRepeatDelay=500
+
+# Time (ms) between repeated key reports. Ignored if KeyRepeatDelay is disabled
+# (set to zero). [default: 300; legal: 0 - 3000]
+#KeyRepeatInterval=300
+
+# Assign key strings to keys. There may be up to 16 keys numbered 'A' to 'Z'.
+# By default keys 'A' to 'F' are assigned Up, Down, Left, Right, Enter, Escape.
+KeyMap_A=Up
+KeyMap_B=Down
+KeyMap_C=Enter
+KeyMap_D=Escape
+
+# --- t6963 options ---
+
+# Parallel port to use [default: 0x378; legal: 0x200 - 0x400]
+#Port=0x378
+
+# Use LPT port in bi-directional mode. This should work on most LPT port
+# and is required for proper timing! [default: yes; legal: yes, no]
+#bidirectional=yes
+
+# Insert additional delays into reads / writes. [default: no; legal: yes, no]
+#delayBus=no
+
+# --- serdisplib options ---
+
+# Name of the underlying serdisplib driver, e.g. ctinclud. See
+# serdisplib documentation for details.
+serdisp_name=t6963
+
+# The display device to use, e.g. serraw:/dev/ttyS0,
+# parport:/dev/parport0 or USB:07c0/1501.
+serdisp_device=/dev/ppi0
+
+# Options string to pass to serdisplib during initialization. Use
+# this to set any display related options (e.g. wiring). The display size is
+# always set based on the Size configured above! By default, no options are
+# set.
+# Important: The value must be quoted as it contains equal signs!
+#serdisp_options="INVERT=1"
+
+# --- x11 options ---
+
+# PixelSize is size of each dot in pixels + a pixel gap. [default: 3+1]
+#x11_PixelSize=3+1
+
+# Colors are in RRGGBB format prefixed with "0x".
+# PixelColor: The color of each dot at full contrast. [default: 0x000000]
+#x11_PixelColor=0x000000
+
+# BacklightColor: The color of the backlight as full brightness.
+# [default: 0x80FF80]
+#x11_BacklightColor=0x80FF80
+
+# Border: Adds a border (empty space) around the LCD portion of X11 window.
+# [default: 20]
+#x11_Border=20
+
+# Inverted: inverts the pixels [default: no; legal: yes, no]
+#x11_Inverted=no
+
+# --- picolcdgfx options ---
+
+# Time in ms for usb_read to wait on a key press. [default: 125; legal: >0]
+#picolcdgfx_KeyTimeout=125
+
+# Inverted: Inverts the pixels. [default: no; legal: yes or no]
+#picolcdgfx_Inverted=no
+
+
+
+## glcdlib meta driver for graphical LCDs ##
+[glcdlib]
+
+## mandatory:
+
+# which graphical display supported by graphlcd-base to use [default: image]
+# (see /etc/graphlcd.conf for possible drivers)
+Driver=noritake800
+
+# no=use graphlcd bitmap fonts (they have only one size / font file)
+# yes=use fonts supported by FreeType2 (needs Freetype2 support in
+# libglcdprocdriver and its dependants)
+UseFT2=yes
+
+# text resolution in fixed width characters [default: 16x4]
+# (if it won't fit according to available physical pixel resolution
+# and the minimum available font face size in pixels, then
+# 'DebugBorder' will automatically be turned on)
+TextResolution=20x4
+
+# path to font file to use
+FontFile=/usr/share/fonts/corefonts/courbd.ttf
+
+## these only apply if UseFT2=yes:
+
+# character encoding to use
+CharEncoding=iso8859-2
+
+# minimum size in pixels in which fonts should be rendered
+MinFontFaceSize=7x12
+
+## optional:
+Brightness=50                   # Brightness (in %) if applicable
+Contrast=50                     # Contrast (in %) if applicable
+Backlight=no                    # Backlight if applicable
+UpsideDown=no                   # flip image upside down
+Invert=no                       # invert light/dark pixels
+ShowDebugFrame=no               # turns on/off 1 pixel thick debugging
+                                # border within the usable text area,
+                                # for setting up TextResolution and
+                                # MinFontFaceSize (if using FT2);
+ShowBigBorder=no                # border around the unused area
+ShowThinBorder=yes              # border around the unused area
+PixelShiftX=0
+PixelShiftY=2
+
+
+
+## Matrix Orbital GLK driver ##
+[glk]
+
+# select the serial device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# set the initial contrast value [default: 500; legal: 0 - 1000]
+Contrast=500
+
+# set the serial port speed [default: 19200; legal: 9600, 19200, 38400, 57600, 115200]
+Speed=19200
+
+
+
+## Hitachi HD44780 driver ##
+[hd44780]
+{%- if model == 'EZIO' %}
+ConnectionType=ezio
+Device=/dev/ttyS1
+Keypad=yes
+Size=16x2
+KeyMatrix_4_1=Enter
+KeyMatrix_4_2=Up
+KeyMatrix_4_3=Down
+KeyMatrix_4_4=Escape
+{%- endif %}
+
+# Select what type of connection. See documentation for available types.
+#ConnectionType=4bit
+
+# Select model if have non-standard one which require extra initialization or handling or
+# just want extra features it offers.
+# Available: standard (default), extended, winstar_oled, pt6314_vfd
+# - standard is default, use for LCDs not mentioned below.
+# - extended, hd66712, ks0073: allows use 4-line "extended" mode,
+#   same as deprecated now option ExtendedMode=yes
+# - winstar_oled, weh00xxyya: changes initialization for WINSTAR's WEH00xxyyA displays
+#   and allows handling brightness
+# - pt6314_vfd: allows handling brightness on PTC's PT6314 VFDs
+#
+# This option should be independent of connection type.
+#Model = standard
+
+# I/O address of the LPT port. Usual values are: 0x278, 0x378 and 0x3BC.
+# For I2C connections this sets the slave address (usually 0x20).
+#Port=0x378
+
+# Device of the serial, I2C, or SPI interface [default: /dev/lcd]
+#Device=/dev/ttyS0
+
+# Bitrate of the serial port (0 for interface default)
+#Speed=0
+
+# If you have a keypad connected.
+# You may also need to configure the keypad layout further on in this file.
+#Keypad=no
+
+# Set the initial contrast (bwctusb, lcd2usb, and usb4all)
+# [default: 800; legal: 0 - 1000]
+#Contrast=0
+
+# Set brightness of the backlight (lcd2usb and usb4all):
+# Brightness is the brightness while the backlight is set to 'on'.
+# [default: 800; legal: 0 - 1000]
+#Brightness=1000
+
+# OffBrightness is the brightness while the backlight is set to 'off'.
+# [default: 300; legal: 0 - 1000]
+#OffBrightness=0
+
+# Specify if you have a switchable backlight and if yes, can select method for turning it on/off:
+#
+# - none - no switchable backlight is available. For compability also boolean
+#          0, n, no, off and false are aliases.
+# - external - use external pin or any other method defined with ConnectionType backlight
+#          handling. For backward compability also this value is chosen for boolean
+#          TRUE values: 1, y, yes, on and true.
+# - internal - means that backlight is handled using internal commands according
+#          to selected display model (with Model option). Depending on model,
+#          Brightness and OffBrightness options can be taken into account.
+# - internalCmds - means that commands for turning on and off backlight are given
+#          with extra options BacklightOnCmd and BacklightOffCmd, which would be treated
+#          as catch up (last resort) for other types of displays which have similar features.
+#
+# You can provide multiple occurences of this option to use more than one method.
+# Default is model specific: Winstar OLED and PT6314 VFD enables internal backlight mode,
+# for others it is set to none.
+#Backlight = none
+
+# Commands for enabling internal backlight for use with Backlight=internalCmds.
+# Up to 4 bytes can be encoded, as integer number in big-endian order.
+#
+# NOTE: this is advanced option, if command contains bits other than only brighness handling,
+# they must be set accordingly to not disrupt display state. If for example 'FUNCTION SET' command
+# is used for this purpose, bits of interface length (4-bit / 8-bit) must be set according to
+# selected ConnectionType.
+#BacklightCmdOn=0x1223
+
+# Commands for disabling internal backlight for use with Backlight=internalCmds.
+# Up to 4 bytes can be encoded, as integer number in big-endian order.
+#BacklightCmdOff=0x1234
+
+
+# If you have the additional output port ("bargraph") and you want to
+# be able to control it with the lcdproc OUTPUT command
+#OutputPort=no
+
+# Specifies if the last line is pixel addressable (yes) or it controls an
+# underline effect (no). [default: yes; legal: yes, no]
+#Lastline=yes
+
+# Specifies the size of the LCD.
+# In case of multiple combined displays, this should be the total size.
+#Size=20x4
+
+# For multiple combined displays: how many lines does each display have.
+# Vspan=2,2 means both displays have 2 lines.
+#vspan=2,2
+
+# If you have an HD66712, a KS0073 or another controller with 'extended mode',
+# set this flag to get into 4-line mode. On displays with just two lines, do
+# not set this flag.
+# As an additional restriction, controllers with and without extended mode
+# AND 4 lines cannot be mixed for those connection types that support more
+# than one display!
+# NOTE: This option is deprecated in favour of choosing Model=extended option.
+#ExtendedMode=yes
+
+# In extended mode, on some controllers like the ST7036 (in 3 line mode)
+# the next line in DDRAM won't start 0x20 higher. [default: 0x20]
+#LineAddress=0x10
+
+# Character map to to map ISO-8859-1 to the LCD's character set
+# [default: hd44780_default; legal: hd44780_default, hd44780_euro, ea_ks0073,
+# sed1278f_0b, hd44780_koi8_r, hd44780_cp1251, hd44780_8859_5, upd16314,
+# weh001602a_1]
+# (hd44780_koi8_r, hd44780_cp1251, hd44780_8859_5, upd16314 and weh001602a_1
+# are possible if compiled with additional charmaps)
+CharMap=hd44780_default
+
+# Font bank to be used for some displays such as the WINSTAR WEH001602A
+# 0: English/Japanese (default)
+# 1: Western Europe I
+# 2: English/Rusian
+# 3: Western Europe II
+#FontBank=0
+
+# If your display is slow and cannot keep up with the flow of data from
+# LCDd, garbage can appear on the LCDd. Set this delay factor to 2 or 4
+# to increase the delays. Default: 1.
+#DelayMult=2
+
+# Some displays (e.g. vdr-wakeup) need a message from the driver to that it
+# is still alive. When set to a value bigger then null the character in the
+# upper left corner is updated every <KeepAliveDisplay> seconds. Default: 0.
+#KeepAliveDisplay=0
+
+# If you experience occasional garbage on your display you can use this
+# option as workaround. If set to a value bigger than null it forces a
+# full screen refresh <RefreshDiplay> seconds. Default: 0.
+#RefreshDisplay=5
+
+# You can reduce the inserted delays by setting this to false.
+# On fast PCs it is possible your LCD does not respond correctly.
+# Default: true.
+#DelayBus=true
+
+# If you have a keypad you can assign keystrings to the keys.
+# See documentation for used terms and how to wire it.
+# For example to give directly connected key 4 the string "Enter", use:
+#   KeyDirect_4=Enter
+# For matrix keys use the X and Y coordinates of the key:
+#   KeyMatrix_1_3=Enter
+#KeyMatrix_4_1=Enter
+#KeyMatrix_4_2=Up
+#KeyMatrix_4_3=Down
+#KeyMatrix_4_4=Escape
+
+## ICP Peripheral Comminication Protocol driver ##
+# Supports A125 and A106
+#
+# Short Press Select: Down
+# Long Press Select: Up
+# Short Press Enter: Enter
+# Long Press Enter: Escape
+#
+[icp_a106]
+Device=/dev/ttyS1
+
+# Display dimensions
+Size=20x2
+
+
+## Code Mercenaries IO-Warrior driver ##
+[IOWarrior]
+
+# display dimensions
+Size=20x4
+
+# serial number. Must be exactly as listed by usbview
+# (if not given, the 1st IOWarrior found gets used)
+#SerialNumber=00000674
+
+# If you have an HD66712, a KS0073 or another 'almost HD44780-compatible',
+# set this flag to get into extended mode (4-line linear).
+#ExtendedMode=yes
+
+# Specifies if the last line is pixel addressable (yes) or it controls an
+# underline effect (no). [default: yes; legal: yes, no]
+#Lastline=yes
+
+
+
+## Soundgraph/Ahanix/Silverstone/Uneed/Accent iMON driver ##
+[imon]
+
+# select the device to use
+Device=/dev/lcd0
+
+# display dimensions
+Size=16x2
+
+# Character map to to map ISO-8859-1 to the displays character set.
+# [default: none; legal: none, hd44780_euro, upd16314, hd44780_koi8_r,
+# hd44780_cp1251, hd44780_8859_5 ] (upd16314, hd44780_koi8_r,
+# hd44780_cp1251, hd44780_8859_5 are possible if compiled with additional
+# charmaps)
+CharMap=hd44780_euro
+
+## Soundgraph iMON LCD ##
+[imonlcd]
+# Specify which iMon protocol should be used
+# [legal: 0, 1; default: 0]
+# Choose 0 for 15c2:ffdc device,
+# Choose 1 for 15c2:0038 device
+Protocol=0
+
+# Set the exit behavior [legal: 0-2; default: 1]
+# 0 means leave shutdown message,
+# 1 means show the big clock,
+# 2 means blank device
+#OnExit=2
+
+# Select the output device to use [default: /dev/lcd0]
+Device=/dev/lcd0
+
+# Select the displays contrast [default: 200; legal: 0-1000]
+Contrast=200
+
+# Specify the size of the display in pixels [default: 96x16]
+#Size=96x16
+
+# Set the backlight state [default: on; legal: on, off]
+#Backlight=on
+
+# Set the disc mode [legal: 0,1; default: 0]
+# 0 => spin the "slim" disc - two disc segments,
+# 1 => their complement spinning;
+#DiscMode=0
+
+
+
+## IrMan driver ##
+[IrMan]
+# in case of trouble with IrMan, try the Lirc emulator for IrMan
+
+# Select the input device to use
+#Device=/dev/irman
+
+# Select the configuration file to use
+#Config=/etc/irman.cfg
+
+
+
+## IRtrans driver ##
+[irtrans]
+
+# Does the device have a backlight? [default: no; legal: yes, no]
+#Backlight=no
+
+# IRTrans device to connect to [default: localhost]
+#Hostname=localhost
+
+# display dimensions
+Size=16x2
+
+
+
+## Joystick driver ##
+[joy]
+
+# Select the input device to use [default: /dev/js0]
+Device=/dev/js0
+
+# set the axis map
+Map_Axis1neg=Left
+Map_Axis1pos=Right
+Map_Axis2neg=Up
+Map_Axis2pos=Down
+
+# set the button map
+Map_Button1=Enter
+Map_Button2=Escape
+
+
+## JW-002 driver ##
+[jw002]
+
+# Select the output device to use [default: /dev/lcd]
+#Device=/dev/ttyS0
+
+# Set the display size [default: 24x8]
+Size=24x8 
+
+# Optional X and Y offsets (in characters) to center a smaller display
+# size on the full 24x8 panel
+X_offset=0
+Y_offset=0   
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200]
+Speed=19200
+
+# Pick which font page to use [default: 0]
+# Note that different fonts probably have their bargraph chars in different
+# spots.  For ROM-based fonts 0-3, those characters are already known.
+Font=0
+
+# The following table translates from jw002 key letters to logical key names.
+# By default no keys are mapped, meaning the keypad is not used at all.
+#KeyMap_I=Left
+#KeyMap_J=Right
+#KeyMap_H=Up
+#KeyMap_K=Down
+#KeyMap_L=Enter
+#KeyMap_A=Escape
+# See the [menu] section for an explanation of the key mappings
+
+# You can find out which key of your display sends which
+# character by setting keypad_test_mode to yes and running
+# LCDd. LCDd will output all characters it receives.
+# Afterwards you can modify the settings above and set
+# keypad_set_mode to no again.
+keypad_test_mode=no
+
+
+## LB216 driver ##
+[lb216]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the initial brightness [default: 255; legal: 0 - 255]
+Brightness=255
+
+# Set the communication speed [default: 9600; legal: 2400, 9600]
+Speed=9600
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+Reboot=no
+
+
+
+## LCDM001 driver ##
+[lcdm001]
+
+Device=/dev/ttyS1
+
+# keypad settings
+# Keyname      Function
+#              Normal context              Menu context
+# -------      --------------              ------------
+# PauseKey     Pause/Continue              Enter/select
+# BackKey      Back(Go to previous screen) Up/Left
+# ForwardKey   Forward(Go to next screen)  Down/Right
+# MainMenuKey  Open main menu              Exit/Cancel
+PauseKey=LeftKey
+BackKey=UpKey
+ForwardKey=DownKey
+MainMenuKey=RightKey
+
+# You can rearrange the settings here.
+# If your device is broken, have a look at server/drivers/lcdm001.h
+
+
+
+## HNE LCTerm driver ##
+[lcterm]
+Device=/dev/ttyS1
+Size=16x2
+
+
+## Linux event device input driver ##
+[linux_input]
+
+# Select the input device to use [default: /dev/input/event0]. This may be
+# either an absolute path to the input node, starting with '/', or
+# an input device name, e.g. "Logitech Gaming Keyboard Gaming Keys".
+# Device=/dev/input/event0
+
+# specify a non-default key map
+#key=1,Escape
+#key=28,Enter
+#key=96,Enter
+#key=105,Left
+#key=106,Right
+#key=103,Up
+#key=108,Down
+
+
+## LIRC input driver ##
+[lirc]
+
+# Specify an alternative location of the lircrc file [default: ~/.lircrc]
+#lircrc=/etc/lircrc.lcdproc
+
+# Must be the same as in your lircrc
+#prog=lcdd
+
+
+
+## LIS MCE 2005 driver ##
+[lis]
+
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+# 0-250 = 25%, 251-500 = 50%, 501-750 = 75%, 751-1000 = 100%
+#Brightness=1000
+
+# Columns by lines [default: 20x2]
+#Size=20x2
+
+# USB Vendor ID [default: 0x0403]
+# Change only if testing a compatible device.
+#VendorID=0x0403
+
+# USB Product ID [default: 0x6001]
+# Change only if testing a compatible device.
+#ProductID=0x6001
+
+# Specifies if the last line is pixel addressable (yes) or it only controls an
+# underline effect (no). [default: yes; legal: yes, no]
+#Lastline=yes
+
+
+
+##The driver for the VFD of the Medion MD8800 PC ##
+[MD8800]
+# device to use [default: /dev/ttyS1]
+#Device=/dev/ttyS1
+
+# display size [default: 16x2]
+#Size=16x2
+
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+
+
+
+## Futuba MDM166A Display
+[mdm166a]
+# Show self-running clock after LCDd shutdown
+# Possible values: [default: no; legal: no, small, big]
+Clock=big
+# Dim display, no dimming gives full brightness [default: no, legal: yes, no]
+Dimming=no
+# Dim display in case LCDd is inactive [default: no, legal: yes, no]
+OffDimming=yes
+
+
+
+## MSI MS-6931 driver for displays in 1HU servers ##
+[ms6931]
+
+# device to use [default: /dev/ttyS1]
+Device=/dev/ttyS1
+
+# display size [default: 16x2]
+#Size=16x2
+
+
+
+## MTC-S16209x driver ##
+[mtc_s16209x]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the initial brightness [default: 255; legal: 0 - 255]
+Brightness=255
+
+# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
+Reboot=no
+
+
+
+## Matrix Orbital driver ##
+[MtxOrb]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/ttyS0
+
+# Set the display size [default: 20x4]
+Size=20x4
+
+# Set the display type [default: lcd; legal: lcd, lkd, vfd, vkd]
+Type=lkd
+
+# Set the initial contrast [default: 480]
+# NOTE: The driver will ignore this if the display
+#       is a vfd or vkd as they don't have this feature
+Contrast=480
+
+# Some old displays do not have an adjustable backlight but only can
+# switch the backlight on/off. If you experience randomly appearing block
+# characters, try setting this to false. [default: yes; legal: yes, no]
+hasAdjustableBacklight=no
+
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=0
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200]
+Speed=19200
+
+# The following table translates from MtxOrb key letters to logical key names.
+# By default no keys are mapped, meaning the keypad is not used at all.
+#KeyMap_A=Left
+#KeyMap_B=Right
+#KeyMap_C=Up
+#KeyMap_D=Down
+#KeyMap_E=Enter
+#KeyMap_F=Escape
+# See the [menu] section for an explanation of the key mappings
+
+# You can find out which key of your display sends which
+# character by setting keypad_test_mode to yes and running
+# LCDd. LCDd will output all characters it receives.
+# Afterwards you can modify the settings above and set
+# keypad_set_mode to no again.
+keypad_test_mode=no
+
+
+
+## mx5000 driver for LCD display on the Logitech MX5000 keyboard ##
+[mx5000]
+
+# Select the output device to use [default: /dev/hiddev0]
+Device = /dev/hiddev0
+# Time to wait in ms after the refresh screen has been sent [default: 1000]
+WaitAfterRefresh = 1000
+
+
+
+## Noritake VFD driver ##
+[NoritakeVFD]
+# device where the VFD is. Usual values are /dev/ttyS0 and /dev/ttyS1
+# [default: /dev/lcd]
+Device=/dev/ttyS0
+# Specifies the size of the LCD.
+Size=20x4
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=50
+# set the serial port speed [default: 9600, legal: 1200, 2400, 9600, 19200, 115200]
+Speed=9600
+# Set serial data parity [default: 0; legal: 0-2 ]
+# Meaning: 0(=none), 1(=odd), 2(=even)
+Parity=0
+# re-initialize the VFD [default: no; legal: yes, no]
+Reboot=no
+
+
+
+## Olimex MOD-LCD1x9 driver ##
+[Olimex_MOD_LCD1x9]
+
+# device file of the i2c controler
+Device=/dev/i2c-0
+
+
+## Mini-box.com picoLCD (usblcd) driver ##
+[picolcd]
+
+# KeyTimeout is only used if the picoLCD driver is built with libusb-0.1. When
+# built with libusb-1.0 key and IR data is input asynchronously so there is no
+# need to wait for the USB data.
+# KeyTimeout is the time in ms that LCDd spends waiting for a key press before
+# cycling through other duties.  Higher values make LCDd use less CPU time and
+# make key presses more detectable.  Lower values make LCDd more responsive
+# but a little prone to missing key presses.  500 (.5 second) is the default
+# and a balanced value. [default: 500; legal: 0 - 1000]
+KeyTimeout=500
+
+# Key auto repeat is only available if the picoLCD driver is built with
+# libusb-1.0. Use KeyRepeatDelay and KeyRepeatInterval to configure key auto
+# repeat.
+#
+# Key auto repeat delay (time in ms from first key report to first repeat). Use
+# zero to disable auto repeat. [default: 300; legal: 0 - 3000]
+KeyRepeatDelay=300
+
+# Key auto repeat interval (time in ms between repeat reports). Only used if
+# KeyRepeatDelay is not zero. [default: 200; legal: 0 - 3000]
+KeyRepeatInterval=200
+
+# Sets the initial state of the backlight upon start-up.
+# [default: on; legal: on, off]
+#Backlight=on
+
+# Set the initial brightness [default: 1000; legal: 0 - 1000]. Works only
+# with the 20x4 device
+Brightness=1000
+
+# Set the brightness while the backlight is 'off' [default: 0; legal: 0 - 1000].
+# Works only with the 20x4 device.
+#OffBrightness=0
+
+# Set the initial contrast [default: 1000; legal: 0 - 1000]
+Contrast=1000
+
+# Link the key lights to the backlight? [default: on; legal: on, off]
+#LinkLights=off
+
+# Light the keys? [default: on; legal: on, off]
+Keylights=on
+
+# If Keylights is on, the you can unlight specific keys below:
+# Key0 is the directional pad.  Key1 - Key5 correspond to the F1 - F5 keys.
+# There is no LED for the +/- keys.  This is a handy way to indicate to users
+# which keys are disabled.  [default: on; legal: on, off]
+Key0Light=on
+Key1Light=on
+Key2Light=on
+Key3Light=on
+Key4Light=on
+Key5Light=on
+
+# Host name or IP address of the LIRC instance that is to receive IR codes
+# If not set, or set to an empty value, IR support is disabled.
+#LircHost=127.0.0.1
+
+# UDP port on which LIRC is listening [default: 8765; legal: 1 - 65535]
+LircPort=8765
+
+# UDP data time unit for LIRC  [default: off; legal: on, off]
+# On:  times sent in microseconds (requires LIRC UDP driver that accepts this).
+# Off: times sent in 'jiffies' (1/16384s) (supported by standard LIRC UDP driver).
+LircTime_us=on
+
+# Threshold in microseconds of the gap that triggers flushing the IR data
+# to lirc [default: 8000; legal: 1000 - ]
+# If LircTime_us is on values greater than 32.767ms will disable the flush
+# If LircTime_us is off values greater than 1.999938s will disable the flush
+LircFlushThreshold=10000
+
+
+
+## Pyramid LCD driver ##
+[pyramid]
+
+# device to connect to [default: /dev/lcd]
+Device=/dev/ttyUSB0
+
+
+
+## rawserial driver ##
+[rawserial]
+
+# Select the output device to use [default: /dev/cuaU0]
+Device=/dev/ttyS0
+
+# Serial port baudrate [default: 9600]
+Speed=9600
+
+# Specifies the size of the LCD. If this driver is loaded as a secondary driver
+# it always adopts to the size of the primary driver. If loaded as the only
+# (or primary) driver, the size can be set. [default: 40x4]
+#Size=16x2
+
+# How often to dump the LCD contents out the port, in Hertz (times per second)
+# 1 = once per second, 4 is 4 times per second, 0.1 is once every 10 seconds.
+# [default: 1; legal: 0.0005 - 10]
+UpdateRate=1
+
+
+
+## SDEC driver for Watchguard Firebox ##
+[sdeclcd]
+# No options
+
+
+## Seiko Epson 1330 driver ##
+[sed1330]
+
+# Port where the LPT is. Common values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Type of LCD module (legal: G321D, G121C, G242C, G191D, G2446, SP14Q002)
+# Note: Currently only tested with G321D & SP14Q002.
+Type=G321D
+
+# Width x Height of a character cell in pixels [legal: 6x7 - 8x16; default: 6x10]
+CellSize=6x10
+
+# Select what type of connection [legal: classic, bitshaker; default: classic]
+ConnectionType=classic
+
+
+
+## Seiko Epson 1520 driver ##
+[sed1520]
+
+# Port where the LPT is. Usual values are 0x278, 0x378 and 0x3BC
+Port=0x378
+
+# Select the interface type (wiring) for the display. Supported values are
+# 68 for 68-style connection (RESET level high) and 80 for 80-style connection
+# (RESET level low). [legal: 68, 80; default: 80]
+InterfaceType=80
+
+# On fast machines it may be necessary to slow down transfer to the display.
+# If this value is set to zero, delay is disabled. Any value greater than
+# zero slows down each write by one microsecond. [legal: 0-1000; default: 1]
+DelayMult=0
+
+# The original wiring used an inverter to drive the control lines. If you do
+# not use an inverter set haveInverter to no. [default: yes; legal: yes, no]
+HaveInverter=no
+
+# On some displays column data in memory is mapped to segment lines from right
+# to left. This is called inverted mapping (not to be confused with
+# 'haveInverter' from above). [default: no; legal: yes, no]
+#InvertedMapping=yes
+
+# At least one display is reported (Everbouquet MG1203D) that requires sending
+# three times 0xFF before a reset during initialization.
+# [default: no; legal: yes, no]
+#UseHardReset=yes
+
+
+## serial POS display driver ##
+[serialPOS]
+
+# Device to use in serial mode [default: /dev/ttyS0]
+Device=/dev/ttyS0
+
+# Specifies the size of the display in characters. [default: 16x2]
+Size=16x2
+
+# Specifies the cell size of each character cell on the display in characters.
+# [default: 5x8]
+Cellsize=5x8
+
+# Specifies the number of custom characters supported by the display.
+# [default: 0]
+Custom_chars=0
+
+# Set the communication protocol to use with the POS display.
+# [default: AEDEX; legal: AEDEX, CD5220, Epson, Emax, LogicControls, Ultimate]
+Type=AEDEX
+
+# communication baud rate with the display [default: 9600; legal: 1200, 2400,
+# 4800, 9600, 19200, 115200]
+Speed=9600
+
+
+
+## Serial VFD driver ##
+## Drives various (see below) serial 5x7dot VFD's.  ##
+[serialVFD]
+
+# Specifies the displaytype.[default: 0]
+# 0 NEC (FIPC8367 based) VFDs.
+# 1 KD Rev 2.1.
+# 2 Noritake VFDs (*).
+# 3 Futaba VFDs
+# 4 IEE S03601-95B
+# 5 IEE S03601-96-080 (*)
+# 6 Futaba NA202SD08FA (allmost IEE compatible)
+# 7 Samsung 20S207DA4 and 20S207DA6
+# 8 Nixdorf BA6x / VT100
+# (* most should work, not tested yet.)
+Type=0
+
+# "no" if display connected serial, "yes" if connected parallel. [default: no]
+# I.e. serial by default
+use_parallel=no
+
+# Number of Custom-Characters. default is display type dependent
+#Custom-Characters=0
+
+# Portaddress where the LPT is. Used in parallel mode only. Usual values are
+# 0x278, 0x378 and 0x3BC.
+Port=0x378
+
+# Set parallel port timing delay (us). Used in parallel mode only.
+# [default: 2; legal: 0 - 255]
+#PortWait=2
+
+# Device to use in serial mode. Usual values are /dev/ttyS0 and /dev/ttyS1
+Device=/dev/ttyS1
+
+# Specifies the size of the VFD.
+Size=20x2
+
+# Set the initial brightness [default: 1000; legal: 0 - 1000]
+# (4 steps 0-250, 251-500, 501-750, 751-1000)
+Brightness=1000
+# Set the initial off-brightness [default: 0; legal: 0 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+# (4 steps 0-250, 251-500, 501-750, 751-1000)
+OffBrightness=0
+
+# set the serial port speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
+Speed=9600
+
+# enable ISO 8859 1 compatibility [default: yes; legal: yes, no]
+#ISO_8859_1=yes
+
+
+
+## shuttleVFD driver ##
+[shuttleVFD]
+# No options
+
+
+
+## stv5730 driver ##
+[stv5730]
+
+# Port the device is connected to [default: 0x378]
+Port=0x378
+
+
+[SureElec]
+
+# Port the device is connected to  (by default first USB serial port)
+Device=/dev/ttyUSB0
+
+# Edition level of the device (can be 1, 2 or 3) [default: 2]
+#Edition=1
+
+# set display size
+# Note: The size can be obtained directly from device for edition 2 & 3.
+#Size=16x2
+
+# Set the initial contrast [default: 480; legal: 0 - 1000]
+#Contrast=200
+
+# Set the initial brightness [default: 480; legal: 1 - 1000]
+#Brightness=480
+
+# Set the initial off-brightness [default: 100; legal: 1 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+#OffBrightness=100
+
+
+## SVGAlib driver ##
+[svga]
+
+# svgalib mode to use [default: G320x240x256 ]
+# legal values are supported svgalib modes
+#Mode=G640x480x256
+
+# set display size [default: 20x4]
+Size=20x4
+
+# Set the initial contrast [default: 500; legal: 0 - 1000]
+# Can be set but does not change anything internally
+Contrast=500
+
+# Set the initial brightness [default: 1000; legal: 1 - 1000]
+Brightness=1000
+
+# Set the initial off-brightness [default: 500; legal: 1 - 1000]
+# This value is used when the display is normally
+# switched off in case LCDd is inactive
+OffBrightness=500
+
+
+
+## Text driver ##
+[text]
+# Set the display size [default: 20x4]
+Size=20x4
+
+
+
+## Toshiba T6963 driver ##
+[t6963]
+
+# set display size in pixels [default: 128x64]
+Size=128x64
+
+# port to use [default: 0x378; legal: 0x200 - 0x400]
+Port=0x378
+
+# Use LPT port in bi-directional mode. This should work on most LPT port and
+# is required for proper timing! [default: yes; legal: yes, no]
+#bidirectional=yes
+
+# Insert additional delays into reads / writes. [default: no; legal: yes, no]
+#delayBus=no
+
+# Clear graphic memory on start-up. [default: no; legal: yes, no]
+#ClearGraphic=no
+
+
+
+## Tyan Barebones LCD driver (GS10 & GS12 series) ##
+[tyan]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 9600; legal: 4800, 9600]
+Speed=9600
+
+# set display size [default: 16x2]
+Size=16x2
+
+
+
+## ELV ula200 driver ##
+[ula200]
+
+# Select the LCD size [default: 20x4]
+Size=20x4
+
+# If you have a non standard keypad you can associate any keystrings to keys.
+# There are 6 input key in the CwLnx hardware that generate characters
+# from 'A' to 'F'.
+#
+# The following it the built-in default mapping hardcoded in the driver.
+# You can leave those unchanged if you have a standard keypad.
+# You can change it if you want to report other keystrings or have a non
+# standard keypad.
+# KeyMap_A=Up
+# KeyMap_B=Down
+# KeyMap_C=Left
+# KeyMap_D=Right
+# KeyMap_E=Enter
+# KeyMap_F=Escape
+
+
+
+## Wirz SLI LCD driver ##
+[sli]
+
+# Select the output device to use [default: /dev/lcd]
+Device=/dev/lcd
+
+# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200,
+# 38400, 57600, 115200]
+Speed=19200
+
+
+
+## vlsys_m428 for VFD/IR combination in Moneual MonCaso 320 ##
+[vlsys_m428]
+
+# Select the output device to use [default: /dev/ttyUSB0]
+#Device=/dev/ttyUSB0
+
+
+
+## OnScreen Display using libxosd ##
+[xosd]
+
+# set display size [default: 20x4]
+Size=20x4
+
+# Offset in pixels from the top-left corner of the monitor [default: 0x0]
+Offset=200x200
+
+# X font to use, in XLFD format, as given by "xfontsel"
+Font=-*-terminus-*-r-*-*-*-320-*-*-*-*-*
+
+## Y.A.R.D.2 LCD section
+[yard2LCD]
+Size=20x4
+# If rendering rate is too high, change in server\main.h #define RENDER_FREQ 8 to "1"
+
+# EOF
diff --git a/data/templates/system-display/lcdproc.conf.tmpl b/data/templates/system-display/lcdproc.conf.tmpl
new file mode 100644
index 000000000..2fe491e63
--- /dev/null
+++ b/data/templates/system-display/lcdproc.conf.tmpl
@@ -0,0 +1,177 @@
+### autogenerated by system-display.py ###
+
+# system display show host (CPU|SMP-CPU|CPU-Graph|Load|Memory|Proc-Size|Disk|Uptime)
+#                     network interface <intName> alias <alias>
+#                             units (bps|Bps|pps)
+#                     clock (big|mini|date-time)
+
+# LCDproc client configuration file
+
+## general options ##
+[lcdproc]
+# address of the LCDd server to connect to
+Server=127.0.0.1
+
+# Port of the server to connect to
+Port=13666
+
+# set reporting level
+#ReportLevel=2
+
+# report to to syslog ?
+ReportToSyslog=true
+
+# run in foreground [default: false; legal: true, false]
+#Foreground=true
+
+# PidFile location when running as daemon [default: /var/run/lcdproc.pid]
+#PidFile=/var/run/lcdproc.pid
+
+# slow down initial announcement of modes (in 1/100s)
+#delay=2
+
+
+## screen specific configuration options ##
+{%- if show %}
+# display name for the main menu [default: LCDproc HOST]
+DisplayName="{%- if show['title'] %}{{ show['title'] }}{%- else %}VyOS{%- endif %}"
+
+{%- if show['host'] %}
+{#%- for s in show['host'] %#}
+
+[CPU]
+# Show screen
+Active={%- if 'cpu' in show['host'] %}true{%- else %}false{%- endif %}
+OnTime=1
+OffTime=2
+ShowInvisible=false
+
+[SMP-CPU]
+# Show screen
+Active={%- if 'cpu-all' in show['host'] %}true{%- else %}false{%- endif %}
+
+[Memory]
+# Show screen
+Active={%- if 'memory' in show['host'] %}true{%- else %}false{%- endif %}
+
+[Load]
+# Show screen
+Active={%- if 'load-hist' in show['host'] %}true{%- else %}false{%- endif %}
+# Min Load Avg at which the backlight will be turned off [default: 0.05]
+LowLoad=0.05
+# Max Load Avg at which the backlight will start blinking [default: 1.3]
+HighLoad=1.3
+
+[Uptime]
+# Show screen
+Active={%- if 'uptime' in show['host'] %}true{%- else %}false{%- endif %}
+
+[CPUGraph]
+# Show screen
+Active={%- if 'cpu-hist' in show['host'] %}true{%- else %}false{%- endif %}
+
+[ProcSize]
+# Show screen
+Active={%- if 'proc' in show['host'] %}true{%- else %}false{%- endif %}
+
+[Disk]
+# Show screen
+Active={%- if 'disk' in show['host'] %}true{%- else %}false{%- endif %}
+{#%- endfor %#}
+{%- else %} {# if show['host'] #}
+{# Turn off sections that default active #}
+
+[CPU]
+Active=false
+
+[Memory]
+Active=false
+
+[Load]
+Active=false
+
+[TimeDate]
+Active=false
+{%- endif %} {# if show['host'] #}
+
+[TimeDate]
+# Show screen
+Active={%- if show['clock'] == 'date-time' %}true{%- else %}false{%- endif %}
+# time format [default: %H:%M:%S; legal: see strftime(3)]
+TimeFormat="%H:%M:%S"
+# date format [default: %x; legal: see strftime(3)]
+DateFormat="%x"
+
+[BigClock]
+# Show screen
+Active={%- if show['clock'] == 'big' %}true{%- else %}false{%- endif %}
+
+[MiniClock]
+# Show screen
+Active={%- if show['clock'] == 'mini' %}true{%- else %}false{%- endif %}
+# time format [default: %H:%M; legal: see strftime(3)]
+TimeFormat="%H:%M"
+
+{%- if show['network'] %}
+[Iface]
+# Show screen
+Active={%- if show['network']['interface'] %}true{%- else %}false{%- endif %}
+{%- for i in show['network']['interface'] %}
+# Show stats for Interface {{ i }}
+Interface0={{ i }}
+{%- if show['network']['interface'][i]['alias'] %}
+# Interface alias name to display [default: <interface name>]
+Alias0={{ show['network']['interface'][i]['alias'] }}
+{%- endif %}
+{%- endfor %}
+
+# Units to display [default: byte; legal: byte, bit, packet]
+{%- if show['network']['units'] == 'bps' %}
+unit=bit
+{%- elif show['network']['units'] == 'Bps'%}
+unit=byte
+{%- elif show['network']['units'] == 'pps' %}
+unit=packet
+{%- else %}
+unit=bit
+{%- endif %}
+# add screen with transferred traffic
+#transfer=TRUE
+{%- endif %} {# if show['network'] #}
+
+{%- else %} {# if show #}
+{# Turn off sections that default active #}
+
+[CPU]
+Active=false
+
+[Memory]
+Active=false
+
+[Load]
+Active=false
+
+[TimeDate]
+Active=false
+{%- endif %}
+
+[Battery]
+# Show screen
+Active=false
+
+[About]
+# Show screen
+Active=false
+
+[OldTime]
+# Show screen
+Active=false
+# time format [default: %H:%M:%S; legal: see strftime(3)]
+TimeFormat="%H:%M:%S"
+# date format [default: %x; legal: see strftime(3)]
+DateFormat="%x"
+# Display the title bar in two-line mode. Note that with four lines or more
+# the title is always shown. [default: true; legal: true, false]
+#ShowTitle=false
+
+# EOF
-- 
cgit v1.2.3


From 3e8b6841db6ab803b898376754b469954d212cf7 Mon Sep 17 00:00:00 2001
From: fmertz <fireboxled@gmail.com>
Date: Sun, 28 Jun 2020 18:27:11 +0000
Subject: system display: T2564: Lowercase model names

* data/templates/system-display/LCDd.conf.tmpl Lowercase sdec ezio
* interface-definitions/system-display.xml.in Lowercase sdec ezio
---
 data/templates/system-display/LCDd.conf.tmpl |  6 +++---
 interface-definitions/system-display.xml.in  | 12 ++++++------
 2 files changed, 9 insertions(+), 9 deletions(-)

(limited to 'data/templates')

diff --git a/data/templates/system-display/LCDd.conf.tmpl b/data/templates/system-display/LCDd.conf.tmpl
index 0b605e09d..8079dcb76 100644
--- a/data/templates/system-display/LCDd.conf.tmpl
+++ b/data/templates/system-display/LCDd.conf.tmpl
@@ -52,11 +52,11 @@ DriverPath=/usr/lib/x86_64-linux-gnu/lcdproc/
 #   Olimex_MOD_LCD1x9, picolcd, pyramid, rawserial, sdeclcd, sed1330,
 #   sed1520, serialPOS, serialVFD, shuttleVFD, sli, stv5730, svga, t6963,
 #   text, tyan, ula200, vlsys_m428, xosd, yard2LCD
-{%- if model == 'SDEC' %}
+{%- if model == 'sdec' %}
 Driver=sdeclcd
 {%- endif %}
 
-{%- if model == 'EZIO' %}
+{%- if model == 'ezio' %}
 Driver=hd44780
 {%- endif %}
 
@@ -544,7 +544,7 @@ Speed=19200
 
 ## Hitachi HD44780 driver ##
 [hd44780]
-{%- if model == 'EZIO' %}
+{%- if model == 'ezio' %}
 ConnectionType=ezio
 Device=/dev/ttyS1
 Keypad=yes
diff --git a/interface-definitions/system-display.xml.in b/interface-definitions/system-display.xml.in
index 7a5cf9283..ac9f17b6c 100644
--- a/interface-definitions/system-display.xml.in
+++ b/interface-definitions/system-display.xml.in
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <interfaceDefinition>
   <!--
-    system display model (SDEC|EZIO)
+    system display model (sdec|ezio)
     system display config (enabled|disabled)
     system display show host (cpu|cpu-all|cpu-hist|disk|load-hist|memory|proc|uptime)
                         network interface <intName> alias <alias>
@@ -21,23 +21,23 @@
           <priority>400</priority>
         </properties>
         <children>
-          <!-- system display model (SDEC|EZIO) -->
+          <!-- system display model (sdec|ezio) -->
           <leafNode name="model">
             <properties>
               <help>Model of the display attached to this system [REQUIRED]</help>
               <completionHelp>
-                <list>SDEC EZIO</list>
+                <list>sdec ezio</list>
               </completionHelp>
               <constraint>
-                <regex>(SDEC|EZIO)</regex>
+                <regex>(sdec|ezio)</regex>
               </constraint>
               <constraintErrorMessage>Invalid system display model</constraintErrorMessage>
               <valueHelp>
-                <format>SDEC</format>
+                <format>sdec</format>
                 <description>Display model for Lanner, Watchguard, Nexcom NSA, Sophos UTM appliances with built-in SDEC LCD</description>
               </valueHelp>
               <valueHelp>
-                <format>EZIO</format>
+                <format>ezio</format>
                 <description>Display model for Portwell, Caswell appliances with built-in EZIO-100 or EZIO-300 LCD</description>
               </valueHelp>
             </properties>
-- 
cgit v1.2.3


From 440d0fb1115bbfb428132ef91804ae213ffca30f Mon Sep 17 00:00:00 2001
From: fmertz <fireboxled@gmail.com>
Date: Sun, 28 Jun 2020 21:21:27 +0000
Subject: system display: T2564: py code cleanup

* src/conf_mode/system-display.py cleanup use of dictionary
* data/templates/system-display/lcdproc.conf.tmpl cleanup, removed extra DateTime
---
 data/templates/system-display/lcdproc.conf.tmpl | 12 ++--
 src/conf_mode/system-display.py                 | 75 +++++++++++++------------
 2 files changed, 43 insertions(+), 44 deletions(-)

(limited to 'data/templates')

diff --git a/data/templates/system-display/lcdproc.conf.tmpl b/data/templates/system-display/lcdproc.conf.tmpl
index 2fe491e63..92aee8efe 100644
--- a/data/templates/system-display/lcdproc.conf.tmpl
+++ b/data/templates/system-display/lcdproc.conf.tmpl
@@ -37,7 +37,6 @@ ReportToSyslog=true
 DisplayName="{%- if show['title'] %}{{ show['title'] }}{%- else %}VyOS{%- endif %}"
 
 {%- if show['host'] %}
-{#%- for s in show['host'] %#}
 
 [CPU]
 # Show screen
@@ -77,7 +76,6 @@ Active={%- if 'proc' in show['host'] %}true{%- else %}false{%- endif %}
 [Disk]
 # Show screen
 Active={%- if 'disk' in show['host'] %}true{%- else %}false{%- endif %}
-{#%- endfor %#}
 {%- else %} {# if show['host'] #}
 {# Turn off sections that default active #}
 
@@ -90,8 +88,6 @@ Active=false
 [Load]
 Active=false
 
-[TimeDate]
-Active=false
 {%- endif %} {# if show['host'] #}
 
 [TimeDate]
@@ -118,10 +114,10 @@ TimeFormat="%H:%M"
 Active={%- if show['network']['interface'] %}true{%- else %}false{%- endif %}
 {%- for i in show['network']['interface'] %}
 # Show stats for Interface {{ i }}
-Interface0={{ i }}
+Interface{{ loop.index0 }}={{ i }}
 {%- if show['network']['interface'][i]['alias'] %}
 # Interface alias name to display [default: <interface name>]
-Alias0={{ show['network']['interface'][i]['alias'] }}
+Alias{{ loop.index0 }}={{ show['network']['interface'][i]['alias'] }}
 {%- endif %}
 {%- endfor %}
 
@@ -139,7 +135,7 @@ unit=bit
 #transfer=TRUE
 {%- endif %} {# if show['network'] #}
 
-{%- else %} {# if show #}
+{%- else %}{# if show #}
 {# Turn off sections that default active #}
 
 [CPU]
@@ -153,7 +149,7 @@ Active=false
 
 [TimeDate]
 Active=false
-{%- endif %}
+{%- endif %}{# if show #}
 
 [Battery]
 # Show screen
diff --git a/src/conf_mode/system-display.py b/src/conf_mode/system-display.py
index e30d591cc..557b7cf6a 100755
--- a/src/conf_mode/system-display.py
+++ b/src/conf_mode/system-display.py
@@ -15,7 +15,6 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 import os
-import re
 
 from sys import exit
 
@@ -28,53 +27,57 @@ from vyos import airbag
 airbag.enable()
 
 def get_config():
-    c = Config()
+    # Return a (possibly empty) configuration dictionary
+    return Config().get_config_dict(['system', 'display'])
 
-    if not c.exists('system display'):
-        return None
-
-    c.set_level('system display')
-
-    return c.get_config_dict([])
-
-def generate(c):
-    if c == None:
+def generate(config_dict):
+    if not config_dict:
         return None
     # Render config file for daemon LCDd
-    render('/etc/LCDd.conf', 'system-display/LCDd.conf.tmpl', c)
+    render('/etc/LCDd.conf', 'system-display/LCDd.conf.tmpl', config_dict)
     # Render config file for client lcdproc
-    render('/etc/lcdproc.conf', 'system-display/lcdproc.conf.tmpl', c)
+    render('/etc/lcdproc.conf', 'system-display/lcdproc.conf.tmpl', config_dict)
 
     return None
 
-def verify(c):
-    if c == None:
+def verify(config_dict):
+    if not config_dict:
         return None
 
-    if c.get('model') == None:
-        raise ConfigError('For system display, a model is [REQUIRED]')
+    if 'model' not in config_dict:
+        raise ConfigError('Display model is [REQUIRED]')
 
-    if c.get('show') == None:
-        raise ConfigError('For system display, show cannot be empty')
+    if (           'show' not in config_dict
+        or (      'clock' not in config_dict['show']
+            and 'network' not in config_dict['show']
+            and    'host' not in config_dict['show']
+           )
+       ):
+        raise ConfigError('Display show must have a clock, host or network')
 
-    if 'network' in c['show'] and 'interface' not in c['show']['network']:
-        raise ConfigError('system display show network must have at least one interface')
+    if (      'network'     in config_dict['show']
+        and 'interface' not in config_dict['show']['network']
+       ):
+        raise ConfigError('Display show network must have an interface')
 
-    if 'network' in c['show'] and 'interface' in c['show']['network'] and len(c['show']['network']['interface']) > 3:
-        raise ConfigError('system display show network interface cannot have more than 3 entries')
+    if (      'network' in config_dict['show']
+        and 'interface' in config_dict['show']['network']
+        and len(config_dict['show']['network']['interface']) > 3
+       ):
+        raise ConfigError('Display show network cannot have > 3 interfaces')
 
     return None
 
-def apply(c):
-    if not c or 'disabled' in c.keys():
-        # Stop client first
-        run('systemctl stop lcdproc.service')
-        # Stop server next
-        return run('systemctl stop LCDd.service')
-
-    # Stop client first
+def apply(config_dict):
+    # Stop client
     run('systemctl stop lcdproc.service')
-    # Restart server next
+
+    if not config_dict or 'disabled' in config_dict:
+        # Stop server
+        run('systemctl stop LCDd.service')
+        return None
+
+    # Restart server
     run('systemctl restart LCDd.service')
     # Start client
     run('systemctl start lcdproc.service')
@@ -83,10 +86,10 @@ def apply(c):
 
 if __name__ == '__main__':
     try:
-        c = get_config()
-        verify(c)
-        generate(c)
-        apply(c)
+        config_dict = get_config()
+        verify(config_dict)
+        generate(config_dict)
+        apply(config_dict)
     except ConfigError as e:
         print(e)
         exit(1)
-- 
cgit v1.2.3


From d4199a17adeac422882013a8951d18b7c3b74f2a Mon Sep 17 00:00:00 2001
From: fmertz <fireboxled@gmail.com>
Date: Mon, 29 Jun 2020 14:45:57 +0000
Subject: system display: T2564: Changed "duration" to "time"

* data/templates/system-display/LCDd.conf.tmpl duration to time
* interface-definitions/system-display.xml.in duration to time
---
 data/templates/system-display/LCDd.conf.tmpl | 2 +-
 interface-definitions/system-display.xml.in  | 8 ++++----
 2 files changed, 5 insertions(+), 5 deletions(-)

(limited to 'data/templates')

diff --git a/data/templates/system-display/LCDd.conf.tmpl b/data/templates/system-display/LCDd.conf.tmpl
index 8079dcb76..0ef796c76 100644
--- a/data/templates/system-display/LCDd.conf.tmpl
+++ b/data/templates/system-display/LCDd.conf.tmpl
@@ -92,7 +92,7 @@ GoodBye="{%- if bye %}{{ bye }}{%- else %}Bye from VyOS{%- endif %}"
 #FrameInterval=125000
 
 # Sets the default time in seconds to displays a screen. [default: 4]
-WaitTime={%- if duration %}{{ duration }}{%- else%}4{%- endif %}
+WaitTime={%- if time %}{{ time }}{%- else%}4{%- endif %}
 
 # If set to no, LCDd will start with screen rotation disabled. This has the
 # same effect as if the ToggleRotateKey had been pressed. Rotation will start
diff --git a/interface-definitions/system-display.xml.in b/interface-definitions/system-display.xml.in
index afa6dba10..0439288a0 100644
--- a/interface-definitions/system-display.xml.in
+++ b/interface-definitions/system-display.xml.in
@@ -8,7 +8,7 @@
                         clock (big|mini|date-time)
                         title <name>
 
-    system display duration <s>
+    system display time <s>
     system display hello <string>
     system display bye <string>
     system display disabled
@@ -191,8 +191,8 @@
               </leafNode><!--system display show title-->
             </children>
           </node><!--system display show-->
-          <!-- system display duration -->
-          <leafNode name="duration">
+          <!-- system display time -->
+          <leafNode name="time">
             <properties>
               <help>Time in sec to show each screen on the system display</help>
               <valueHelp>
@@ -203,7 +203,7 @@
                 <validator name="numeric" argument="--range 1-30"/>
               </constraint>
             </properties>
-          </leafNode><!--system display duration-->
+          </leafNode><!--system display time-->
           <!-- system display hello  -->
           <leafNode name="hello">
             <properties>
-- 
cgit v1.2.3


From b5e0a1796cc7887245ae79c759f709e1705f5e93 Mon Sep 17 00:00:00 2001
From: fmertz <fireboxled@gmail.com>
Date: Sun, 5 Jul 2020 15:58:33 +0000
Subject: system display: T2564: Added test model

* data/templates/system-display/LCDd.conf.tmpl
* interface-definitions/system-display.xml.in

May need to ba backed out, test code only for USB CrystalFontz CF533
---
 data/templates/system-display/LCDd.conf.tmpl | 45 +++++++---------------------
 interface-definitions/system-display.xml.in  | 10 +++++--
 2 files changed, 17 insertions(+), 38 deletions(-)

(limited to 'data/templates')

diff --git a/data/templates/system-display/LCDd.conf.tmpl b/data/templates/system-display/LCDd.conf.tmpl
index 0ef796c76..1dd646202 100644
--- a/data/templates/system-display/LCDd.conf.tmpl
+++ b/data/templates/system-display/LCDd.conf.tmpl
@@ -60,6 +60,10 @@ Driver=sdeclcd
 Driver=hd44780
 {%- endif %}
 
+{%- if model == 'test' %}
+Driver=CFontzPacket
+{%- endif %}
+
 # Tells the driver to bind to the given interface. [default: 127.0.0.1]
 #Bind=127.0.0.1
 
@@ -191,44 +195,15 @@ Reboot=no
 
 ## CrystalFontz packet driver (for CFA533, CFA631, CFA633 & CFA635) ##
 [CFontzPacket]
-
-# Select the LCD model [default: 633; legal: 533, 631, 633, 635]
-Model=633
-
-# Select the output device to use [default: /dev/lcd]
-Device=/dev/ttyS1
-
-# Set the initial contrast [default: 560; legal: 0 - 1000]
+{%- if model == 'test' %}
+Model=533
+Device=/dev/serial/by-bus/usb0b1.1p1.0
 Contrast=350
-
-# Set the initial brightness [default: 1000; legal: 0 - 1000]
 Brightness=1000
-
-# Set the initial off-brightness [default: 0; legal: 0 - 1000]
-# This value is used when the display is normally
-# switched off in case LCDd is inactive
 OffBrightness=50
-
-# Reinitialize the LCD's BIOS on driver start. [default: no; legal: yes, no]
 Reboot=yes
-
-# Enable the USB flag if the device is connected to an USB port. For
-# serial ports leave it disabled. [default: no; legal: yes, no]
-#USB=yes
-
-# Very old 633 firmware versions do not support partial screen updates using
-# 'Send Data to LCD' command (31). For those devices it may be necessary to
-# enable this flag. [default: no; legal: yes, no]
-#OldFirmware=yes
-
-# Override the LCD size known for the selected model. Usually setting this
-# value should not be necessary.
-#Size=20x4
-
-# Override the default communication speed known for the selected model.
-# Default value depends on model [legal: 19200, 115200]
-#Speed=115200
-
+USB=yes
+{%- endif %}
 
 
 ## Curses driver ##
@@ -546,7 +521,7 @@ Speed=19200
 [hd44780]
 {%- if model == 'ezio' %}
 ConnectionType=ezio
-Device=/dev/ttyS1
+Device=/dev/ttyUSB0
 Keypad=yes
 Size=16x2
 KeyMatrix_4_1=Enter
diff --git a/interface-definitions/system-display.xml.in b/interface-definitions/system-display.xml.in
index 0439288a0..fbd897996 100644
--- a/interface-definitions/system-display.xml.in
+++ b/interface-definitions/system-display.xml.in
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <interfaceDefinition>
   <!--
-    system display model (sdec|ezio)
+    system display model (sdec|ezio|test)
     system display show host (cpu|cpu-all|cpu-hist|disk|load-hist|memory|proc|uptime)
                         network interface <intName> alias <alias>
                                 units (bps|Bps|pps)
@@ -26,10 +26,10 @@
             <properties>
               <help>Model of the display attached to this system [REQUIRED]</help>
               <completionHelp>
-                <list>sdec ezio</list>
+                <list>sdec ezio test</list>
               </completionHelp>
               <constraint>
-                <regex>(sdec|ezio)</regex>
+                <regex>(sdec|ezio|test)</regex>
               </constraint>
               <constraintErrorMessage>Invalid system display model</constraintErrorMessage>
               <valueHelp>
@@ -40,6 +40,10 @@
                 <format>ezio</format>
                 <description>Display model for Portwell, Caswell appliances with built-in EZIO-100 or EZIO-300 LCD</description>
               </valueHelp>
+              <valueHelp>
+                <format>test</format>
+                <description>Test model for USB CrystalFonz CF533</description>
+              </valueHelp>
             </properties>
           </leafNode><!--system display model-->
           <!-- system display disabled -->
-- 
cgit v1.2.3


From b082a6fb211ef19d75c4c81414be9aa1b9248b45 Mon Sep 17 00:00:00 2001
From: Christian Poessinger <christian@poessinger.com>
Date: Thu, 13 Aug 2020 18:31:08 +0200
Subject: lcd: T2564: flatten CLI interface

* set system lcd device <device>
* set system lcd model <modeml>

Both device and model have completion helpers for supported interfaces and LCD
displays.
---
 data/templates/lcd/LCDd.conf.tmpl                  |  126 ++
 data/templates/lcd/lcdproc.conf.tmpl               |   60 +
 data/templates/system-display/LCDd.conf.tmpl       | 1500 --------------------
 data/templates/system-display/lcdproc.conf.tmpl    |  173 ---
 interface-definitions/system-display.xml.in        |  235 ---
 interface-definitions/system-lcd.xml.in            |   62 +
 python/vyos/util.py                                |   12 +
 src/conf_mode/interfaces-wirelessmodem.py          |   12 +-
 src/conf_mode/system-display.py                    |   98 --
 src/conf_mode/system_lcd.py                        |   84 ++
 .../systemd/system/LCDd.service.d/override.conf    |    8 +
 .../system/hostapd@.service.d/override.conf        |    7 +-
 src/systemd/LCDd@.service                          |   10 -
 src/systemd/lcdproc.service                        |   13 +
 src/systemd/lcdproc@.service                       |   10 -
 15 files changed, 369 insertions(+), 2041 deletions(-)
 create mode 100644 data/templates/lcd/LCDd.conf.tmpl
 create mode 100644 data/templates/lcd/lcdproc.conf.tmpl
 delete mode 100644 data/templates/system-display/LCDd.conf.tmpl
 delete mode 100644 data/templates/system-display/lcdproc.conf.tmpl
 delete mode 100644 interface-definitions/system-display.xml.in
 create mode 100644 interface-definitions/system-lcd.xml.in
 delete mode 100755 src/conf_mode/system-display.py
 create mode 100755 src/conf_mode/system_lcd.py
 create mode 100644 src/etc/systemd/system/LCDd.service.d/override.conf
 delete mode 100644 src/systemd/LCDd@.service
 create mode 100644 src/systemd/lcdproc.service
 delete mode 100644 src/systemd/lcdproc@.service

(limited to 'data/templates')

diff --git a/data/templates/lcd/LCDd.conf.tmpl b/data/templates/lcd/LCDd.conf.tmpl
new file mode 100644
index 000000000..da749d04a
--- /dev/null
+++ b/data/templates/lcd/LCDd.conf.tmpl
@@ -0,0 +1,126 @@
+### Autogenerted by system-display.py ##
+
+# LCDd.conf -- configuration file for the LCDproc server daemon LCDd
+#
+# This file contains the configuration for the LCDd server.
+#
+# The format is ini-file-like. It is divided into sections that start at
+# markers that look like [section]. Comments are all line-based comments,
+# and are lines that start with '#' or ';'.
+#
+# The server has a 'central' section named [server]. For the menu there is
+# a section called [menu]. Further each driver has a section which
+# defines how the driver acts.
+#
+# The drivers are activated by specifying them in a driver= line in the
+# server section, like:
+#
+#   Driver=curses
+#
+# This tells LCDd to use the curses driver.
+# The first driver that is loaded and is capable of output defines the
+# size of the display. The default driver to use is curses.
+# If the driver is specified using the -d <driver> command line option,
+# the Driver= options in the config file are ignored.
+#
+# The drivers read their own options from the respective sections.
+
+## Server section with all kinds of settings for the LCDd server ##
+[server]
+
+# Where can we find the driver modules ?
+# NOTE: Always place a slash as last character !
+DriverPath=/usr/lib/x86_64-linux-gnu/lcdproc/
+
+# Tells the server to load the given drivers. Multiple lines can be given.
+# The name of the driver is case sensitive and determines the section
+# where to look for further configuration options of the specific driver
+# as well as the name of the dynamic driver module to load at runtime.
+# The latter one can be changed by giving a File= directive in the
+# driver specific section.
+#
+# The following drivers are supported:
+#   bayrad, CFontz, CFontzPacket, curses, CwLnx, ea65, EyeboxOne, futaba,
+#   g15, glcd, glcdlib, glk, hd44780, icp_a106, imon, imonlcd,, IOWarrior,
+#   irman, joy, lb216, lcdm001, lcterm, linux_input, lirc, lis, MD8800,
+#   mdm166a, ms6931, mtc_s16209x, MtxOrb, mx5000, NoritakeVFD,
+#   Olimex_MOD_LCD1x9, picolcd, pyramid, rawserial, sdeclcd, sed1330,
+#   sed1520, serialPOS, serialVFD, shuttleVFD, sli, stv5730, svga, t6963,
+#   text, tyan, ula200, vlsys_m428, xosd, yard2LCD
+
+{% if model is defined and model.startswith('CFA-') %}
+Driver=CFontzPacket
+{% endif %}
+
+# Tells the driver to bind to the given interface. [default: 127.0.0.1]
+Bind=127.0.0.1
+
+# Listen on this specified port. [default: 13666]
+Port=13666
+
+# Sets the reporting level; defaults to warnings and errors only.
+# [default: 2; legal: 0-5]
+ReportLevel=3
+
+# Should we report to syslog instead of stderr? [default: no; legal: yes, no]
+ReportToSyslog=yes
+
+# User to run as.  LCDd will drop its root privileges and run as this user
+# instead. [default: nobody]
+User=nobody
+
+# The server will stay in the foreground if set to yes.
+# [default: no, legal: yes, no]
+Foreground=yes
+
+# Hello message: each entry represents a display line; default: builtin
+Hello="Starting VyOS"
+Hello="      ...    "
+
+# GoodBye message: each entry represents a display line; default: builtin
+GoodBye=" VyOS shutting"
+GoodBye="    down...   "
+
+# Sets the interval in microseconds for updating the display.
+# [default: 125000 meaning 8Hz]
+FrameInterval=250000 # 4 updates per second
+
+# Sets the default time in seconds to displays a screen. [default: 4]
+WaitTime=1
+
+# If set to no, LCDd will start with screen rotation disabled. This has the
+# same effect as if the ToggleRotateKey had been pressed. Rotation will start
+# if the ToggleRotateKey is pressed. Note that this setting does not turn off
+# priority sorting of screens. [default: on; legal: on, off]
+AutoRotate=on
+
+# If yes, the the serverscreen will be rotated as a usual info screen. If no,
+# it will be a background screen, only visible when no other screens are
+# active. The special value 'blank' is similar to no, but only a blank screen
+# is displayed. [default: on; legal: on, off, blank]
+ServerScreen=blank
+
+# Set master backlight setting. If set to 'open' a client may control the
+# backlight for its own screens (only). [default: open; legal: off, open, on]
+Backlight=on
+
+# Set master heartbeat setting. If set to 'open' a client may control the
+# heartbeat for its own screens (only). [default: open; legal: off, open, on]
+Heartbeat=off
+
+# set title scrolling speed [default: 10; legal: 0-10]
+TitleSpeed=10
+
+{% if model is defined and model is not none %}
+{%   if model.startswith('CFA-') %}
+## CrystalFontz packet driver (for CFA533, CFA631, CFA633 & CFA635) ##
+[CFontzPacket]
+Model={{ model.split('-')[1] }}
+Device={{ device }}
+Contrast=350
+Brightness=500
+OffBrightness=50
+Reboot=yes
+USB=yes
+{%   endif %}
+{% endif %}
diff --git a/data/templates/lcd/lcdproc.conf.tmpl b/data/templates/lcd/lcdproc.conf.tmpl
new file mode 100644
index 000000000..c79f3cd0d
--- /dev/null
+++ b/data/templates/lcd/lcdproc.conf.tmpl
@@ -0,0 +1,60 @@
+### autogenerated by system-lcd.py ###
+
+# LCDproc client configuration file
+
+[lcdproc]
+Server=127.0.0.1
+Port=13666
+
+# set reporting level
+ReportLevel=3
+
+# report to to syslog ?
+ReportToSyslog=true
+
+Foreground=yes
+
+[CPU]
+Active=true
+OnTime=1
+OffTime=2
+ShowInvisible=false
+
+[SMP-CPU]
+Active=false
+
+[Memory]
+Active=false
+
+[Load]
+Active=false
+
+[Uptime]
+Active=true
+
+[ProcSize]
+Active=false
+
+[Disk]
+Active=false
+
+[About]
+Active=false
+
+[TimeDate]
+Active=true
+TimeFormat="%H:%M:%S"
+
+[OldTime]
+Active=false
+
+[BigClock]
+Active=false
+
+[MiniClock]
+Active=false
+
+# Display the title bar in two-line mode. Note that with four lines or more
+# the title is always shown. [default: true; legal: true, false]
+ShowTitle=false
+
diff --git a/data/templates/system-display/LCDd.conf.tmpl b/data/templates/system-display/LCDd.conf.tmpl
deleted file mode 100644
index 1dd646202..000000000
--- a/data/templates/system-display/LCDd.conf.tmpl
+++ /dev/null
@@ -1,1500 +0,0 @@
-### Autogenerted by system-display.py ##
-# LCDd.conf -- configuration file for the LCDproc server daemon LCDd
-#
-# This file contains the configuration for the LCDd server.
-#
-# The format is ini-file-like. It is divided into sections that start at
-# markers that look like [section]. Comments are all line-based comments,
-# and are lines that start with '#' or ';'.
-#
-# The server has a 'central' section named [server]. For the menu there is
-# a section called [menu]. Further each driver has a section which
-# defines how the driver acts.
-#
-# The drivers are activated by specifying them in a driver= line in the
-# server section, like:
-#
-#   Driver=curses
-#
-# This tells LCDd to use the curses driver.
-# The first driver that is loaded and is capable of output defines the
-# size of the display. The default driver to use is curses.
-# If the driver is specified using the -d <driver> command line option,
-# the Driver= options in the config file are ignored.
-#
-# The drivers read their own options from the respective sections.
-
-
-
-## Server section with all kinds of settings for the LCDd server ##
-[server]
-
-# Where can we find the driver modules ?
-# IMPORTANT: Make sure to change this setting to reflect your
-#            specific setup! Otherwise LCDd won't be able to find
-#            the driver modules and will thus not be able to
-#            function properly.
-# NOTE: Always place a slash as last character !
-DriverPath=/usr/lib/x86_64-linux-gnu/lcdproc/
-
-# Tells the server to load the given drivers. Multiple lines can be given.
-# The name of the driver is case sensitive and determines the section
-# where to look for further configuration options of the specific driver
-# as well as the name of the dynamic driver module to load at runtime.
-# The latter one can be changed by giving a File= directive in the
-# driver specific section.
-#
-# The following drivers are supported:
-#   bayrad, CFontz, CFontzPacket, curses, CwLnx, ea65, EyeboxOne, futaba,
-#   g15, glcd, glcdlib, glk, hd44780, icp_a106, imon, imonlcd,, IOWarrior,
-#   irman, joy, lb216, lcdm001, lcterm, linux_input, lirc, lis, MD8800,
-#   mdm166a, ms6931, mtc_s16209x, MtxOrb, mx5000, NoritakeVFD,
-#   Olimex_MOD_LCD1x9, picolcd, pyramid, rawserial, sdeclcd, sed1330,
-#   sed1520, serialPOS, serialVFD, shuttleVFD, sli, stv5730, svga, t6963,
-#   text, tyan, ula200, vlsys_m428, xosd, yard2LCD
-{%- if model == 'sdec' %}
-Driver=sdeclcd
-{%- endif %}
-
-{%- if model == 'ezio' %}
-Driver=hd44780
-{%- endif %}
-
-{%- if model == 'test' %}
-Driver=CFontzPacket
-{%- endif %}
-
-# Tells the driver to bind to the given interface. [default: 127.0.0.1]
-#Bind=127.0.0.1
-
-# Listen on this specified port. [default: 13666]
-#Port=13666
-
-# Sets the reporting level; defaults to warnings and errors only.
-# [default: 2; legal: 0-5]
-#ReportLevel=3
-
-# Should we report to syslog instead of stderr? [default: no; legal: yes, no]
-#ReportToSyslog=yes
-
-# User to run as.  LCDd will drop its root privileges and run as this user
-# instead. [default: nobody]
-User=nobody
-
-# The server will stay in the foreground if set to yes.
-# [default: no, legal: yes, no]
-#Foreground=yes
-
-# Hello message: each entry represents a display line; default: builtin
-Hello="{%- if hello %}{{ hello }}{%- else %}Welcome to VyOS{%- endif %}"
-
-# GoodBye message: each entry represents a display line; default: builtin
-GoodBye="{%- if bye %}{{ bye }}{%- else %}Bye from VyOS{%- endif %}"
-
-# Sets the interval in microseconds for updating the display.
-# [default: 125000 meaning 8Hz]
-#FrameInterval=125000
-
-# Sets the default time in seconds to displays a screen. [default: 4]
-WaitTime={%- if time %}{{ time }}{%- else%}4{%- endif %}
-
-# If set to no, LCDd will start with screen rotation disabled. This has the
-# same effect as if the ToggleRotateKey had been pressed. Rotation will start
-# if the ToggleRotateKey is pressed. Note that this setting does not turn off
-# priority sorting of screens. [default: on; legal: on, off]
-#AutoRotate=off
-
-# If yes, the the serverscreen will be rotated as a usual info screen. If no,
-# it will be a background screen, only visible when no other screens are
-# active. The special value 'blank' is similar to no, but only a blank screen
-# is displayed. [default: on; legal: on, off, blank]
-ServerScreen=no
-
-# Set master backlight setting. If set to 'open' a client may control the
-# backlight for its own screens (only). [default: open; legal: off, open, on]
-#Backlight=open
-
-# Set master heartbeat setting. If set to 'open' a client may control the
-# heartbeat for its own screens (only). [default: open; legal: off, open, on]
-#Heartbeat=open
-
-# set title scrolling speed [default: 10; legal: 0-10]
-#TitleSpeed=10
-
-# The "...Key=" lines define what the server does with keypresses that
-# don't go to any client. The ToggleRotateKey stops rotation of screens, while
-# the PrevScreenKey and NextScreenKey go back / forward one screen (even if
-# rotation is disabled.
-# Assign the key string returned by the driver to the ...Key setting. These
-# are the defaults:
-ToggleRotateKey=Enter
-PrevScreenKey=Left
-NextScreenKey=Right
-#ScrollUpKey=Up
-#ScrollDownKey=Down
-
-## The menu section. The menu is an internal LCDproc client. ##
-[menu]
-# If true the server allows transitions between different client's menus
-# [default: false; legal: true, false]
-#PermissiveGoto=false
-
-# You can configure what keys the menu should use. Note that the MenuKey
-# will be reserved exclusively, the others work in shared mode.
-
-# Up to six keys are supported. The MenuKey (to enter and exit the menu), the
-# EnterKey (to select values) and at least one movement keys are required.
-# These are the default key assignments:
-MenuKey=Escape
-EnterKey=Enter
-UpKey=Up
-DownKey=Down
-#LeftKey=Left
-#RightKey=Right
-
-
-### Driver sections are below this line, in alphabetical order  ###
-
-
-## EMAC BayRAD driver ##
-[bayrad]
-
-# Select the output device to use [default: /dev/lcd]
-Device=/dev/lcd
-
-# Set the communication speed [default: 9600; legal:  1200, 2400, 9600, 19200]
-Speed=9600
-
-
-
-## CrystalFontz driver (for CF632 & CF634) ##
-[CFontz]
-
-# Select the output device to use [default: /dev/lcd]
-Device=/dev/ttyS0
-# Select the LCD size [default: 20x4]
-Size=20x4
-# Set the initial contrast [default: 560; legal: 0 - 1000]
-Contrast=350
-# Set the initial brightness [default: 1000; legal: 0 - 1000]
-Brightness=1000
-# Set the initial off-brightness [default: 0; legal: 0 - 1000]
-# This value is used when the display is normally
-# switched off in case LCDd is inactive
-OffBrightness=0
-# Set the communication speed [default: 9600; legal: 1200, 2400, 9600, 19200,
-# 115200]
-Speed=9600
-# Set the firmware version (New means >= 2.0) [default: no; legal: yes, no]
-NewFirmware=no
-# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
-# normally you shouldn't need this
-Reboot=no
-
-
-
-## CrystalFontz packet driver (for CFA533, CFA631, CFA633 & CFA635) ##
-[CFontzPacket]
-{%- if model == 'test' %}
-Model=533
-Device=/dev/serial/by-bus/usb0b1.1p1.0
-Contrast=350
-Brightness=1000
-OffBrightness=50
-Reboot=yes
-USB=yes
-{%- endif %}
-
-
-## Curses driver ##
-[curses]
-
-# color settings
-# foreground color [default: blue]
-Foreground=blue
-# background color when "backlight" is off [default: cyan]
-Background=cyan
-# background color when "backlight" is on [default: red]
-Backlight=red
-
-# display size [default: 20x4]
-Size=20x2
-
-# What position (X,Y) to start the left top corner at...
-# Default: (7,7)
-TopLeftX=7
-TopLeftY=7
-
-# use ASC symbols for icons & bars [default: no; legal: yes, no]
-UseACS=no
-
-# draw Border [default: yes; legal: yes, no]
-DrawBorder=yes
-
-
-
-## Cwlinux driver ##
-[CwLnx]
-
-# Select the LCD model [default: 12232; legal: 12232, 12832, 1602]
-Model=12232
-
-# Select the output device to use [default: /dev/lcd]
-Device=/dev/ttyUSB0
-
-# Select the LCD size. Default depends on model:
-# 12232: 20x4
-# 12832: 21x4
-# 1602: 16x2
-Size=20x4
-
-# Set the communication speed [default: 19200; legal: 9600, 19200]
-Speed=19200
-
-# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
-# normally you shouldn't need this
-Reboot=no
-
-# If you have a keypad connected. Keypad layout is currently not
-# configureable from the config file.
-Keypad=yes
-
-# If you have a non-standard keypad you can associate any keystrings to keys.
-# There are 6 input keys in the CwLnx hardware that generate characters
-# from 'A' to 'F'.
-#
-# The following is the built-in default mapping hardcoded in the driver.
-# You can leave those unchanged if you have a standard keypad.
-# You can change it if you want to report other keystrings or have a non
-# standard keypad.
-# KeyMap_A=Up
-# KeyMap_B=Down
-# KeyMap_C=Left
-# KeyMap_D=Right
-# KeyMap_E=Enter
-# KeyMap_F=Escape
-
-# keypad_test_mode permits one to test keypad assignment
-# Default value is no
-#keypad_test_mode=yes
-
-
-
-## ea65 driver for the display in AOpen XC Cube AV EA65 media barebones ##
-[ea65]
-
-# Device is fixed /dev/ttyS1
-# Width and Height are fixed 9x1
-
-# As the VFD is self luminescent we don't have a backlight
-# But we can use the backlight functions to control the front LEDs
-# Brightness 0 to 299 -> LEDs off
-# Brightness 300 to 699 -> LEDs half bright
-# Brightness 700 to 1000 -> LEDs full bright
-Brightness=500
-# OffBrightness is the the value used for the 'backlight off' state
-OffBrightness=0
-
-
-
-## EyeboxOne driver ##
-[EyeboxOne]
-
-# Select the output device to use [default: /dev/ttyS1]
-# Device=/dev/cua01
-Device=/dev/ttyS1
-
-# Set the display size [default: 20x4]
-Size=20x4
-
-# Switch on the backlight? [default: yes]
-Backlight=yes
-
-# Switch on the cursor? [default: no]
-Cursor=no
-
-# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200]
-Speed=19200
-
-# Enter Key is a \r character, so it's hardcoded in the driver
-LeftKey=D
-RightKey=C
-UpKey=A
-DownKey=B
-EscapeKey=P
-
-# You can find out which key of your display sends which
-# character by setting keypad_test_mode to yes and running
-# LCDd. LCDd will output all characters it receives.
-# Afterwards you can modify the settings above and set
-# keypad_set_mode to no again.
-keypad_test_mode=no
-
-## Futaba TOSD-5711BB VFD Driver ##
-[futaba]
-
-## g15 driver for Logitech G15 Keyboard LCDs ##
-[g15]
-
-# Display size (currently unused)
-size=20x5
-
-
-
-## glcd generic graphical display driver
-[glcd]
-# Select what type of connection. See documentation for types.
-ConnectionType=t6963
-
-# Width and height of the display in pixel. The supported sizes may depend on
-# the ConnectionType. [default: 128x64; legal: 1x1 - 640x480]
-#Size=128x64
-
-# Width and height of a character cell in pixels. This value is only used if
-# the driver has been compiled with FreeType and it is enabled. Otherwise the
-# default 6x8 cell is used.
-#CellSize=12x16
-
-# If LCDproc has been compiled with FreeType 2 support this option can be used
-# to turn if off intentionally. [default: yes; legal: yes, no]
-#useFT2=no
-
-# Path to font file to use for FreeType rendering. This font must be monospace
-# and should contain some special Unicode characters like arrows (Andale Mono
-# is recommended and can be fetched at http://corefonts.sf.net).
-#normal_font=/usr/local/lib/X11/fonts/TTF/andalemo.ttf
-
-# Some fonts miss the Unicode characters used to represent icons. In this case
-# the built-in 5x8 font can used if this option is turned off. [default: yes;
-# legal: yes, no]
-#fontHasIcons=no
-
-# Set the initial contrast if supported by connection type.
-# [default: 600; legal: 0 - 1000]
-#Contrast=600
-
-# Set brightness of the backlight if the backlight is switched 'on'.
-# [default: 800; legal: 0 - 1000]
-#Brightness=1000
-
-# Set brightness of the backlight if the backlight is switched 'off'. Set this
-# to zero to completely turn off the backlight. [default: 100; legal: 0 - 1000]
-#OffBrightness=0
-
-# Time (ms) from first key report to first repeat. Set to 0 to disable repeated
-# key reports. [default: 500; legal: 0 - 3000]
-#KeyRepeatDelay=500
-
-# Time (ms) between repeated key reports. Ignored if KeyRepeatDelay is disabled
-# (set to zero). [default: 300; legal: 0 - 3000]
-#KeyRepeatInterval=300
-
-# Assign key strings to keys. There may be up to 16 keys numbered 'A' to 'Z'.
-# By default keys 'A' to 'F' are assigned Up, Down, Left, Right, Enter, Escape.
-KeyMap_A=Up
-KeyMap_B=Down
-KeyMap_C=Enter
-KeyMap_D=Escape
-
-# --- t6963 options ---
-
-# Parallel port to use [default: 0x378; legal: 0x200 - 0x400]
-#Port=0x378
-
-# Use LPT port in bi-directional mode. This should work on most LPT port
-# and is required for proper timing! [default: yes; legal: yes, no]
-#bidirectional=yes
-
-# Insert additional delays into reads / writes. [default: no; legal: yes, no]
-#delayBus=no
-
-# --- serdisplib options ---
-
-# Name of the underlying serdisplib driver, e.g. ctinclud. See
-# serdisplib documentation for details.
-serdisp_name=t6963
-
-# The display device to use, e.g. serraw:/dev/ttyS0,
-# parport:/dev/parport0 or USB:07c0/1501.
-serdisp_device=/dev/ppi0
-
-# Options string to pass to serdisplib during initialization. Use
-# this to set any display related options (e.g. wiring). The display size is
-# always set based on the Size configured above! By default, no options are
-# set.
-# Important: The value must be quoted as it contains equal signs!
-#serdisp_options="INVERT=1"
-
-# --- x11 options ---
-
-# PixelSize is size of each dot in pixels + a pixel gap. [default: 3+1]
-#x11_PixelSize=3+1
-
-# Colors are in RRGGBB format prefixed with "0x".
-# PixelColor: The color of each dot at full contrast. [default: 0x000000]
-#x11_PixelColor=0x000000
-
-# BacklightColor: The color of the backlight as full brightness.
-# [default: 0x80FF80]
-#x11_BacklightColor=0x80FF80
-
-# Border: Adds a border (empty space) around the LCD portion of X11 window.
-# [default: 20]
-#x11_Border=20
-
-# Inverted: inverts the pixels [default: no; legal: yes, no]
-#x11_Inverted=no
-
-# --- picolcdgfx options ---
-
-# Time in ms for usb_read to wait on a key press. [default: 125; legal: >0]
-#picolcdgfx_KeyTimeout=125
-
-# Inverted: Inverts the pixels. [default: no; legal: yes or no]
-#picolcdgfx_Inverted=no
-
-
-
-## glcdlib meta driver for graphical LCDs ##
-[glcdlib]
-
-## mandatory:
-
-# which graphical display supported by graphlcd-base to use [default: image]
-# (see /etc/graphlcd.conf for possible drivers)
-Driver=noritake800
-
-# no=use graphlcd bitmap fonts (they have only one size / font file)
-# yes=use fonts supported by FreeType2 (needs Freetype2 support in
-# libglcdprocdriver and its dependants)
-UseFT2=yes
-
-# text resolution in fixed width characters [default: 16x4]
-# (if it won't fit according to available physical pixel resolution
-# and the minimum available font face size in pixels, then
-# 'DebugBorder' will automatically be turned on)
-TextResolution=20x4
-
-# path to font file to use
-FontFile=/usr/share/fonts/corefonts/courbd.ttf
-
-## these only apply if UseFT2=yes:
-
-# character encoding to use
-CharEncoding=iso8859-2
-
-# minimum size in pixels in which fonts should be rendered
-MinFontFaceSize=7x12
-
-## optional:
-Brightness=50                   # Brightness (in %) if applicable
-Contrast=50                     # Contrast (in %) if applicable
-Backlight=no                    # Backlight if applicable
-UpsideDown=no                   # flip image upside down
-Invert=no                       # invert light/dark pixels
-ShowDebugFrame=no               # turns on/off 1 pixel thick debugging
-                                # border within the usable text area,
-                                # for setting up TextResolution and
-                                # MinFontFaceSize (if using FT2);
-ShowBigBorder=no                # border around the unused area
-ShowThinBorder=yes              # border around the unused area
-PixelShiftX=0
-PixelShiftY=2
-
-
-
-## Matrix Orbital GLK driver ##
-[glk]
-
-# select the serial device to use [default: /dev/lcd]
-Device=/dev/lcd
-
-# set the initial contrast value [default: 500; legal: 0 - 1000]
-Contrast=500
-
-# set the serial port speed [default: 19200; legal: 9600, 19200, 38400, 57600, 115200]
-Speed=19200
-
-
-
-## Hitachi HD44780 driver ##
-[hd44780]
-{%- if model == 'ezio' %}
-ConnectionType=ezio
-Device=/dev/ttyUSB0
-Keypad=yes
-Size=16x2
-KeyMatrix_4_1=Enter
-KeyMatrix_4_2=Up
-KeyMatrix_4_3=Down
-KeyMatrix_4_4=Escape
-{%- endif %}
-
-# Select what type of connection. See documentation for available types.
-#ConnectionType=4bit
-
-# Select model if have non-standard one which require extra initialization or handling or
-# just want extra features it offers.
-# Available: standard (default), extended, winstar_oled, pt6314_vfd
-# - standard is default, use for LCDs not mentioned below.
-# - extended, hd66712, ks0073: allows use 4-line "extended" mode,
-#   same as deprecated now option ExtendedMode=yes
-# - winstar_oled, weh00xxyya: changes initialization for WINSTAR's WEH00xxyyA displays
-#   and allows handling brightness
-# - pt6314_vfd: allows handling brightness on PTC's PT6314 VFDs
-#
-# This option should be independent of connection type.
-#Model = standard
-
-# I/O address of the LPT port. Usual values are: 0x278, 0x378 and 0x3BC.
-# For I2C connections this sets the slave address (usually 0x20).
-#Port=0x378
-
-# Device of the serial, I2C, or SPI interface [default: /dev/lcd]
-#Device=/dev/ttyS0
-
-# Bitrate of the serial port (0 for interface default)
-#Speed=0
-
-# If you have a keypad connected.
-# You may also need to configure the keypad layout further on in this file.
-#Keypad=no
-
-# Set the initial contrast (bwctusb, lcd2usb, and usb4all)
-# [default: 800; legal: 0 - 1000]
-#Contrast=0
-
-# Set brightness of the backlight (lcd2usb and usb4all):
-# Brightness is the brightness while the backlight is set to 'on'.
-# [default: 800; legal: 0 - 1000]
-#Brightness=1000
-
-# OffBrightness is the brightness while the backlight is set to 'off'.
-# [default: 300; legal: 0 - 1000]
-#OffBrightness=0
-
-# Specify if you have a switchable backlight and if yes, can select method for turning it on/off:
-#
-# - none - no switchable backlight is available. For compability also boolean
-#          0, n, no, off and false are aliases.
-# - external - use external pin or any other method defined with ConnectionType backlight
-#          handling. For backward compability also this value is chosen for boolean
-#          TRUE values: 1, y, yes, on and true.
-# - internal - means that backlight is handled using internal commands according
-#          to selected display model (with Model option). Depending on model,
-#          Brightness and OffBrightness options can be taken into account.
-# - internalCmds - means that commands for turning on and off backlight are given
-#          with extra options BacklightOnCmd and BacklightOffCmd, which would be treated
-#          as catch up (last resort) for other types of displays which have similar features.
-#
-# You can provide multiple occurences of this option to use more than one method.
-# Default is model specific: Winstar OLED and PT6314 VFD enables internal backlight mode,
-# for others it is set to none.
-#Backlight = none
-
-# Commands for enabling internal backlight for use with Backlight=internalCmds.
-# Up to 4 bytes can be encoded, as integer number in big-endian order.
-#
-# NOTE: this is advanced option, if command contains bits other than only brighness handling,
-# they must be set accordingly to not disrupt display state. If for example 'FUNCTION SET' command
-# is used for this purpose, bits of interface length (4-bit / 8-bit) must be set according to
-# selected ConnectionType.
-#BacklightCmdOn=0x1223
-
-# Commands for disabling internal backlight for use with Backlight=internalCmds.
-# Up to 4 bytes can be encoded, as integer number in big-endian order.
-#BacklightCmdOff=0x1234
-
-
-# If you have the additional output port ("bargraph") and you want to
-# be able to control it with the lcdproc OUTPUT command
-#OutputPort=no
-
-# Specifies if the last line is pixel addressable (yes) or it controls an
-# underline effect (no). [default: yes; legal: yes, no]
-#Lastline=yes
-
-# Specifies the size of the LCD.
-# In case of multiple combined displays, this should be the total size.
-#Size=20x4
-
-# For multiple combined displays: how many lines does each display have.
-# Vspan=2,2 means both displays have 2 lines.
-#vspan=2,2
-
-# If you have an HD66712, a KS0073 or another controller with 'extended mode',
-# set this flag to get into 4-line mode. On displays with just two lines, do
-# not set this flag.
-# As an additional restriction, controllers with and without extended mode
-# AND 4 lines cannot be mixed for those connection types that support more
-# than one display!
-# NOTE: This option is deprecated in favour of choosing Model=extended option.
-#ExtendedMode=yes
-
-# In extended mode, on some controllers like the ST7036 (in 3 line mode)
-# the next line in DDRAM won't start 0x20 higher. [default: 0x20]
-#LineAddress=0x10
-
-# Character map to to map ISO-8859-1 to the LCD's character set
-# [default: hd44780_default; legal: hd44780_default, hd44780_euro, ea_ks0073,
-# sed1278f_0b, hd44780_koi8_r, hd44780_cp1251, hd44780_8859_5, upd16314,
-# weh001602a_1]
-# (hd44780_koi8_r, hd44780_cp1251, hd44780_8859_5, upd16314 and weh001602a_1
-# are possible if compiled with additional charmaps)
-CharMap=hd44780_default
-
-# Font bank to be used for some displays such as the WINSTAR WEH001602A
-# 0: English/Japanese (default)
-# 1: Western Europe I
-# 2: English/Rusian
-# 3: Western Europe II
-#FontBank=0
-
-# If your display is slow and cannot keep up with the flow of data from
-# LCDd, garbage can appear on the LCDd. Set this delay factor to 2 or 4
-# to increase the delays. Default: 1.
-#DelayMult=2
-
-# Some displays (e.g. vdr-wakeup) need a message from the driver to that it
-# is still alive. When set to a value bigger then null the character in the
-# upper left corner is updated every <KeepAliveDisplay> seconds. Default: 0.
-#KeepAliveDisplay=0
-
-# If you experience occasional garbage on your display you can use this
-# option as workaround. If set to a value bigger than null it forces a
-# full screen refresh <RefreshDiplay> seconds. Default: 0.
-#RefreshDisplay=5
-
-# You can reduce the inserted delays by setting this to false.
-# On fast PCs it is possible your LCD does not respond correctly.
-# Default: true.
-#DelayBus=true
-
-# If you have a keypad you can assign keystrings to the keys.
-# See documentation for used terms and how to wire it.
-# For example to give directly connected key 4 the string "Enter", use:
-#   KeyDirect_4=Enter
-# For matrix keys use the X and Y coordinates of the key:
-#   KeyMatrix_1_3=Enter
-#KeyMatrix_4_1=Enter
-#KeyMatrix_4_2=Up
-#KeyMatrix_4_3=Down
-#KeyMatrix_4_4=Escape
-
-## ICP Peripheral Comminication Protocol driver ##
-# Supports A125 and A106
-#
-# Short Press Select: Down
-# Long Press Select: Up
-# Short Press Enter: Enter
-# Long Press Enter: Escape
-#
-[icp_a106]
-Device=/dev/ttyS1
-
-# Display dimensions
-Size=20x2
-
-
-## Code Mercenaries IO-Warrior driver ##
-[IOWarrior]
-
-# display dimensions
-Size=20x4
-
-# serial number. Must be exactly as listed by usbview
-# (if not given, the 1st IOWarrior found gets used)
-#SerialNumber=00000674
-
-# If you have an HD66712, a KS0073 or another 'almost HD44780-compatible',
-# set this flag to get into extended mode (4-line linear).
-#ExtendedMode=yes
-
-# Specifies if the last line is pixel addressable (yes) or it controls an
-# underline effect (no). [default: yes; legal: yes, no]
-#Lastline=yes
-
-
-
-## Soundgraph/Ahanix/Silverstone/Uneed/Accent iMON driver ##
-[imon]
-
-# select the device to use
-Device=/dev/lcd0
-
-# display dimensions
-Size=16x2
-
-# Character map to to map ISO-8859-1 to the displays character set.
-# [default: none; legal: none, hd44780_euro, upd16314, hd44780_koi8_r,
-# hd44780_cp1251, hd44780_8859_5 ] (upd16314, hd44780_koi8_r,
-# hd44780_cp1251, hd44780_8859_5 are possible if compiled with additional
-# charmaps)
-CharMap=hd44780_euro
-
-## Soundgraph iMON LCD ##
-[imonlcd]
-# Specify which iMon protocol should be used
-# [legal: 0, 1; default: 0]
-# Choose 0 for 15c2:ffdc device,
-# Choose 1 for 15c2:0038 device
-Protocol=0
-
-# Set the exit behavior [legal: 0-2; default: 1]
-# 0 means leave shutdown message,
-# 1 means show the big clock,
-# 2 means blank device
-#OnExit=2
-
-# Select the output device to use [default: /dev/lcd0]
-Device=/dev/lcd0
-
-# Select the displays contrast [default: 200; legal: 0-1000]
-Contrast=200
-
-# Specify the size of the display in pixels [default: 96x16]
-#Size=96x16
-
-# Set the backlight state [default: on; legal: on, off]
-#Backlight=on
-
-# Set the disc mode [legal: 0,1; default: 0]
-# 0 => spin the "slim" disc - two disc segments,
-# 1 => their complement spinning;
-#DiscMode=0
-
-
-
-## IrMan driver ##
-[IrMan]
-# in case of trouble with IrMan, try the Lirc emulator for IrMan
-
-# Select the input device to use
-#Device=/dev/irman
-
-# Select the configuration file to use
-#Config=/etc/irman.cfg
-
-
-
-## IRtrans driver ##
-[irtrans]
-
-# Does the device have a backlight? [default: no; legal: yes, no]
-#Backlight=no
-
-# IRTrans device to connect to [default: localhost]
-#Hostname=localhost
-
-# display dimensions
-Size=16x2
-
-
-
-## Joystick driver ##
-[joy]
-
-# Select the input device to use [default: /dev/js0]
-Device=/dev/js0
-
-# set the axis map
-Map_Axis1neg=Left
-Map_Axis1pos=Right
-Map_Axis2neg=Up
-Map_Axis2pos=Down
-
-# set the button map
-Map_Button1=Enter
-Map_Button2=Escape
-
-
-## JW-002 driver ##
-[jw002]
-
-# Select the output device to use [default: /dev/lcd]
-#Device=/dev/ttyS0
-
-# Set the display size [default: 24x8]
-Size=24x8 
-
-# Optional X and Y offsets (in characters) to center a smaller display
-# size on the full 24x8 panel
-X_offset=0
-Y_offset=0   
-
-# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200]
-Speed=19200
-
-# Pick which font page to use [default: 0]
-# Note that different fonts probably have their bargraph chars in different
-# spots.  For ROM-based fonts 0-3, those characters are already known.
-Font=0
-
-# The following table translates from jw002 key letters to logical key names.
-# By default no keys are mapped, meaning the keypad is not used at all.
-#KeyMap_I=Left
-#KeyMap_J=Right
-#KeyMap_H=Up
-#KeyMap_K=Down
-#KeyMap_L=Enter
-#KeyMap_A=Escape
-# See the [menu] section for an explanation of the key mappings
-
-# You can find out which key of your display sends which
-# character by setting keypad_test_mode to yes and running
-# LCDd. LCDd will output all characters it receives.
-# Afterwards you can modify the settings above and set
-# keypad_set_mode to no again.
-keypad_test_mode=no
-
-
-## LB216 driver ##
-[lb216]
-
-# Select the output device to use [default: /dev/lcd]
-Device=/dev/lcd
-
-# Set the initial brightness [default: 255; legal: 0 - 255]
-Brightness=255
-
-# Set the communication speed [default: 9600; legal: 2400, 9600]
-Speed=9600
-
-# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
-Reboot=no
-
-
-
-## LCDM001 driver ##
-[lcdm001]
-
-Device=/dev/ttyS1
-
-# keypad settings
-# Keyname      Function
-#              Normal context              Menu context
-# -------      --------------              ------------
-# PauseKey     Pause/Continue              Enter/select
-# BackKey      Back(Go to previous screen) Up/Left
-# ForwardKey   Forward(Go to next screen)  Down/Right
-# MainMenuKey  Open main menu              Exit/Cancel
-PauseKey=LeftKey
-BackKey=UpKey
-ForwardKey=DownKey
-MainMenuKey=RightKey
-
-# You can rearrange the settings here.
-# If your device is broken, have a look at server/drivers/lcdm001.h
-
-
-
-## HNE LCTerm driver ##
-[lcterm]
-Device=/dev/ttyS1
-Size=16x2
-
-
-## Linux event device input driver ##
-[linux_input]
-
-# Select the input device to use [default: /dev/input/event0]. This may be
-# either an absolute path to the input node, starting with '/', or
-# an input device name, e.g. "Logitech Gaming Keyboard Gaming Keys".
-# Device=/dev/input/event0
-
-# specify a non-default key map
-#key=1,Escape
-#key=28,Enter
-#key=96,Enter
-#key=105,Left
-#key=106,Right
-#key=103,Up
-#key=108,Down
-
-
-## LIRC input driver ##
-[lirc]
-
-# Specify an alternative location of the lircrc file [default: ~/.lircrc]
-#lircrc=/etc/lircrc.lcdproc
-
-# Must be the same as in your lircrc
-#prog=lcdd
-
-
-
-## LIS MCE 2005 driver ##
-[lis]
-
-# Set the initial brightness [default: 1000; legal: 0 - 1000]
-# 0-250 = 25%, 251-500 = 50%, 501-750 = 75%, 751-1000 = 100%
-#Brightness=1000
-
-# Columns by lines [default: 20x2]
-#Size=20x2
-
-# USB Vendor ID [default: 0x0403]
-# Change only if testing a compatible device.
-#VendorID=0x0403
-
-# USB Product ID [default: 0x6001]
-# Change only if testing a compatible device.
-#ProductID=0x6001
-
-# Specifies if the last line is pixel addressable (yes) or it only controls an
-# underline effect (no). [default: yes; legal: yes, no]
-#Lastline=yes
-
-
-
-##The driver for the VFD of the Medion MD8800 PC ##
-[MD8800]
-# device to use [default: /dev/ttyS1]
-#Device=/dev/ttyS1
-
-# display size [default: 16x2]
-#Size=16x2
-
-# Set the initial brightness [default: 1000; legal: 0 - 1000]
-Brightness=1000
-# Set the initial off-brightness [default: 0; legal: 0 - 1000]
-# This value is used when the display is normally
-# switched off in case LCDd is inactive
-OffBrightness=50
-
-
-
-## Futuba MDM166A Display
-[mdm166a]
-# Show self-running clock after LCDd shutdown
-# Possible values: [default: no; legal: no, small, big]
-Clock=big
-# Dim display, no dimming gives full brightness [default: no, legal: yes, no]
-Dimming=no
-# Dim display in case LCDd is inactive [default: no, legal: yes, no]
-OffDimming=yes
-
-
-
-## MSI MS-6931 driver for displays in 1HU servers ##
-[ms6931]
-
-# device to use [default: /dev/ttyS1]
-Device=/dev/ttyS1
-
-# display size [default: 16x2]
-#Size=16x2
-
-
-
-## MTC-S16209x driver ##
-[mtc_s16209x]
-
-# Select the output device to use [default: /dev/lcd]
-Device=/dev/lcd
-
-# Set the initial brightness [default: 255; legal: 0 - 255]
-Brightness=255
-
-# Reinitialize the LCD's BIOS [default: no; legal: yes, no]
-Reboot=no
-
-
-
-## Matrix Orbital driver ##
-[MtxOrb]
-
-# Select the output device to use [default: /dev/lcd]
-Device=/dev/ttyS0
-
-# Set the display size [default: 20x4]
-Size=20x4
-
-# Set the display type [default: lcd; legal: lcd, lkd, vfd, vkd]
-Type=lkd
-
-# Set the initial contrast [default: 480]
-# NOTE: The driver will ignore this if the display
-#       is a vfd or vkd as they don't have this feature
-Contrast=480
-
-# Some old displays do not have an adjustable backlight but only can
-# switch the backlight on/off. If you experience randomly appearing block
-# characters, try setting this to false. [default: yes; legal: yes, no]
-hasAdjustableBacklight=no
-
-# Set the initial brightness [default: 1000; legal: 0 - 1000]
-Brightness=1000
-# Set the initial off-brightness [default: 0; legal: 0 - 1000]
-# This value is used when the display is normally
-# switched off in case LCDd is inactive
-OffBrightness=0
-
-# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200]
-Speed=19200
-
-# The following table translates from MtxOrb key letters to logical key names.
-# By default no keys are mapped, meaning the keypad is not used at all.
-#KeyMap_A=Left
-#KeyMap_B=Right
-#KeyMap_C=Up
-#KeyMap_D=Down
-#KeyMap_E=Enter
-#KeyMap_F=Escape
-# See the [menu] section for an explanation of the key mappings
-
-# You can find out which key of your display sends which
-# character by setting keypad_test_mode to yes and running
-# LCDd. LCDd will output all characters it receives.
-# Afterwards you can modify the settings above and set
-# keypad_set_mode to no again.
-keypad_test_mode=no
-
-
-
-## mx5000 driver for LCD display on the Logitech MX5000 keyboard ##
-[mx5000]
-
-# Select the output device to use [default: /dev/hiddev0]
-Device = /dev/hiddev0
-# Time to wait in ms after the refresh screen has been sent [default: 1000]
-WaitAfterRefresh = 1000
-
-
-
-## Noritake VFD driver ##
-[NoritakeVFD]
-# device where the VFD is. Usual values are /dev/ttyS0 and /dev/ttyS1
-# [default: /dev/lcd]
-Device=/dev/ttyS0
-# Specifies the size of the LCD.
-Size=20x4
-# Set the initial brightness [default: 1000; legal: 0 - 1000]
-Brightness=1000
-# Set the initial off-brightness [default: 0; legal: 0 - 1000]
-# This value is used when the display is normally
-# switched off in case LCDd is inactive
-OffBrightness=50
-# set the serial port speed [default: 9600, legal: 1200, 2400, 9600, 19200, 115200]
-Speed=9600
-# Set serial data parity [default: 0; legal: 0-2 ]
-# Meaning: 0(=none), 1(=odd), 2(=even)
-Parity=0
-# re-initialize the VFD [default: no; legal: yes, no]
-Reboot=no
-
-
-
-## Olimex MOD-LCD1x9 driver ##
-[Olimex_MOD_LCD1x9]
-
-# device file of the i2c controler
-Device=/dev/i2c-0
-
-
-## Mini-box.com picoLCD (usblcd) driver ##
-[picolcd]
-
-# KeyTimeout is only used if the picoLCD driver is built with libusb-0.1. When
-# built with libusb-1.0 key and IR data is input asynchronously so there is no
-# need to wait for the USB data.
-# KeyTimeout is the time in ms that LCDd spends waiting for a key press before
-# cycling through other duties.  Higher values make LCDd use less CPU time and
-# make key presses more detectable.  Lower values make LCDd more responsive
-# but a little prone to missing key presses.  500 (.5 second) is the default
-# and a balanced value. [default: 500; legal: 0 - 1000]
-KeyTimeout=500
-
-# Key auto repeat is only available if the picoLCD driver is built with
-# libusb-1.0. Use KeyRepeatDelay and KeyRepeatInterval to configure key auto
-# repeat.
-#
-# Key auto repeat delay (time in ms from first key report to first repeat). Use
-# zero to disable auto repeat. [default: 300; legal: 0 - 3000]
-KeyRepeatDelay=300
-
-# Key auto repeat interval (time in ms between repeat reports). Only used if
-# KeyRepeatDelay is not zero. [default: 200; legal: 0 - 3000]
-KeyRepeatInterval=200
-
-# Sets the initial state of the backlight upon start-up.
-# [default: on; legal: on, off]
-#Backlight=on
-
-# Set the initial brightness [default: 1000; legal: 0 - 1000]. Works only
-# with the 20x4 device
-Brightness=1000
-
-# Set the brightness while the backlight is 'off' [default: 0; legal: 0 - 1000].
-# Works only with the 20x4 device.
-#OffBrightness=0
-
-# Set the initial contrast [default: 1000; legal: 0 - 1000]
-Contrast=1000
-
-# Link the key lights to the backlight? [default: on; legal: on, off]
-#LinkLights=off
-
-# Light the keys? [default: on; legal: on, off]
-Keylights=on
-
-# If Keylights is on, the you can unlight specific keys below:
-# Key0 is the directional pad.  Key1 - Key5 correspond to the F1 - F5 keys.
-# There is no LED for the +/- keys.  This is a handy way to indicate to users
-# which keys are disabled.  [default: on; legal: on, off]
-Key0Light=on
-Key1Light=on
-Key2Light=on
-Key3Light=on
-Key4Light=on
-Key5Light=on
-
-# Host name or IP address of the LIRC instance that is to receive IR codes
-# If not set, or set to an empty value, IR support is disabled.
-#LircHost=127.0.0.1
-
-# UDP port on which LIRC is listening [default: 8765; legal: 1 - 65535]
-LircPort=8765
-
-# UDP data time unit for LIRC  [default: off; legal: on, off]
-# On:  times sent in microseconds (requires LIRC UDP driver that accepts this).
-# Off: times sent in 'jiffies' (1/16384s) (supported by standard LIRC UDP driver).
-LircTime_us=on
-
-# Threshold in microseconds of the gap that triggers flushing the IR data
-# to lirc [default: 8000; legal: 1000 - ]
-# If LircTime_us is on values greater than 32.767ms will disable the flush
-# If LircTime_us is off values greater than 1.999938s will disable the flush
-LircFlushThreshold=10000
-
-
-
-## Pyramid LCD driver ##
-[pyramid]
-
-# device to connect to [default: /dev/lcd]
-Device=/dev/ttyUSB0
-
-
-
-## rawserial driver ##
-[rawserial]
-
-# Select the output device to use [default: /dev/cuaU0]
-Device=/dev/ttyS0
-
-# Serial port baudrate [default: 9600]
-Speed=9600
-
-# Specifies the size of the LCD. If this driver is loaded as a secondary driver
-# it always adopts to the size of the primary driver. If loaded as the only
-# (or primary) driver, the size can be set. [default: 40x4]
-#Size=16x2
-
-# How often to dump the LCD contents out the port, in Hertz (times per second)
-# 1 = once per second, 4 is 4 times per second, 0.1 is once every 10 seconds.
-# [default: 1; legal: 0.0005 - 10]
-UpdateRate=1
-
-
-
-## SDEC driver for Watchguard Firebox ##
-[sdeclcd]
-# No options
-
-
-## Seiko Epson 1330 driver ##
-[sed1330]
-
-# Port where the LPT is. Common values are 0x278, 0x378 and 0x3BC
-Port=0x378
-
-# Type of LCD module (legal: G321D, G121C, G242C, G191D, G2446, SP14Q002)
-# Note: Currently only tested with G321D & SP14Q002.
-Type=G321D
-
-# Width x Height of a character cell in pixels [legal: 6x7 - 8x16; default: 6x10]
-CellSize=6x10
-
-# Select what type of connection [legal: classic, bitshaker; default: classic]
-ConnectionType=classic
-
-
-
-## Seiko Epson 1520 driver ##
-[sed1520]
-
-# Port where the LPT is. Usual values are 0x278, 0x378 and 0x3BC
-Port=0x378
-
-# Select the interface type (wiring) for the display. Supported values are
-# 68 for 68-style connection (RESET level high) and 80 for 80-style connection
-# (RESET level low). [legal: 68, 80; default: 80]
-InterfaceType=80
-
-# On fast machines it may be necessary to slow down transfer to the display.
-# If this value is set to zero, delay is disabled. Any value greater than
-# zero slows down each write by one microsecond. [legal: 0-1000; default: 1]
-DelayMult=0
-
-# The original wiring used an inverter to drive the control lines. If you do
-# not use an inverter set haveInverter to no. [default: yes; legal: yes, no]
-HaveInverter=no
-
-# On some displays column data in memory is mapped to segment lines from right
-# to left. This is called inverted mapping (not to be confused with
-# 'haveInverter' from above). [default: no; legal: yes, no]
-#InvertedMapping=yes
-
-# At least one display is reported (Everbouquet MG1203D) that requires sending
-# three times 0xFF before a reset during initialization.
-# [default: no; legal: yes, no]
-#UseHardReset=yes
-
-
-## serial POS display driver ##
-[serialPOS]
-
-# Device to use in serial mode [default: /dev/ttyS0]
-Device=/dev/ttyS0
-
-# Specifies the size of the display in characters. [default: 16x2]
-Size=16x2
-
-# Specifies the cell size of each character cell on the display in characters.
-# [default: 5x8]
-Cellsize=5x8
-
-# Specifies the number of custom characters supported by the display.
-# [default: 0]
-Custom_chars=0
-
-# Set the communication protocol to use with the POS display.
-# [default: AEDEX; legal: AEDEX, CD5220, Epson, Emax, LogicControls, Ultimate]
-Type=AEDEX
-
-# communication baud rate with the display [default: 9600; legal: 1200, 2400,
-# 4800, 9600, 19200, 115200]
-Speed=9600
-
-
-
-## Serial VFD driver ##
-## Drives various (see below) serial 5x7dot VFD's.  ##
-[serialVFD]
-
-# Specifies the displaytype.[default: 0]
-# 0 NEC (FIPC8367 based) VFDs.
-# 1 KD Rev 2.1.
-# 2 Noritake VFDs (*).
-# 3 Futaba VFDs
-# 4 IEE S03601-95B
-# 5 IEE S03601-96-080 (*)
-# 6 Futaba NA202SD08FA (allmost IEE compatible)
-# 7 Samsung 20S207DA4 and 20S207DA6
-# 8 Nixdorf BA6x / VT100
-# (* most should work, not tested yet.)
-Type=0
-
-# "no" if display connected serial, "yes" if connected parallel. [default: no]
-# I.e. serial by default
-use_parallel=no
-
-# Number of Custom-Characters. default is display type dependent
-#Custom-Characters=0
-
-# Portaddress where the LPT is. Used in parallel mode only. Usual values are
-# 0x278, 0x378 and 0x3BC.
-Port=0x378
-
-# Set parallel port timing delay (us). Used in parallel mode only.
-# [default: 2; legal: 0 - 255]
-#PortWait=2
-
-# Device to use in serial mode. Usual values are /dev/ttyS0 and /dev/ttyS1
-Device=/dev/ttyS1
-
-# Specifies the size of the VFD.
-Size=20x2
-
-# Set the initial brightness [default: 1000; legal: 0 - 1000]
-# (4 steps 0-250, 251-500, 501-750, 751-1000)
-Brightness=1000
-# Set the initial off-brightness [default: 0; legal: 0 - 1000]
-# This value is used when the display is normally
-# switched off in case LCDd is inactive
-# (4 steps 0-250, 251-500, 501-750, 751-1000)
-OffBrightness=0
-
-# set the serial port speed [default: 9600; legal: 1200, 2400, 9600, 19200, 115200]
-Speed=9600
-
-# enable ISO 8859 1 compatibility [default: yes; legal: yes, no]
-#ISO_8859_1=yes
-
-
-
-## shuttleVFD driver ##
-[shuttleVFD]
-# No options
-
-
-
-## stv5730 driver ##
-[stv5730]
-
-# Port the device is connected to [default: 0x378]
-Port=0x378
-
-
-[SureElec]
-
-# Port the device is connected to  (by default first USB serial port)
-Device=/dev/ttyUSB0
-
-# Edition level of the device (can be 1, 2 or 3) [default: 2]
-#Edition=1
-
-# set display size
-# Note: The size can be obtained directly from device for edition 2 & 3.
-#Size=16x2
-
-# Set the initial contrast [default: 480; legal: 0 - 1000]
-#Contrast=200
-
-# Set the initial brightness [default: 480; legal: 1 - 1000]
-#Brightness=480
-
-# Set the initial off-brightness [default: 100; legal: 1 - 1000]
-# This value is used when the display is normally
-# switched off in case LCDd is inactive
-#OffBrightness=100
-
-
-## SVGAlib driver ##
-[svga]
-
-# svgalib mode to use [default: G320x240x256 ]
-# legal values are supported svgalib modes
-#Mode=G640x480x256
-
-# set display size [default: 20x4]
-Size=20x4
-
-# Set the initial contrast [default: 500; legal: 0 - 1000]
-# Can be set but does not change anything internally
-Contrast=500
-
-# Set the initial brightness [default: 1000; legal: 1 - 1000]
-Brightness=1000
-
-# Set the initial off-brightness [default: 500; legal: 1 - 1000]
-# This value is used when the display is normally
-# switched off in case LCDd is inactive
-OffBrightness=500
-
-
-
-## Text driver ##
-[text]
-# Set the display size [default: 20x4]
-Size=20x4
-
-
-
-## Toshiba T6963 driver ##
-[t6963]
-
-# set display size in pixels [default: 128x64]
-Size=128x64
-
-# port to use [default: 0x378; legal: 0x200 - 0x400]
-Port=0x378
-
-# Use LPT port in bi-directional mode. This should work on most LPT port and
-# is required for proper timing! [default: yes; legal: yes, no]
-#bidirectional=yes
-
-# Insert additional delays into reads / writes. [default: no; legal: yes, no]
-#delayBus=no
-
-# Clear graphic memory on start-up. [default: no; legal: yes, no]
-#ClearGraphic=no
-
-
-
-## Tyan Barebones LCD driver (GS10 & GS12 series) ##
-[tyan]
-
-# Select the output device to use [default: /dev/lcd]
-Device=/dev/lcd
-
-# Set the communication speed [default: 9600; legal: 4800, 9600]
-Speed=9600
-
-# set display size [default: 16x2]
-Size=16x2
-
-
-
-## ELV ula200 driver ##
-[ula200]
-
-# Select the LCD size [default: 20x4]
-Size=20x4
-
-# If you have a non standard keypad you can associate any keystrings to keys.
-# There are 6 input key in the CwLnx hardware that generate characters
-# from 'A' to 'F'.
-#
-# The following it the built-in default mapping hardcoded in the driver.
-# You can leave those unchanged if you have a standard keypad.
-# You can change it if you want to report other keystrings or have a non
-# standard keypad.
-# KeyMap_A=Up
-# KeyMap_B=Down
-# KeyMap_C=Left
-# KeyMap_D=Right
-# KeyMap_E=Enter
-# KeyMap_F=Escape
-
-
-
-## Wirz SLI LCD driver ##
-[sli]
-
-# Select the output device to use [default: /dev/lcd]
-Device=/dev/lcd
-
-# Set the communication speed [default: 19200; legal: 1200, 2400, 9600, 19200,
-# 38400, 57600, 115200]
-Speed=19200
-
-
-
-## vlsys_m428 for VFD/IR combination in Moneual MonCaso 320 ##
-[vlsys_m428]
-
-# Select the output device to use [default: /dev/ttyUSB0]
-#Device=/dev/ttyUSB0
-
-
-
-## OnScreen Display using libxosd ##
-[xosd]
-
-# set display size [default: 20x4]
-Size=20x4
-
-# Offset in pixels from the top-left corner of the monitor [default: 0x0]
-Offset=200x200
-
-# X font to use, in XLFD format, as given by "xfontsel"
-Font=-*-terminus-*-r-*-*-*-320-*-*-*-*-*
-
-## Y.A.R.D.2 LCD section
-[yard2LCD]
-Size=20x4
-# If rendering rate is too high, change in server\main.h #define RENDER_FREQ 8 to "1"
-
-# EOF
diff --git a/data/templates/system-display/lcdproc.conf.tmpl b/data/templates/system-display/lcdproc.conf.tmpl
deleted file mode 100644
index 92aee8efe..000000000
--- a/data/templates/system-display/lcdproc.conf.tmpl
+++ /dev/null
@@ -1,173 +0,0 @@
-### autogenerated by system-display.py ###
-
-# system display show host (CPU|SMP-CPU|CPU-Graph|Load|Memory|Proc-Size|Disk|Uptime)
-#                     network interface <intName> alias <alias>
-#                             units (bps|Bps|pps)
-#                     clock (big|mini|date-time)
-
-# LCDproc client configuration file
-
-## general options ##
-[lcdproc]
-# address of the LCDd server to connect to
-Server=127.0.0.1
-
-# Port of the server to connect to
-Port=13666
-
-# set reporting level
-#ReportLevel=2
-
-# report to to syslog ?
-ReportToSyslog=true
-
-# run in foreground [default: false; legal: true, false]
-#Foreground=true
-
-# PidFile location when running as daemon [default: /var/run/lcdproc.pid]
-#PidFile=/var/run/lcdproc.pid
-
-# slow down initial announcement of modes (in 1/100s)
-#delay=2
-
-
-## screen specific configuration options ##
-{%- if show %}
-# display name for the main menu [default: LCDproc HOST]
-DisplayName="{%- if show['title'] %}{{ show['title'] }}{%- else %}VyOS{%- endif %}"
-
-{%- if show['host'] %}
-
-[CPU]
-# Show screen
-Active={%- if 'cpu' in show['host'] %}true{%- else %}false{%- endif %}
-OnTime=1
-OffTime=2
-ShowInvisible=false
-
-[SMP-CPU]
-# Show screen
-Active={%- if 'cpu-all' in show['host'] %}true{%- else %}false{%- endif %}
-
-[Memory]
-# Show screen
-Active={%- if 'memory' in show['host'] %}true{%- else %}false{%- endif %}
-
-[Load]
-# Show screen
-Active={%- if 'load-hist' in show['host'] %}true{%- else %}false{%- endif %}
-# Min Load Avg at which the backlight will be turned off [default: 0.05]
-LowLoad=0.05
-# Max Load Avg at which the backlight will start blinking [default: 1.3]
-HighLoad=1.3
-
-[Uptime]
-# Show screen
-Active={%- if 'uptime' in show['host'] %}true{%- else %}false{%- endif %}
-
-[CPUGraph]
-# Show screen
-Active={%- if 'cpu-hist' in show['host'] %}true{%- else %}false{%- endif %}
-
-[ProcSize]
-# Show screen
-Active={%- if 'proc' in show['host'] %}true{%- else %}false{%- endif %}
-
-[Disk]
-# Show screen
-Active={%- if 'disk' in show['host'] %}true{%- else %}false{%- endif %}
-{%- else %} {# if show['host'] #}
-{# Turn off sections that default active #}
-
-[CPU]
-Active=false
-
-[Memory]
-Active=false
-
-[Load]
-Active=false
-
-{%- endif %} {# if show['host'] #}
-
-[TimeDate]
-# Show screen
-Active={%- if show['clock'] == 'date-time' %}true{%- else %}false{%- endif %}
-# time format [default: %H:%M:%S; legal: see strftime(3)]
-TimeFormat="%H:%M:%S"
-# date format [default: %x; legal: see strftime(3)]
-DateFormat="%x"
-
-[BigClock]
-# Show screen
-Active={%- if show['clock'] == 'big' %}true{%- else %}false{%- endif %}
-
-[MiniClock]
-# Show screen
-Active={%- if show['clock'] == 'mini' %}true{%- else %}false{%- endif %}
-# time format [default: %H:%M; legal: see strftime(3)]
-TimeFormat="%H:%M"
-
-{%- if show['network'] %}
-[Iface]
-# Show screen
-Active={%- if show['network']['interface'] %}true{%- else %}false{%- endif %}
-{%- for i in show['network']['interface'] %}
-# Show stats for Interface {{ i }}
-Interface{{ loop.index0 }}={{ i }}
-{%- if show['network']['interface'][i]['alias'] %}
-# Interface alias name to display [default: <interface name>]
-Alias{{ loop.index0 }}={{ show['network']['interface'][i]['alias'] }}
-{%- endif %}
-{%- endfor %}
-
-# Units to display [default: byte; legal: byte, bit, packet]
-{%- if show['network']['units'] == 'bps' %}
-unit=bit
-{%- elif show['network']['units'] == 'Bps'%}
-unit=byte
-{%- elif show['network']['units'] == 'pps' %}
-unit=packet
-{%- else %}
-unit=bit
-{%- endif %}
-# add screen with transferred traffic
-#transfer=TRUE
-{%- endif %} {# if show['network'] #}
-
-{%- else %}{# if show #}
-{# Turn off sections that default active #}
-
-[CPU]
-Active=false
-
-[Memory]
-Active=false
-
-[Load]
-Active=false
-
-[TimeDate]
-Active=false
-{%- endif %}{# if show #}
-
-[Battery]
-# Show screen
-Active=false
-
-[About]
-# Show screen
-Active=false
-
-[OldTime]
-# Show screen
-Active=false
-# time format [default: %H:%M:%S; legal: see strftime(3)]
-TimeFormat="%H:%M:%S"
-# date format [default: %x; legal: see strftime(3)]
-DateFormat="%x"
-# Display the title bar in two-line mode. Note that with four lines or more
-# the title is always shown. [default: true; legal: true, false]
-#ShowTitle=false
-
-# EOF
diff --git a/interface-definitions/system-display.xml.in b/interface-definitions/system-display.xml.in
deleted file mode 100644
index fbd897996..000000000
--- a/interface-definitions/system-display.xml.in
+++ /dev/null
@@ -1,235 +0,0 @@
-<?xml version="1.0"?>
-<interfaceDefinition>
-  <!--
-    system display model (sdec|ezio|test)
-    system display show host (cpu|cpu-all|cpu-hist|disk|load-hist|memory|proc|uptime)
-                        network interface <intName> alias <alias>
-                                units (bps|Bps|pps)
-                        clock (big|mini|date-time)
-                        title <name>
-
-    system display time <s>
-    system display hello <string>
-    system display bye <string>
-    system display disabled
-    -->
-  <node name="system">
-    <children>
-      <node name="display" owner="${vyos_conf_scripts_dir}/system-display.py">
-        <properties>
-          <help>System display LCD/VFD/LED</help>
-          <priority>400</priority>
-        </properties>
-        <children>
-          <!-- system display model (sdec|ezio) -->
-          <leafNode name="model">
-            <properties>
-              <help>Model of the display attached to this system [REQUIRED]</help>
-              <completionHelp>
-                <list>sdec ezio test</list>
-              </completionHelp>
-              <constraint>
-                <regex>(sdec|ezio|test)</regex>
-              </constraint>
-              <constraintErrorMessage>Invalid system display model</constraintErrorMessage>
-              <valueHelp>
-                <format>sdec</format>
-                <description>Display model for Lanner, Watchguard, Nexcom NSA, Sophos UTM appliances with built-in SDEC LCD</description>
-              </valueHelp>
-              <valueHelp>
-                <format>ezio</format>
-                <description>Display model for Portwell, Caswell appliances with built-in EZIO-100 or EZIO-300 LCD</description>
-              </valueHelp>
-              <valueHelp>
-                <format>test</format>
-                <description>Test model for USB CrystalFonz CF533</description>
-              </valueHelp>
-            </properties>
-          </leafNode><!--system display model-->
-          <!-- system display disabled -->
-          <leafNode name="disabled">
-            <properties>
-              <help>Disable sytem display</help>
-              <valueless/>
-            </properties>
-          </leafNode><!--system display disabled-->
-          <node name="show">
-            <properties>
-              <help>Select the screens for the system display [REQUIRED]</help>
-            </properties>
-            <children>
-              <!-- system display show host (cpu|cpu-all|cpu-hist|disk|load-hist|memory|proc|uptime) -->
-              <leafNode name="host">
-                <properties>
-                  <multi/>
-                  <help>Select host screens for the system display</help>
-                  <completionHelp>
-                    <list>cpu cpu-all cpu-hist disk load-hist memory proc uptime</list>
-                  </completionHelp>
-                  <constraint>
-                    <regex>(cpu|cpu-all|cpu-hist|disk|load-hist|memory|proc|uptime)</regex>
-                  </constraint>
-                  <constraintErrorMessage>Invalid host screen</constraintErrorMessage>
-                  <valueHelp>
-                    <format>cpu</format>
-                    <description>Detailed CPU usage</description>
-                  </valueHelp>
-                  <valueHelp>
-                    <format>cpu-all</format>
-                    <description>CPU usage overview (one line per CPU)</description>
-                  </valueHelp>
-                  <valueHelp>
-                    <format>cpu-hist</format>
-                    <description>CPU usage histogram</description>
-                  </valueHelp>
-                  <valueHelp>
-                    <format>disk</format>
-                    <description>File systems fill level</description>
-                  </valueHelp>
-                  <valueHelp>
-                    <format>load-hist</format>
-                    <description>Load histogram</description>
-                  </valueHelp>
-                  <valueHelp>
-                    <format>memory</format>
-                    <description>Memory and swap usage</description>
-                  </valueHelp>
-                  <valueHelp>
-                    <format>proc</format>
-                    <description>Top processes by size</description>
-                  </valueHelp>
-                  <valueHelp>
-                    <format>uptime</format>
-                    <description>System uptime</description>
-                  </valueHelp>
-                </properties>
-              </leafNode><!--system display show host-->
-              <!-- system display show network -->
-              <node name="network">
-                <properties>
-                  <help>Network settings for system display</help>
-                </properties>
-                <children>
-                  <!-- system display show network interface <interface name> -->
-                  <tagNode name="interface">
-                    <properties>
-                      <help>Show network traffic on the system display [Max 3 interfaces]</help>
-                      <completionHelp>
-                        <script>${vyos_completion_dir}/list_interfaces.py -b</script>
-                      </completionHelp>
-                    </properties>
-                    <children>
-                      <leafNode name="alias">
-                        <properties>
-                          <help>Interface alias</help>
-                          <constraint>
-                            <regex>[A-Za-z0-9]{1,10}</regex>
-                          </constraint>
-                          <constraintErrorMessage>Invalid alias, must be 1 to 10 char or digit</constraintErrorMessage>
-                        </properties>
-                      </leafNode>
-                    </children>
-                  </tagNode><!--system display show network interface-->
-                  <!-- system display show network units -->
-                  <leafNode name="units">
-                    <properties>
-                      <help>Unit for network details</help>
-                      <completionHelp>
-                        <list>bps Bps pps</list>
-                      </completionHelp>
-                      <constraint>
-                        <regex>(bps|Bps|pps)</regex>
-                      </constraint>
-                      <constraintErrorMessage>Invalid network detail unit</constraintErrorMessage>
-                      <valueHelp>
-                        <format>bps</format>
-                        <description>Bit(s) per second</description>
-                      </valueHelp>
-                      <valueHelp>
-                        <format>Bps</format>
-                        <description>Byte(s) per second</description>
-                      </valueHelp>
-                      <valueHelp>
-                        <format>pps</format>
-                        <description>Packet(s) per second</description>
-                      </valueHelp>
-                    </properties>
-                  </leafNode><!--system display show network units-->
-                </children>
-              </node><!--system display show network-->
-              <!-- system display show clock (Big|Mini|Date-Time) -->
-              <leafNode name="clock">
-                <properties>
-                  <!--multi-->
-                  <help>Show a clock on the system display</help>
-                  <completionHelp>
-                    <list>big mini date-time</list>
-                  </completionHelp>
-                  <constraint>
-                    <regex>(big|mini|date-time)</regex>
-                  </constraint>
-                  <constraintErrorMessage>Invalid clock format</constraintErrorMessage>
-                  <valueHelp>
-                    <format>big</format>
-                    <description>Multi-line clock</description>
-                  </valueHelp>
-                  <valueHelp>
-                    <format>mini</format>
-                    <description>Minimal clock</description>
-                  </valueHelp>
-                  <valueHelp>
-                    <format>date-time</format>
-                    <description>Clock with Date and Time </description>
-                  </valueHelp>
-                </properties>
-              </leafNode><!--system display show clock-->
-              <!-- system display show title  -->
-              <leafNode name="title">
-                <properties>
-                  <help>Screen title to show on the system display</help>
-                    <constraint>
-                      <regex>[A-Za-z0-9]{1,16}</regex>
-                    </constraint>
-                    <constraintErrorMessage>Invalid title, must be 1 to 16 char or digit</constraintErrorMessage>
-                </properties>
-              </leafNode><!--system display show title-->
-            </children>
-          </node><!--system display show-->
-          <!-- system display time -->
-          <leafNode name="time">
-            <properties>
-              <help>Time in sec to show each screen on the system display</help>
-              <valueHelp>
-                <format>1-30</format>
-                <description>Numer of seconds</description>
-              </valueHelp>
-              <constraint>
-                <validator name="numeric" argument="--range 1-30"/>
-              </constraint>
-            </properties>
-          </leafNode><!--system display time-->
-          <!-- system display hello  -->
-          <leafNode name="hello">
-            <properties>
-              <help>Message to show when system display first starts</help>
-                <constraint>
-                  <regex>.{1,16}</regex>
-                </constraint>
-                <constraintErrorMessage>Hello message must be 1 to 16 char</constraintErrorMessage>
-            </properties>
-          </leafNode><!--system display hello-->
-          <!-- system display bye  -->
-          <leafNode name="bye">
-            <properties>
-              <help>Message to show when system display stops</help>
-                <constraint>
-                  <regex>.{1,16}</regex>
-                </constraint>
-                <constraintErrorMessage>Bye  message must be 1 to 16 char</constraintErrorMessage>
-            </properties>
-          </leafNode><!--system display bye-->
-        </children>
-      </node><!--system display-->
-    </children>
-  </node><!--system-->
-</interfaceDefinition>
diff --git a/interface-definitions/system-lcd.xml.in b/interface-definitions/system-lcd.xml.in
new file mode 100644
index 000000000..ad59acb6b
--- /dev/null
+++ b/interface-definitions/system-lcd.xml.in
@@ -0,0 +1,62 @@
+<?xml version="1.0"?>
+<interfaceDefinition>
+  <node name="system">
+    <children>
+      <node name="lcd" owner="${vyos_conf_scripts_dir}/system_lcd.py">
+        <properties>
+          <help>System LCD display</help>
+          <priority>100</priority>
+        </properties>
+        <children>
+          <leafNode name="model">
+            <properties>
+              <help>Model of the display attached to this system [REQUIRED]</help>
+              <completionHelp>
+                <list>CFA-533 CFA-631 CFA-633 CFA-635</list>
+              </completionHelp>
+              <valueHelp>
+                <format>CFA-533</format>
+                <description>Crystalfontz CFA-533</description>
+              </valueHelp>
+              <valueHelp>
+                <format>CFA-631</format>
+                <description>Crystalfontz CFA-631</description>
+              </valueHelp>
+              <valueHelp>
+                <format>CFA-633</format>
+                <description>Crystalfontz CFA-633</description>
+              </valueHelp>
+              <valueHelp>
+                <format>CFA-635</format>
+                <description>Crystalfontz CFA-635</description>
+              </valueHelp>
+              <constraint>
+                <regex>^(CFA-533|CFA-631|CFA-633|CFA-635)$</regex>
+              </constraint>
+            </properties>
+          </leafNode>
+          <leafNode name="device">
+            <properties>
+              <help>Physical device used by LCD display</help>
+              <completionHelp>
+                <script>ls -1 /dev | grep ttyS</script>
+                <script>if [ -d /dev/serial/by-bus ]; then ls -1 /dev/serial/by-bus; fi</script>
+              </completionHelp>
+              <valueHelp>
+                <format>ttySXX</format>
+                <description>TTY device name, regular serial port</description>
+              </valueHelp>
+              <valueHelp>
+                <format>usbNbXpY</format>
+                <description>TTY device name, USB based</description>
+              </valueHelp>
+              <constraint>
+                <regex>^(ttyS[0-9]+|usb[0-9]+b.*)$</regex>
+              </constraint>
+            </properties>
+          </leafNode>
+        </children>
+      </node>
+    </children>
+  </node>
+</interfaceDefinition>
diff --git a/python/vyos/util.py b/python/vyos/util.py
index 7078762df..c07fef599 100644
--- a/python/vyos/util.py
+++ b/python/vyos/util.py
@@ -661,3 +661,15 @@ def check_kmod(k_mod):
         if not os.path.exists(f'/sys/module/{module}'):
             if call(f'modprobe {module}') != 0:
                 raise ConfigError(f'Loading Kernel module {module} failed')
+
+def find_device_file(device):
+    """ Recurively search /dev for the given device file and return its full path.
+        If no device file was found 'None' is returned """
+    from fnmatch import fnmatch
+
+    for root, dirs, files in os.walk('/dev'):
+        for basename in files:
+            if fnmatch(basename, device):
+                return os.path.join(root, basename)
+
+    return None
diff --git a/src/conf_mode/interfaces-wirelessmodem.py b/src/conf_mode/interfaces-wirelessmodem.py
index 4081be3c9..6d168d918 100755
--- a/src/conf_mode/interfaces-wirelessmodem.py
+++ b/src/conf_mode/interfaces-wirelessmodem.py
@@ -16,7 +16,6 @@
 
 import os
 
-from fnmatch import fnmatch
 from sys import exit
 
 from vyos.config import Config
@@ -25,22 +24,13 @@ from vyos.configverify import verify_vrf
 from vyos.template import render
 from vyos.util import call
 from vyos.util import check_kmod
+from vyos.util import find_device_file
 from vyos import ConfigError
 from vyos import airbag
 airbag.enable()
 
 k_mod = ['option', 'usb_wwan', 'usbserial']
 
-def find_device_file(device):
-    """ Recurively search /dev for the given device file and return its full path.
-        If no device file was found 'None' is returned """
-    for root, dirs, files in os.walk('/dev'):
-        for basename in files:
-            if fnmatch(basename, device):
-                return os.path.join(root, basename)
-
-    return None
-
 def get_config():
     """
     Retrive CLI config as dictionary. Dictionary can never be empty, as at least the
diff --git a/src/conf_mode/system-display.py b/src/conf_mode/system-display.py
deleted file mode 100755
index 3eafc30c0..000000000
--- a/src/conf_mode/system-display.py
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/usr/bin/env python3
-#
-# Copyright (C) 2020 Francois Mertz fireboxled at gmail.com
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 or later as
-# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-import os
-
-from sys import exit
-
-from vyos.config import Config
-from vyos import ConfigError
-from vyos.util import run
-from vyos.template import render
-
-from vyos import airbag
-airbag.enable()
-
-def get_config():
-    conf = Config()
-    base = ['system', 'display']
-    display = conf.get_config_dict(base, key_mangling=('-', '_'), get_first_key=True)
-    # Return a (possibly empty) configuration dictionary
-    return display
-
-def verify(config_dict):
-    if not config_dict:
-        return None
-
-    if 'model' not in config_dict:
-        raise ConfigError('Display model is [REQUIRED]')
-
-    if (           'show' not in config_dict
-        or (      'clock' not in config_dict['show']
-            and 'network' not in config_dict['show']
-            and    'host' not in config_dict['show']
-           )
-       ):
-        raise ConfigError('Display show must have a clock, host or network')
-
-    if (      'network'     in config_dict['show']
-        and 'interface' not in config_dict['show']['network']
-       ):
-        raise ConfigError('Display show network must have an interface')
-
-    if (      'network' in config_dict['show']
-        and 'interface' in config_dict['show']['network']
-        and len(config_dict['show']['network']['interface']) > 3
-       ):
-        raise ConfigError('Display show network cannot have > 3 interfaces')
-
-    return None
-
-def generate(config_dict):
-    if not config_dict:
-        return None
-    # Render config file for daemon LCDd
-    render('/run/LCDd/LCDd.lo.conf', 'system-display/LCDd.conf.tmpl', config_dict)
-    # Render config file for client lcdproc
-    render('/run/lcdproc/lcdproc.lo.conf', 'system-display/lcdproc.conf.tmpl', config_dict)
-
-    return None
-
-def apply(config_dict):
-    # Stop client
-    run('systemctl stop lcdproc@lo.service')
-
-    if not config_dict or 'disabled' in config_dict:
-        # Stop server
-        run('systemctl stop LCDd@lo.service')
-        return None
-
-    # Restart server
-    run('systemctl restart LCDd@lo.service')
-    # Start client
-    run('systemctl start lcdproc@lo.service')
-
-    return None
-
-if __name__ == '__main__':
-    try:
-        config_dict = get_config()
-        verify(config_dict)
-        generate(config_dict)
-        apply(config_dict)
-    except ConfigError as e:
-        print(e)
-        exit(1)
diff --git a/src/conf_mode/system_lcd.py b/src/conf_mode/system_lcd.py
new file mode 100755
index 000000000..0ad1318f0
--- /dev/null
+++ b/src/conf_mode/system_lcd.py
@@ -0,0 +1,84 @@
+#!/usr/bin/env python3
+#
+# Copyright 2020 VyOS maintainers and contributors <maintainers@vyos.io>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 or later as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import os
+
+from sys import exit
+
+from vyos.config import Config
+from vyos.util import call
+from vyos.util import find_device_file
+from vyos.template import render
+from vyos import ConfigError
+from vyos import airbag
+airbag.enable()
+
+lcdd_conf = '/run/LCDd/LCDd.conf'
+lcdproc_conf = '/run/lcdproc/lcdproc.conf'
+
+def get_config():
+    conf = Config()
+    base = ['system', 'lcd']
+    lcd = conf.get_config_dict(base, key_mangling=('-', '_'),
+                               get_first_key=True)
+    # Return (possibly empty) dictionary
+    return lcd
+
+def verify(lcd):
+    if not lcd:
+        return None
+
+    if not {'device', 'model'} <= set(lcd):
+        raise ConfigError('Both device and driver must be set!')
+
+    return None
+
+def generate(lcd):
+    if not lcd:
+        return None
+
+    if 'device' in lcd:
+        lcd['device'] = find_device_file(lcd['device'])
+
+    # Render config file for daemon LCDd
+    render(lcdd_conf, 'lcd/LCDd.conf.tmpl', lcd, trim_blocks=True)
+    # Render config file for client lcdproc
+    render(lcdproc_conf, 'lcd/lcdproc.conf.tmpl', lcd, trim_blocks=True)
+
+    return None
+
+def apply(lcd):
+    if not lcd:
+        call('systemctl stop lcdproc.service LCDd.service')
+
+        for file in [lcdd_conf, lcdproc_conf]:
+            if os.path.exists(file):
+                os.remove(file)
+    else:
+        # Restart server
+        call('systemctl restart LCDd.service lcdproc.service')
+
+    return None
+
+if __name__ == '__main__':
+    try:
+        config_dict = get_config()
+        verify(config_dict)
+        generate(config_dict)
+        apply(config_dict)
+    except ConfigError as e:
+        print(e)
+        exit(1)
diff --git a/src/etc/systemd/system/LCDd.service.d/override.conf b/src/etc/systemd/system/LCDd.service.d/override.conf
new file mode 100644
index 000000000..5f3f0dc95
--- /dev/null
+++ b/src/etc/systemd/system/LCDd.service.d/override.conf
@@ -0,0 +1,8 @@
+[Unit]
+After=
+After=vyos-router.service
+
+[Service]
+ExecStart=
+ExecStart=/usr/sbin/LCDd -c /run/LCDd/LCDd.conf
+
diff --git a/src/etc/systemd/system/hostapd@.service.d/override.conf b/src/etc/systemd/system/hostapd@.service.d/override.conf
index bb8e81d7a..b03dbc299 100644
--- a/src/etc/systemd/system/hostapd@.service.d/override.conf
+++ b/src/etc/systemd/system/hostapd@.service.d/override.conf
@@ -3,8 +3,7 @@ After=
 After=vyos-router.service
 
 [Service]
-WorkingDirectory=/run/hostapd
-EnvironmentFile=
+WorkingDirectory=/run/LCDd
 ExecStart=
-ExecStart=/usr/sbin/hostapd -B -P /run/hostapd/%i.pid /run/hostapd/%i.conf
-PIDFile=/run/hostapd/%i.pid
+ExecStart=/usr/sbin/LCDd -s 1 -f -c /run/LCDd/LCDd.conf
+
diff --git a/src/systemd/LCDd@.service b/src/systemd/LCDd@.service
deleted file mode 100644
index a4604cf21..000000000
--- a/src/systemd/LCDd@.service
+++ /dev/null
@@ -1,10 +0,0 @@
-[Unit]
-Description=LCD display daemon on %I
-Documentation=man:LCDd(8) http://www.lcdproc.org/
-
-[Service]
-User=root
-ExecStart=/usr/sbin/LCDd -s 1 -f -c /run/LCDd/LCDd.%I.conf
-
-[Install]
-WantedBy=multi-user.target
\ No newline at end of file
diff --git a/src/systemd/lcdproc.service b/src/systemd/lcdproc.service
new file mode 100644
index 000000000..5aa99ec78
--- /dev/null
+++ b/src/systemd/lcdproc.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=LCDproc system status information viewer on %I
+Documentation=man:lcdproc(8) http://www.lcdproc.org/
+After=vyos-router.service
+After=LCDd.service
+
+[Service]
+User=root
+ExecStart=/usr/bin/lcdproc -f -c /run/lcdproc/lcdproc.conf
+PIDFile=/run/lcdproc/lcdproc.pid
+
+[Install]
+WantedBy=multi-user.target
diff --git a/src/systemd/lcdproc@.service b/src/systemd/lcdproc@.service
deleted file mode 100644
index 9a1723dba..000000000
--- a/src/systemd/lcdproc@.service
+++ /dev/null
@@ -1,10 +0,0 @@
-[Unit]
-Description=LCDproc system status information viewer on %I
-Documentation=man:lcdproc(8) http://www.lcdproc.org/
-
-[Service]
-User=root
-ExecStart=/usr/bin/lcdproc -f -c /run/lcdproc/lcdproc.%I.conf
-
-[Install]
-WantedBy=multi-user.target
\ No newline at end of file
-- 
cgit v1.2.3