设置 3M 串行触摸屏

设置 3M 串行触摸屏

我已经尝试了很长时间让串行 3M 触摸屏在 Ubuntu 10.04 上运行。

我能找到的最接近我需要的帖子是这个: http://ubuntuforums.org/showthread.php?t=1508944&highlight=3m+touchscreen

不幸的是,当我触摸屏幕时,鼠标跳到了右上角,就这样了。校准软件真的不起作用(直接来自 3M)。有时它无法启动,或者它出了问题。

现在看来问题出在校准软件无法识别所连接的触摸屏。通过对安装脚本进行一些更改,我能够正确安装校准软件。

#!/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 ]d
   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

通常这会出现这个错误,尽管我认为这些错误并不严重(警告?):

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
root@kiosk1:/home/kioskadmin/Desktop/twscreen# 

我也问过这个问题很久以前在 Super User 上就找到了,不过除了 Ubuntu 论坛的链接外,什么也没有。如果我没记错的话,Ubuntu 论坛上除了向我指出同一篇文章外,没有人能提供什么帮助。看来“触摸屏”是一个专业话题,很多人都不太了解。

我的问题:

1 有什么技巧可以让它正常工作?我的主要问题似乎是 10.04 中较新的启动过程。

2 是否有任何可行或值得尝试的替代校准软件或触摸屏驱动程序?(串行,而非 USB)。

看来驱动程序没有正确启动。校准软件和控制面板由于某种原因没有检测到控制器。我目前的假设是初始化脚本不正确,很可能是由于 Ubuntu 启动过程的变化造成的。

编辑:

看来我现在可以正确运行控制面板脚本了,之前我使用 Java 时遇到了问题,但我只需要以不同的方式执行它。现在我遇到的问题是控制面板和校准软件无法检测到触摸屏。一切都运行正常,但就是找不到它,即使它已连接并且如果我手动启用屏幕,它也会做出响应。

错误是“触摸屏 1 不存在”。

答案1

在 maverick 上,添加此 PPA 并尝试

ppa:utouch-team/utouch

答案2

请参阅此内容以获取有关 Ubuntu 中的 MultiTouch 的帮助:https://wiki.ubuntu.com/Multitouch#Community%20Help

确保在那里提问时包含 lsusb 的结果。谢谢!

但是这可能不足以正确配置您的设备驱动程序。我建议提交错误报告。

答案3

运行/opt/twscreen/Remove脚本。

编辑/opt/twscreen/TWDrvStartup.ORIG文件并更新BEGIN INIT INFO如下:

### 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

跑过/opt/twscreen/Install

相关内容