it-swarm.com.de

Einrichten eines seriellen 3-m-Touchscreens

Ich habe lange versucht, einen seriellen 3m Touchscreen für Ubuntu 10.04 zu bekommen

Der nächste Beitrag, den ich finden konnte, war dieser: http://ubuntuforums.org/showthread.php?t=1508944&highlight=3m+touchscreen

Leider komme ich an die Stelle, an der ich den Bildschirm berühre, und die Maus springt in die rechte obere Ecke, und das war's. Die Kalibrierungssoftware funktioniert nicht wirklich (Meerenge von 3 m). Entweder startet es manchmal nicht oder es stimmt etwas nicht.

Bearbeiten
Es sieht nun so aus, als hätte das Problem damit zu tun, dass die Kalibrierungssoftware den angeschlossenen Touchscreen nicht erkennt. Mit einigen Änderungen am Installationsskript konnte ich die Kalibrierungssoftware ordnungsgemäß installieren

#!/bin/bash
#
# Copyright 2007-2009 3M. All rights reserved.
#
# This script installs the MT7 touch screen driver
# During installation, all directories must be writeable.
#

# These symbols point to where the MT7 software binaries and data reside.
# The script attempts to detect where the installation kit is. If this
# fails, you need to set BinDir.
# The data directory must be on writeable media. The script normally uses
# the directory where the installation kit resides as the data directory.
# If you need the data directory to be elsewhere, set DataDir.
BinDir=""
DataDir=""

# If desired, define a file to contain driver startup options and set
# the TwDrv_Cfg symbol to the full path of the file. Normally this is
# not needed.
TwDrv_Cfg=""

# This symbol points to where the Java VM binaries reside.
JavaBinDir=""

# These symobls point to system and applictaion directories other than
# those specific to the MT7 software
UdevDir="/etc/udev"
HotplugDir="/etc/hotplug"
XorgDir="/usr/lib/xorg/modules/input"
XFree86Dir="/usr/X11R6/lib/modules/input"
LibDir="/usr/lib"
SEDir1="/usr/selinux/booleans"
SEDir2="/selinux/booleans"
LSBDir="/lib/lsb"

# The InitDir symbol points to where this script places an 'init' script.
# If left blank, this script first looks for /etc/init.d and then /etc/rc.d.
# If this is not appropriate or this script otherwise fails, set this value.
InitDir=""

# This symbol enables permission for some MT7 shared objects on
# SELinux systems. On most systems SEGivePermission is texrel_shlib_t.
# Change this variable if another security type is appropriate.
SEGivePermission="texrel_shlib_t"

# This symbol affects when the X input driver converts raw touch screen
# coordinates into screen coordiates. Normally, the X input driver reports
# the raw coordinates to the X server which then calls an conversion
# routine. Some versions of the X server expect the initial report to
# contain converted coordinates. If your touch behavior is off and
# calibration does not address the problem, set ConvertAtRead to true.
ConvertAtRead="false"

# This symbol defines the name of the xorg.conf file to generate if one is
# not found. Starting with X server version 1.5, this file is not
# automatically generated. This file is needed for MT 7 for Linux to work.
# If you want the file to reside elsewhere, set this symbol.
XorgConf="/etc/X11/xorg.conf"

# These symbols define where the 50MT7-xinit script needs to go and what
# suffix it requires. The script places this file automatically in
# /etc/X11/xinit/xinitrc.d and /etc/X11/Xsession.d without a suffix. If
# your distribution requires another location or requires a suffix on the
# file, set these symbols.
XinitDir=""
XinitSuffix=""

