NIDE/NIDED is a client/server application that emulates virtual input device through the network. With that you may transform your freerunner in a virtual keyboard/mouse to control a remote Linux Box and do other nice things. It's similar to Remoko, but uses a different tecnique.
How it works
NIDE is the client part of the architecture, it's a GUI that show you the virtual device (keyboard, mouse, etc), and recognizes your input actions:
- press a gui button
- press an hardware button (AUX, Power)
- slide your finger on display
- move the freerunner (accelerometers) TBD
If the input action matches some rules in the configuration file it:
- simulate trough nided a mouse move/click or key press/release on the remote linux box
- requests nided to start a process on the remote linux box
- start a local process
- switch to subpages of virtual device.
The NIDED daemon create a virtual keyboard/mouse registering a new device in "uinput", reads command sent by NIDE, translates and inijects them in the system or execute remote applications.
- it works with every network, bt, wifi, usb and so on
- it may request remote command execution (startup application, halt, reboot, etc.)
- it's xml configurable and stylesheet themable, it's easy to create customized virtual devices
- you may create different pages in the same config file and may switch between them
- every page may have two layouts (portrait, landscape), it auto switches beetween them if the system display is rotated
- it may use AUX/POWER button to trigger action (simulate button press, request remote command execution, switch between pages and so on)
- the gui recognizes simple sliding over a user configurable matrix, with a 3*3 matrix you are able to use 72 different sliding
- there is no need to "initiate" action on the controlled host (as in Remoko) it needs only nided started
- it automatically restore the last session at startup, so if you use it to control always the same host you are ready with only one click.
- it requires nided to be installed on the controlled host, that need linux 2.6 and uinput kernel module
- it uses QT library, and that are not provided in OM2009/SHR, you have to build them yourself or take them from the angstrom or my persronal feed
- no authentication is implemented, a stupid and rude security ip access list is used, so you have to use it in highly secure networks
- it may be buggy in some part and may need bug fixing/code restyling
n.b. nide/nidec is in prealpha state
To install nided on the controlled linux box you need subversion and typical build tools:
svn co https://noko.svn.sourceforge.net/svnroot/noko/trunk/nided cd nided ./configure make sudo make install
it will install nided in /usr/local/sbin, and a default nided.conf file in /usr/local/etc/nided.conf, edit this according your needs e.g. uncommenting allow_commands to allow remote execution, or adding/remove trusted ip address.
The default will permit connection from localhost, from 192.168.0.200 and from 192.168.0.202.
To start nided you have to load the uinput module:
sudo modprobe -v uinput
and launch it:
log goes to syslog.
To install nide on freerunner:
opkg update opkg install nide
Three example configuration are provided:
- fullportrait.cfg, full qwerty keyboard + mouse, suitable for using freerunner on 480x640
- fulllandscape.cfg, full qwerty keyboard + mouse, suitable on 640x480, if you use it on 480x640 (or rotate the device with xrandr or other tools) you'll get a fullscreen mouse
- mythtv.cfg, example file to use custom icons, remote commands and sub pages, I use it to conrol mythtv and shutdown my linux box from my bed with a click.
Nide uses uinput codes, and emulates a real keyboard, so the example above file was created by me for emulating an italian keyboard, you have to modify them to match your layout, send me them to have included in the package
How to create new virtual devices
Create a file in /usr/share/nide/devices with extension ".cfg". It's an xml file, the following example should be autoexplaining:
<xml> <page name="default"> <portrait vsizex="5" vsizey="5" vslidex="2" vslidey="2" stylesheet="/usr/share/nide/styles/freerunnert.style" iconpath="/usr/share/nide/icons" > <button code="1" x="0" y="0" width="3" height="3" icon="application-exit.png"/> <button code="10" x="0" y="0" width="2" height="1" text="Esc"/> <button code="2" x="1" y="1" width="1" height="1" text="1" stext="!" atext="¹" satext="¡"/> <button x="0" y="6" text="remote commands" width="3" height="3" gotopage="commands"/> <mouse x="3" y="0" width="3" height="4"/> <key keycode="177" code="28"/> <slide x1="0" y1="0" x2="1" y2="1" localcommand="shutdown -r now"/> </portrait> </page> <page name="commands"> <portrait vsizex="1" vsizey="5"> <button gotopage="default" x="0" y="0" text="return"/> <button x="0" y="3" text="reboot" command="reboot" gotopage="default"/> <button x="0" y="4" text="halt" command="halt" gotopage="default"/> </portrait> </page>
code is the linux input key code, you can find it in /usr/include/linux/input.h, stext, atext, and satext are shift text, alt text, and shift alt texts.
To mark a key as a modifier add the
attribute to the button element where x is:
- 1 - left shift
- 2 - right alt (altgr)
- 4 - right shift
- 8 - left alt
- 16 - leftctrl
- 32 - leftmeta
- 64 - rightctrl
- 128 - rightmeta
Mouse create a virtual mouse, use the right key codes to create button left, right and middle, key is hardware buttons, on the freerunner you may use aux and power.
Slide add a sliding gestures from (x1,y1) to (x2,y2), these coordinates ranges in 0<->vslidex-1, 0<->vslidey-1