New configuration editor for LCDPROC
The last version (1.247, available in Debian unstable as libconfig-model-perl) of Config::Model provides a brand new model for /etc/LCDd.conf. With this model, you can edit or validate your lcdproc configuration.
To edit this configuration the first time, you will have to run:
config-edit -application lcdproc -force
The -force option is required to load the file the first time. (because the default LCDd.conf file contains configuration options for all drivers, even though only one them if usefull).
You will get this screen:
In this screen, you can setup the driver for your adress with a right click on Driver parameter. Once youv’e selected the driver and clicked on ‘store’, the driver will be listed in the left part of the window so you can tune the parameters of this specific driver:
In this screen, I’ve turned the backlight off and added a small note to remember why. This small note will be writted in a comment in /etc/LCDd.conf.
Once all required modifications are done, it’s time to save the configuration file using the menu entry File -> save
Now, let’s see the resulting file (which is a bit long due to the amount of comments in the original LCDd.conf file):
## This file was written by Config::Model ## You may modify the content of this file. Configuration ## modifications will be preserved. Modifications in ## comments may be mangled. # 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 ' # # 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 specifiying 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 command line option, # the Driver= options in the config file are ignored. # # The drivers read their own options from the respective sections. [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/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 af File= directive in the # driver specific section. # # The following drivers are supported: # bayrad, CFontz, CFontz633, CFontzPacket, curses, CwLnx, ea65, # EyeboxOne, g15, glcdlib, glk, hd44780, icp_a106, imon, imonlcd, # IOWarrior, irman, joy, lb216, lcdm001, lcterm, lirc, lis, MD8800, # mdm166a, ms6931, mtc_s16209x, MtxOrb, mx5000, NoritakeVFD, picolcd, # pyramid, sed1330, sed1520, serialPOS, serialVFD, shuttleVFD, sli, # stv5730, svga, t6963, text, tyan, ula200, xosd Driver=imonlcd # Tells the driver to bind to the given interface Bind=127.0.0.1 # Listen on this specified port; defaults to 13666. Port=13666 ReportLevel=3 # Sets the reporting level; defaults to 2 (warnings and errors only). # 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 priviledges, if any, # and run as this user instead. User=nobody Foreground=no Hello= Hello Hello= LCDproc! GoodBye= GoodBye GoodBye= LCDproc! # The server will stay in the foreground if set to true. # Foreground=no # Hello message: each entry represents a display line; default: builtin # Hello=" Welcome to" # Hello=" LCDproc!" # GoodBye message: each entry represents a display line; default: builtin # GoodBye="Thanks for using" # GoodBye=" LCDproc!" # Sets the default time in seconds to displays a screen. WaitTime=5 # 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. # These are the defaults: ToggleRotateKey=Enter PrevScreenKey=Left NextScreenKey=Right ScrollUpKey=Up ScrollDownKey=Down # ScrollUpKey=Up # ScrollDownKey=Down # If you have only 4 keys, you can choose to use this: # ToggleRotateKey=Enter # PrevScreenKey=Up # NextScreenKey=Down # If you have only 3 keys, you can choose to use this: # ToggleRotateKey=Enter # PrevScreenKey=Up [menu] # You can configure what keys the menu should use. Note that the MenuKey # will be reserved exclusively, the others work in shared mode. # The following works excellent with 4 keys or more. MenuKey=Escape EnterKey=Enter UpKey=Up DownKey=Down LeftKey=Left RightKey=Right [imonlcd] Protocol=0 OnExit=2 Device=/dev/lcd0 # My fishes dont like the glow Backlight=off DiscMode=0
You will notice a few things:
- Comments from the original file in section [server] and [menu] were kept
- Unused drivers sections are gone
- The “fishy” note about backlight was saved as a comment above the backlight parameter
If you need to update the file, you will have to run:
sudo config-edit -application lcdproc
The -force option is no longer needed.
If you don’t like to click, you can run:
config-edit -application lcdproc -ui none -save
config-edit -application lcdproc -ui none -save 'server driver=imonlcd - imonlcd Device="/dev/lcd1" '
If you want to know more about lcdproc model, you can view:
- LCDd model and all models for the drivers
- LCDd documentation and the drivers documentationgenerated from these models
Under the hood
I was too lazy to write myself the models of all drivers (about 3500 lines for them all). All models were generated from the LCDd.conf template file provided by lcdproc project. This blog explains how this was done.
But the result is far from perfect. Event though LCDd.conf comments give a lot of semantic information, parameter types could be better adjusted and some of the examples provided in LCDd.conf confuse the model generator.
So the current comments are good, but not enough.
In the future, we could decide on better structural conventions for the comments that would give users the information they need and give a model generator enough information to generate better models.
This will hopefully be the topic of yet another blog…
All the best