# Determine the installation directory
if [ -z $BinDir ]
then
   if [ $(echo $0 | grep ^/) ]
   then
      BinDir=$0
   else
      BinDir=$(echo $PWD"/"$0 | sed s#[.]/##)
   fi
   BinDir=$(echo $BinDir | sed s%/[^/]*$%%)
fi

# Determine if the system is compatible
$BinDir/TwCompat
if [ $? != 0 ]
then
   echo "ERROR: MT7 for Linux not installed - shared memory support not detected"
   exit
fi

# Determine the data directory
[ -z $DataDir ] && DataDir=$BinDir

# Create the data and fifo directories
if [ $DataDir != $BinDir ]
then
   [ -e $DataDir ] || mkdir $DataDir
   chmod a+w $DataDir
   ln -s $DataDir $BinDir/data
else
   [ -e $BinDir/data ] || mkdir $BinDir/data
fi
chmod a+w $BinDir/data
[ -e $BinDir/data/fifo ] || mkdir $BinDir/data/fifo
chmod a+w $BinDir/data/fifo

# Determine the init script directories
if [ -z $InitDir ] && [ -d /etc/init.d ]
then
   if [ $(ls -l /etc/init.d/ | sed -e /functions/d -e /^total\ [0-9]*$/d | wc -l) != 0 ]
   then
      InitDir="/etc/init.d"
   fi
fi
if [ -z $InitDir ]
then
   if [ -e /etc/rc.d/rc.local ]
   then
      InitDir=/etc/rc.d
   else
      InitDir=$BinDir
   fi
fi

# Install the init script
[ -e $InitDir/TWDrvStartup ] && rm -f $InitDir/TWDrvStartup
sed -e s#%BINDIR%#$BinDir#g \
    -e s#%INITDIR%#$InitDir#g \
    -e s#%LSBDIR%#$LSBDir#g \
    -e s#%TWDRV_CFG%#$TwDrv_Cfg#g $BinDir/TWDrvStartup.ORIG \
    >$InitDir/TWDrvStartup
chmod a+x $InitDir/TWDrvStartup
if Perl $BinDir/TwIsThere.Perl chkconfig
then
   chkconfig --add TWDrvStartup >/dev/null
Elif Perl $BinDir/TwIsThere.Perl update-rc.d
then
   update-rc.d TWDrvStartup defaults >/dev/null
Elif [ -e $InitDir/rc.local ]
then
   sed -e '$ a\
%INITDIR%/TWDrvStartup start
' $InitDir/rc.local >$InitDir/rc.local.TEMP
   rm -f $InitDir/rc.local
   sed -e s#%INITDIR%#$InitDir# $InitDir/rc.local.TEMP >$InitDir/rc.local
   rm -f $InitDir/rc.local.TEMP
   chmod +x $InitDir/rc.local
else
   echo "Cannot install the init script"
fi

# Test for USB support
if [ -z $(uname -r | grep ^2\.4\.) ]
then
   # Copy the udev rules script
   Hotplug=0
   if [ -d $UdevDir/rules.d ]
   then
      if [ -e $UdevDir/rules.d/99-TwDriver.rules ]
      then
         rm -f $UdevDir/rules.d/99-TwDriver.rules
      fi
      sed s#%BINDIR%#$BinDir#g $BinDir/99-TwDriver.rules.ORIG \
         >$UdevDir/rules.d/99-TwDriver.rules
      Hotplug=1
   fi
   if [ -d $HotplugDir/usb ] && [ -e $HotplugDir/usb.agent ]
   then
      [ -e $HotplugDir/usb/TwHotplug ] && rm -f $HotplugDir/usb/TwHotplug
      sed s#%BINDIR%#$BinDir#g $BinDir/TwHotplug.ORIG > $HotplugDir/usb/TwHotplug
      chmod a+x $HotplugDir/usb/TwHotplug
      [ -e $HotplugDir/usb.usermap ] || echo "# Created by MT7" >$HotplugDir/usb.usermap
      sed <$HotplugDir/usb.usermap >$HotplugDir/usb.usermap.TEMP '$ a\
# TwHotplug is for the MT7 for Linux software\
TwHotplug            0x0001      0x0596   0x0000    0x0000       0x0000      0x00         0x00            0x00            0x06            0x00               0x00               0x00000000
'
      rm -f $HotplugDir/usb.usermap
      mv $HotplugDir/usb.usermap.TEMP $HotplugDir/usb.usermap
      Hotplug=1
   fi
   if [ $Hotplug == 0 ]
   then
      echo "Hotplugging of USB touch screen controllers is not supported"
   fi
else
   echo "USB touch screen controllers are not supported under kernel 2.4"
fi

# Test for the version of C++ standard libraries
if [ -e $LibDir/libstdc++.so.6 ]
then
   CppExt="6"
Elif [ -e $LibDir/libstdc++.so.5 ]
then
   CppExt="5"
else
   echo "Cannot find needed libstdc++.so in $LibDir"
   CppExt=""
fi

# Link the libraries into /usr/lib
Perl $BinDir/TwLibInstall.Perl install $LibDir $BinDir/lib*.so
if [ x$CppExt != x ]
then
   Perl $BinDir/TwLibInstall.Perl install $LibDir $BinDir/so$CppExt/lib*.so
fi

# Link RnR sensitive files
if [ x$CppExt != x ]
then
   $BinDir/TwLibTest $LibDir/libTwSystemRnR12.so
   if [ x$? != x0 ]
   then
      rm -f $LibDir/libTwSystem.so
      ln -s $LibDir/libTwSystemRnR12.so $LibDir/libTwSystem.so
      ln -s $BinDir/TwMonitorRnR.bin$CppExt $BinDir/TwMonitor
   else
      $BinDir/TwLibTest $LibDir/libTwSystemRnR.so
      if [ x$? != x0 ]
      then
         rm -f $LibDir/libTwSystem.so
         ln -s $LibDir/libTwSystemRnR.so $LibDir/libTwSystem.so
         ln -s $BinDir/TwMonitorRnR.bin$CppExt $BinDir/TwMonitor
      else
         ln -s $BinDir/TwMonitor.bin$CppExt $BinDir/TwMonitor
      fi
   fi
fi

# Copy the X input driver
XCopyDefault=0
if [ -d $XorgDir ]
then
   XDir=$XorgDir
   if [ -z "$(X -version 2>&1 | grep X\.Org[^1]*1\.[4-9]\.)" ]
   then
      XSrc=$BinDir/twxinput_drv.so
   Elif [ -z "$(X -version 2>&1 | grep X\.Org[^1]*1\.[5-9]\.)" ]
   then
      XSrc=$BinDir/twxinput_drv.so.1.4
   else
      XSrc=$BinDir/twxinput_drv.so.1.5.1
      XCopyDefault=1
   fi
Elif [ -d $XFree86Dir ]
then
   XDir=$XFree86Dir
   XSrc=$BinDir/twxinput_drv.so
else
   XDir=""
   echo "Cannot install the X input module"
fi
if [ -d $XDir ]
then
   [ -e $XDir/twxinput_drv.o ] && rm -f $XDir/twxinput_drv.o
   [ -e $XDir/twxinput_drv.so ] && rm -f $XDir/twxinput_drv.so
   ln -s $XSrc $XDir/twxinput_drv.so
fi

# Install the xinit scripts
if [ -d /etc/X11/xinit/xinitrc.d ]
then
   sed s#%BINDIR%#$BinDir#g $BinDir/50MT7-xinit.ORIG \
      >/etc/X11/xinit/xinitrc.d/50MT7-xinit$XinitSuffix
   chmod a+x /etc/X11/xinit/xinitrc.d/50MT7-xinit$XinitSuffix
fi
if [ -d /etc/X11/Xsession.d ]
then
   sed s#%BINDIR%#$BinDir#g $BinDir/50MT7-xinit.ORIG \
      >/etc/X11/Xsession.d/50MT7-xinit$XinitSuffix
   chmod a+x /etc/X11/Xsession.d/50MT7-xinit$XinitSuffix
fi
if [ x$XinitDir != x ]
then
   sed s#%BINDIR%#$BinDir#g $BinDir/50MT7-xinit.ORIG \
      >$XinitDir/50MT7-xinit$XinitSuffix
   chmod a+x $XinitDir/50MT7-xinit$XinitSuffix
fi

# Set up the SELinux security types
if [ -d $SEDir1 ]
then
   SEDir=$SEDir1
Elif [ -d $SEDir2 ]
then
   SEDir=$SEDir2
else
   SEDir=""
fi
if [ x$SEDir != x ]
then
   chcon -t $SEGivePermission $LibDir/libTwSystem.so
   chcon -t $SEGivePermission $LibDir/libTwConfig.so
   chcon -t $SEGivePermission $LibDir/libTwIO_Utilities.so
   chcon -t $SEGivePermission $LibDir/libTwAppIO_JNI.so
   chcon -t $SEGivePermission $LibDir/libTwCommon_JNI.so
   chcon -t $SEGivePermission $LibDir/libTwConfig_JNI.so
   chcon -t $SEGivePermission $LibDir/libTwUI_JNI.so
   chcon -t $SEGivePermission $LibDir/libTwUICP.so
   [ -e $XDir/twxinput_drv.so ] && chcon -t $SEGivePermission $XDir/twxinput_drv.so
fi

# Set up the configuration
[ -d /dev/shm ] && rm -f /dev/shm/*TwConfig*
sed s#%BINDIR%#$BinDir#g $BinDir/TwFramework.cfg.ORIG >$BinDir/TwFramework.cfg
$BinDir/TwCfgUtil /u $BinDir/TwFramework.cfg
$BinDir/TwCfgUtil /u $BinDir/TwFactory.cfg

# Produce the Remove script
sed -e s#%BINDIR%#$BinDir#g \
    -e s#%UDEVDIR%#$UdevDir#g \
    -e s#%XDIR%#$XDir#g \
    -e s#%LIBDIR%#$LibDir#g \
    -e s#%SEDIR%#$SEDir#g \
    -e s#%HOTPLUGDIR%#$HotplugDir#g \
    -e s#%INITDIR%#$InitDir#g \
    -e s#%XINITDIR%#$XinitDir#g \
    -e s#%XINITSUFFIX%#$XinitSuffix#g \
    $BinDir/Remove.ORIG >$BinDir/Remove

# Produce the X input script
sed -e s#%CONVERT%#$ConvertAtRead#g \
    $BinDir/TWXinputInstall.Perl.ORIG >$BinDir/TWXinputInstall.Perl

# Produce the CP start script
sed -e s#%JAVABINDIR%#$JavaBinDir#g \
    -e s#%BINDIR%#$BinDir# \
    $BinDir/StartCP.ORIG >$BinDir/StartCP

# Set any necessary permissions
chmod a+x $BinDir/TwCalib
chmod a+x $BinDir/TWXinputInstall.Perl
chmod u+x $BinDir/Remove
chmod a+x $BinDir/StartCP

# Copy the default xorg.conf
if [ $XCopyDefault == 1 ]
then
   $BinDir/TWXinputInstall.Perl -find
   if [ $? == 1 ]
   then
      cp -a xorg.conf.ORIG $XorgConf
   fi
fi

Löscht normalerweise diesen Fehler, obwohl ich die Fehler nicht für kritisch halte (Warnungen?)

update-rc.d: warning: /etc/init.d/TWDrvStartup missing LSB keyword 'required-start'

update-rc.d: warning: /etc/init.d/TWDrvStartup missing LSB keyword 'required-stop'

update-rc.d: warning: TWDrvStartup start runlevel arguments (2 3 4 5) do not match LSB Default-Start values (2 5)
update-rc.d: warning: TWDrvStartup stop runlevel arguments (0 1 6) do not match LSB Default-Stop values (0 1 3 4 6)
ln: creating symbolic link `/home/kioskadmin/Desktop/twscreen/TwMonitor': File exists
[email protected]:/home/kioskadmin/Desktop/twscreen# 

Ich habe vor einiger Zeit auch diese Frage über Superuser gestellt, obwohl außer dem Link zu den Ubuntu-Foren nichts. Und niemand auf dem Ubuntu IRC war sehr hilfreich, als er mich auf den gleichen Beitrag verwies. Es scheint, dass Touchscreens zu jenen speziellen Dingen gehören, von denen nicht viele Leute viel wissen.

Also meine Fragen

1 Irgendwelche Tipps, damit dies richtig funktioniert? Mein Hauptproblem scheint der neuere Startvorgang in 10.04 zu sein

2 Gibt es eine alternative Kalibrierungssoftware oder einen Touchscreen-Treiber, die möglicherweise funktionieren oder einen Versuch wert sind? (seriell, nicht USB).

Es scheint, dass der Treiber nicht richtig startet. Die Kalibrierungssoftware und das Bedienfeld erkennen den Controller aus irgendeinem Grund nicht. Ich gehe momentan davon aus, dass das Init-Skript nicht korrekt ist ... wahrscheinlich aufgrund von Änderungen im Ubuntu-Startprozess

Bearbeiten:

Es sieht so aus, als ob ich das Bedienfeldskript jetzt korrekt ausführen kann. Ich hatte Probleme mit Java), musste es jedoch anders ausführen. Jetzt habe ich das Problem, dass das Bedienfeld und die Kalibrierungssoftware den Touchscreen nicht erkennen können , alles läuft, aber ich kann es nicht finden, obwohl es verbunden ist und es reagiert, wenn ich das sceen manuell aktiviere.

Der Fehler ist "Touchscreen 1 ist nicht vorhanden" ....

(auch da scheint es kein touchscreen tag zu geben)

5
WalterJ89

Füge diese PPA hinzu und versuche es

ppa:utouch-team/utouch

1
akshatj

Weitere Informationen zu MultiTouch in Ubuntu finden Sie hier: https://wiki.ubuntu.com/Multitouch#Community%20Help

Stellen Sie sicher, dass Sie das Ergebnis von lsusb angeben, wenn Sie dort Ihre Frage stellen. Vielen Dank!

Dies reicht jedoch möglicherweise nicht aus, um die Gerätetreiber ordnungsgemäß zu konfigurieren. Ich würde vorschlagen, einen Fehler zu melden.

1
MagicFab

Führen Sie das /opt/twscreen/Remove Skript.

bearbeite das /opt/twscreen/TWDrvStartup.ORIG Datei und aktualisieren Sie die BEGIN INIT INFO so aussehen:

### BEGIN INIT INFO
# Provides: TwDriver
# Required-Start:
# Required-Stop:
# Default-Start: 2 5
# Default-Stop: 0 1 3 4 6
# Description: Start the MT 7 touch screen driver
### END INIT INFO

Führen Sie das /opt/twscreen/Install

0
Malan