Tag/tag.png

Unsupported Version
This article applies to an unsupported version of Ubuntu. More info...

Tag/tag.png

Candidate for Deletion
This article may not be appropriate for this wiki, and may be deleted. More info...

Many of the links here are broken and this project appears to be abandoned.

Discussion of this wiki can be found here

Install gizmod on Ubuntu 11.10+

The Gizmo Daemon (gizmod) is a nice utility that lets you customize how various input devices (keyboards, mice, etc.) interact with Linux. In particular, it can be useful to recognize more exotic input devices that Linux doesn't natively understand. Example: it has support for the Griffin PowerMate dial, and you can then assign arbitrary actions to the dial (scroll, click, etc.).

As of 11.10, gizmod is no longer in the Ubuntu repositories. As such, you have to compile it manually. The gizmod wiki has some good information, but the instructions don't work on Ubuntu 11.10+.

Here I've collected the various tricks necessary to install gizmod on Ubuntu 11.10 (Oneric Ocelot) or 12.04 LTS (Precise Pangolin). You will need to make a small number of modifications to the source code, and compile it.

Follow the official compile-from-source instructions until the Compiling and Installing step: https://sourceforge.net/apps/mediawi...le_from_Source

Changes Required

  • Before that step, you'll need to make the changes detailed in this forum post. Specifically:

size_t errors

  • When attempting to run 'make' you will get errors like:

In file included from ./gizmod-3.5/libHAverage.cpp:31:0:
./gizmod-3.5/libH/Average.hpp:74:5: error: 'size_t' does not name a type

To fix these, make the following edits to the source code:

  • In file ./gizmod-3.5/libH/Average.hpp Add:

#include <stdlib.h>
  • In file ./gizmod-3.5/libH/DynamicBuffer.hpp Add:

#include <stdlib.h>

no member named string errors

  • When attempting to run 'make' you will get errors like:

gizmod-3.5/libGizmod/Processes.cpp: In static member function 'static void Gizmod::Processes::updateProcessTree()':
gizmod-3.5/libGizmod/Processes.cpp:157:27: error: 'class boost::filesystem3::directory_entry' has no member named 'string'

To fix this, make the following change to the source code:

  • In the file ./gizmod-3.5/libGizmod/Proceses.cpp

On line 157, change:

string StatPath = iter->string() + "/stat"; 

To:

string StatPath = iter->path().string() + "/stat";

  • In the file ./gizmod-3.5/gizmod/GizmoDaemon.cpp

On line 1109, change:

ret += "sys.path.insert(0, \"" + iter->string() + "\")\n";

  • To:

ret += "sys.path.insert(0, \"" + iter->path().string() + "\")\n"; 

  • On line 1567, change:

UserScripts.push_back(iter->path().leaf()); 

To:

UserScripts.push_back(iter->path().filename().string()); 

  • On line 2192, change:

if (iter->path().leaf().find("event") != 0) 

To:

if (iter->path().filename().string().find("event") != 0) 

  • On line 2194, change:

eventsFiles.push_back(mEventsDir + "/" + iter->path().leaf()); 

To:

eventsFiles.push_back(mEventsDir + "/" + iter->path().filename().string());

default_name_check error

  • When attempting to run 'make' you will get an error like:

gizmod-3.5/gizmod/Main.cpp: In function 'int main(int, char**)':
gizmod-3.5/gizmod/Main.cpp:57:2: error: 'default_name_check' is not a member of 'boost::filesystem3::path'

To fix this, remove line 57 from ./gizmod-3.5/gizmod/Main.cpp

    // set filesystem to native filesystem checking
    // path::default_name_check(native); // Removed to eliminate compile error

boost error

  • When attempting to run 'make' you will get an error like:

Linking CXX executable gizmod
/usr/bin/ld: CMakeFiles/gizmod.dir/GizmoDaemon.o: undefined reference to symbol 'boost::system::system_category()'
/usr/bin/ld: note: 'boost::system::system_category()' is defined in DSO /usr/lib/libboost_system.so.1.46.1 so try adding it to the linker command line
/usr/lib/libboost_system.so.1.46.1: could not read symbols: Invalid operation

To fix, edit the file /gizmod-3.5/build/gizmod/CMakeFiles/gizmod.dir/link.txt

  • And add -lboost_system to the arguments:

/usr/bin/c++ -O3 -DNDEBUG CMakeFiles/gizmod.dir/GizmoDaemon.o CMakeFiles/gizmod.dir/GizmoUtils.o CMakeFiles/gizmod.dir/GizmodEventHandlerInterface.o CMakeFiles/gizmod.dir/Main.o -o gizmod -rdynamic ../libH/libH.a ../libGizmod/libGizmod.so.3.4.0 -lboost_program_options -lpython2.7 ../libH/libH.a -lboost_filesystem -lboost_system -lboost_thread -lboost_serialization -lboost_python -lasound -lSM -lICE -lX11 -lXext -lutil -lpython2.7 -Wl,-rpath,/home/user/tmp/gizmod/gizmod-3.5/build/libGizmod:

Finish compile

  • With those changes, you should be able to finish the compile steps:

make
sudo make install

Excessive CPU usage

  • If you find that gizmod is using 100% of CPU on your machine, this may be due to how polling interacts with newer kernel versions. The fix is to edit ./gizmod-3.5/libH/FileEventWatcher.cpp line 232-236:

    case WATCH_INOUT:
        flags = O_RDWR;
        //events = POLLIN | POLLOUT; // This line causes 100% CPU usage on newer kernels
        events = POLLIN;// | POLLOUT;
        ModeString = "Read / Write";
        break;

Then re-compile and re-install:

make
sudo make install

Originally posted The Ubuntu Forums (ubuntuforums.org)

GizmodIn11.10and12.04 (last edited 2017-09-06 17:38:45 by ckimes)