Qemu:以前のSLES 9クライアントはEvTouchタブレットをサポートしています。

Qemu:以前のSLES 9クライアントはEvTouchタブレットをサポートしています。

Qemu / KVMを介してCentos StreamでSLES 9.0ゲストを実行しています。

詳しくはこちら:ゲストをアップグレードすることはできません。このカーネルバージョン(2.4.21)のみをサポートする特別なハードウェアを実行しています。

残念ながら、SLES 9.0にはQemu経由で提供されるEvTouch USBタブレットの基本的なサポートはありません。検索でKenan Esauのオープンソースevtouchドライバを見つけました(http://www.stz-softwaretechnik.de/~ke/touchscreen/evtouch.htmlまたはhttp://www.conan.de/touchscreen/evtouch.htmlソースでしたか…)ページはダウンしていますが、インターネットアーカイブにはまだタールボールを含む最初のURLのコピーがあります。このようにして、v0.87を除くすべてのバージョンのプリコンパイル済みパッケージとsrcパッケージを正常に取得しました。 v0.87の場合、ソースコードのみが見つかりました。

VNCを介してホストに接続するときに必要なゲストの絶対ポインティングをサポートするようにドライバを取得しようとしています。テーブルドライバなしでは、VNC(実際にはxrdpですが重要ではありません)を介してゲストでマウスを使用することはできません。

- - - - - - - - - 更新 - - - - - - - - -

私が試したこと:元のSLES 9.0はXFree4.3.0.1に付属していました。 xmkmf -aを介してドライバをインストールすると、XFreeソースファイルが欠落してソースファイルを取得する必要がありました。ただし、4.3.0のソースコードには、ドライバが含めたいファイルはすべて含まれていません。プリコンパイルされたドライバのうちv0.8バージョンのみが正常にロードされましたが、カーソルがフリーズして動作しませんでした。 /var/log/XF86Free.0.log にエラーはありません。

したがって、私はXfree ftpサーバーのバイナリからXFreeをアップグレードすることにしました(SLES 9にはそのパッケージはありません)。これは完璧に動作し、今XFree 4.4.0ができました。また、4.4.0のソースコードをダウンロードし、ドライバを直接コンパイルしてみました。

追加のインクルードパスを追加し、3つの.defファイルと/usr/bin/revpathを予想されるパスにコピーした後、実際にv0.8.0をコンパイルできました! XFree86.0.logはロードされるドライバを正しく言及し、XFree4.4.0用にコンパイルされました。ただし、動作はプリコンパイルされたv0.8.0と同じです。エラーメッセージがなく、マウスが動かない。

興味深いことに、Imakeファイルをv0.8.8ソースにコピーし、追加のインクルード(+ .cファイルリストの調整)を追加して、私のデバイスの最新バージョンをコンパイルすることもできましたが、同じです。

INSTallファイルを見ると、DEBUG = yとLOG = yでコンパイルできることがわかりました。私はそれをやっていましたが、少なくとも/var/log/XFree86.0.logにいくつかの情報があります。文書の関連部分は次のとおりです。

(II) Module evtouch: vendor="Kenan Esau"
    compiled for 4.4.0, module version = 0.8.8
    Module class: XFree86 XInput Driver
    ABI class: XFree86 XInput driver, version 0.4

EVTouch: EVTouchPreInit
State: S_UNTOUCHED  Action: No Action       Button: 0
State: S_TOUCHED    Action: No Action       Button: 0
State: S_LONGTOUCHED    Action: down        Button: 1
State: S_MOVING Action: No Action       Button: 0
State: S_MAYBETAPPED    Action: click       Button: 1
State: S_ONEANDAHALFTAP Action: down        Button: 3
(**) Option "MinX" "0"
(**) Option "MaxX" "32767"
(**) Option "MinY" "0"
(**) Option "MaxY" "32767"
(**) Option "Emulate3Buttons"
(**) Option "Emulate3Timeout" "50"
(diff[0][0]/diff[0][1])=(0/0)
(diff[1][0]/diff[1][1])=(0/0)
(diff[2][0]/diff[2][1])=(0/0)
(diff[3][0]/diff[3][1])=(0/0)
(diff[4][0]/diff[4][1])=(0/0)
(diff[5][0]/diff[5][1])=(0/0)
(diff[6][0]/diff[6][1])=(0/0)
(diff[7][0]/diff[7][1])=(0/0)
(diff[8][0]/diff[8][1])=(0/0)
(**) Option "DeviceName" "touchscreen"
(**) Option "SendCoreEvents"
(**) touchscreen: always reports core events
(**) Option "CorePointer"
(**) touchscreen: Core Pointer
(**) Option "Protocol" "imps/2"
(**) Mouse[1]: Device: "/dev/mouse"
(**) Mouse[1]: Protocol: "imps/2"
(**) Option "CorePointer" "False"
(**) Option "Device" "/dev/mouse"
(**) Option "Buttons" "5"
(**) Mouse[1]: Emulate3Buttons, Emulate3Timeout: 50
(**) Option "ZAxisMapping" "4 5"
(**) Mouse[1]: ZAxisMapping: buttons 4 and 5
(**) Mouse[1]: Buttons: 5
(II) XINPUT: Adding extended input device "Mouse[1]" (type: MOUSE)
(II) XINPUT: Adding extended input device "touchscreen" (type: TOUCHSCREEN)
EVTouch: DeviceInit
EVTouch: Display X,Y: 1920 910
EVTouch: Virtual X,Y: 1920 910
EVTouch: DriverName, Rev.: vmware 657922
EVTouch: Viewport X0,Y0: 0 0
EVTouch: Viewport X1,Y1: 1919 909
EVTouch: MaxValue H,V: 0 0
EVTouch: DeviceInit btn_count=5
EVTouch: DeviceInit btn_count=5
(**) Option "Device" "/dev/input/event0"
EVTouch: DeviceOn
EVTouch: QueryHardware
(EE) touchscreen: Unable to grab device (Invalid argument).
EVTouch: DeviceOff

Imakefileの変更

XFREE_TOP = /home/kmf/Desktop/xc

#INCLUDES = -I. -I$(XF86COMSRC) -I$(XF86SRC)/loader -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86 \
#           -I$(SERVERSRC)/include -I$(SERVERSRC) -I$(XINCLUDESRC) -I$(EXTINCSRC) -I/home/kmf/Desktop/xc/include

INCLUDES = -I.  -I$(XFREE_TOP)/programs/Xserver/hw/xfree86/common \
        -I$(XFREE_TOP)/programs/Xserver/hw/xfree86/loader \
        -I$(XFREE_TOP)/programs/Xserver/hw/xfree86/os-support \
        -I$(XFREE_TOP)/programs/Xserver/hw/xfree86/os-support/bus \
        -I$(XFREE_TOP)/programs/Xserver/hw/xfree86/xf86cfg \
        -I$(XFREE_TOP)/programs/Xserver/randr \
        -I$(XFREE_TOP)/include \
        -I$(XFREE_TOP)/programs/Xserver/include \
        -I$(XFREE_TOP)/programs/Xserver/hw/xfree86 \
        -I$(XFREE_TOP)/exports/include/X11 -I$(XFREE_TOP)/include/extensions \
        -I/usr/X11R6/include

また、0.8.8用にコンパイルされます。

SRCS1 = evtouch.c libtouch.c
OBJS1 = evtouch.o libtouch.o

makeの出力は次のようになります。

rm -f ev_calibrate.o
gcc -m32 -O2 -fno-strength-reduce -fno-strict-aliasing -ansi -pedantic -Wall -Wpointer-arith -Wundef    -fno-merge-constants -I.  -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/common             -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/loader            -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/os-support           -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/os-support/bus               -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/xf86cfg           -I/home/kmf/Desktop/xc/programs/Xserver/randr           -I/home/kmf/Desktop/xc/include          -I/home/kmf/Desktop/xc/programs/Xserver/include                 -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86          -I/home/kmf/Desktop/xc/exports/include/X11 -I/home/kmf/Desktop/xc/include/extensions             -I/usr/X11R6/include  -I/home/kmf/Desktop/xc -I/home/kmf/Desktop/xc/exports/include   -Dlinux -D__i386__ -D_POSIX_C_SOURCE=199309L          -D_POSIX_SOURCE -D_XOPEN_SOURCE                          -D_BSD_SOURCE -D_SVID_SOURCE                             -D_GNU_SOURCE                           -DSHAPE -DXINPUT -DXKB -DLBX -DXAPPGROUP       -DXCSECURITY -DTOGCUP   -DXF86BIGFONT -DDPMSExtension         -DPIXPRIV -DPANORAMIX   -DRENDER -DRANDR -DGCCUSESGAS -DAVOID_GLYPHBLT -DPIXPRIV -DSINGLEDEPTH                                 -DXFreeXDGA -DXvExtension                               -DXFree86LOADER  -DXFree86Server                             -DXF86VIDMODE                           -DXvMCExtension                                 -DSMART_SCHEDULE                                -DBUILDDEBUG -DXResExtension                            -DX_BYTE_ORDER=X_LITTLE_ENDIAN -DNDEBUG   -DFUNCPROTO=15 -DNARROWPROTO  -DIN_MODULE -DXFree86Module   -ggdb -DEVDBG  -c ev_calibrate.c
ev_calibrate.c: In function `main':
ev_calibrate.c:185: warning: ISO C90 forbids variable-size array `xy_ring_buf'
ev_calibrate.c:357: warning: ordered comparison of pointer with integer zero
ev_calibrate.c:401: warning: ISO C forbids passing arg 3 of `pthread_create' between function pointer and `void *'
ev_calibrate.c:181: warning: unused variable `p_mtx_attr'
rm -f ev_calibrate
gcc -m32 -o ev_calibrate -O2 -fno-strength-reduce -fno-strict-aliasing -ansi -pedantic -Wall -Wpointer-arith -Wundef     -L/home/kmf/Desktop/xc/exports/lib   ev_calibrate.o -lXaw -lXmu -lXt -lSM -lICE -lXpm -lXext -lX11     -lpthread -L/usr/X11R6/lib -Wl,-rpath-link,/home/kmf/Desktop/xc/exports/lib
rm -f evtouch.o
gcc -m32 -O2 -fno-strength-reduce -fno-strict-aliasing -ansi -pedantic -Wall -Wpointer-arith -Wundef    -fno-merge-constants -I.  -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/common             -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/loader            -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/os-support           -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/os-support/bus               -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/xf86cfg           -I/home/kmf/Desktop/xc/programs/Xserver/randr           -I/home/kmf/Desktop/xc/include          -I/home/kmf/Desktop/xc/programs/Xserver/include                 -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86          -I/home/kmf/Desktop/xc/exports/include/X11 -I/home/kmf/Desktop/xc/include/extensions             -I/usr/X11R6/include  -I/home/kmf/Desktop/xc -I/home/kmf/Desktop/xc/exports/include   -Dlinux -D__i386__ -D_POSIX_C_SOURCE=199309L          -D_POSIX_SOURCE -D_XOPEN_SOURCE                          -D_BSD_SOURCE -D_SVID_SOURCE                             -D_GNU_SOURCE                           -DSHAPE -DXINPUT -DXKB -DLBX -DXAPPGROUP       -DXCSECURITY -DTOGCUP   -DXF86BIGFONT -DDPMSExtension         -DPIXPRIV -DPANORAMIX   -DRENDER -DRANDR -DGCCUSESGAS -DAVOID_GLYPHBLT -DPIXPRIV -DSINGLEDEPTH                                 -DXFreeXDGA -DXvExtension                               -DXFree86LOADER  -DXFree86Server                             -DXF86VIDMODE                           -DXvMCExtension                                 -DSMART_SCHEDULE                                -DBUILDDEBUG -DXResExtension                            -DX_BYTE_ORDER=X_LITTLE_ENDIAN -DNDEBUG   -DFUNCPROTO=15 -DNARROWPROTO  -DIN_MODULE -DXFree86Module   -ggdb -DEVDBG  -c evtouch.c
evtouch.c:84:1: warning: "DBG" redefined
In file included from evtouch.c:75:
/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/common/xf86Xinput.h:113:1: warning: this is the location of the previous definition
In file included from evtouch.c:95:
evtouch.h:33:21: warning: anonymous variadic macros were introduced in C99
evtouch.c: In function `emulate3Timer':
evtouch.c:201: warning: ISO C89 forbids mixed declarations and code
evtouch.c: In function `EVTouchProcessRel':
evtouch.c:355: warning: unused variable `dummy'
evtouch.c: In function `DeviceInit':
evtouch.c:590: warning: ISO C89 forbids mixed declarations and code
evtouch.c:605: warning: ISO C89 forbids mixed declarations and code
evtouch.c: In function `ReadInput':
evtouch.c:810: warning: `0' flag ignored with precision and `%x' printf format
evtouch.c:810: warning: `0' flag ignored with precision and `%x' printf format
evtouch.c: In function `ConvertProc':
evtouch.c:923: warning: ISO C89 forbids mixed declarations and code
evtouch.c:937: warning: implicit declaration of function `RRGetRotation'
evtouch.c:1080: warning: ISO C89 forbids mixed declarations and code
/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/common/compiler.h: At top level:
evtouch.c:753: warning: `EVTouchRead' defined but not used
rm -f libtouch.o
gcc -m32 -O2 -fno-strength-reduce -fno-strict-aliasing -ansi -pedantic -Wall -Wpointer-arith -Wundef    -fno-merge-constants -I.  -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/common             -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/loader            -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/os-support           -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/os-support/bus               -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86/xf86cfg           -I/home/kmf/Desktop/xc/programs/Xserver/randr           -I/home/kmf/Desktop/xc/include          -I/home/kmf/Desktop/xc/programs/Xserver/include                 -I/home/kmf/Desktop/xc/programs/Xserver/hw/xfree86          -I/home/kmf/Desktop/xc/exports/include/X11 -I/home/kmf/Desktop/xc/include/extensions             -I/usr/X11R6/include  -I/home/kmf/Desktop/xc -I/home/kmf/Desktop/xc/exports/include   -Dlinux -D__i386__ -D_POSIX_C_SOURCE=199309L          -D_POSIX_SOURCE -D_XOPEN_SOURCE                          -D_BSD_SOURCE -D_SVID_SOURCE                             -D_GNU_SOURCE                           -DSHAPE -DXINPUT -DXKB -DLBX -DXAPPGROUP       -DXCSECURITY -DTOGCUP   -DXF86BIGFONT -DDPMSExtension         -DPIXPRIV -DPANORAMIX   -DRENDER -DRANDR -DGCCUSESGAS -DAVOID_GLYPHBLT -DPIXPRIV -DSINGLEDEPTH                                 -DXFreeXDGA -DXvExtension                               -DXFree86LOADER  -DXFree86Server                             -DXF86VIDMODE                           -DXvMCExtension                                 -DSMART_SCHEDULE                                -DBUILDDEBUG -DXResExtension                            -DX_BYTE_ORDER=X_LITTLE_ENDIAN -DNDEBUG   -DFUNCPROTO=15 -DNARROWPROTO  -DIN_MODULE -DXFree86Module   -ggdb -DEVDBG  -c libtouch.c
rm -f evtouch_drv.o
gcc -m32 -nostdlib -r  evtouch.o libtouch.o -o evtouch_drv.o
rm -f /home/kmf/Desktop/xc/exports/lib/modules/input/evtouch_drv.o
+ cd /home/kmf/Desktop/xc/exports/lib/modules/input
+ ln -s ../../../..//home/kmf/Desktop/Evtouch/xf86-input-evtouch-0.8.8/evtouch_drv.o .

v0.8.8のCコード676行に構文エラーがあることに言及したいと思います。これを次のように変更しました(v0.8.6のドライバコードに基づいています)。

#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) == 2
        xf86InitValuatorAxisStruct(dev, 0, 0, priv->screen_width,
                                   1024,
                                   EV_AXIS_MIN_RES /* min_res */ ,
                                   EV_AXIS_MAX_RES /* max_res */ );
        xf86InitValuatorDefaults(dev, 0);
        xf86InitValuatorAxisStruct(dev, 1, 0, priv->screen_height,
                                   1024,
                                   EV_AXIS_MIN_RES /* min_res */ ,
                                   EV_AXIS_MAX_RES /* max_res */ );
        xf86InitValuatorDefaults(dev, 1);
#else
    xf86InitValuatorAxisStruct(dev, 0, priv->min_x, priv->max_x,
                               1024, //THIS LINE WAS MISSING
                                EV_AXIS_MIN_RES /* min_res */ , //THIS LINE WAS MISSING
                                EV_AXIS_MAX_RES /* max_res */ ); //THIS LINE WAS MISSING
        xf86InitValuatorDefaults(dev, 0); //THIS LINE WAS MISSING
        InitValuatorAxisStruct (dev, 1, priv->min_y, priv->max_y, //THIS LINE WAS MISSING
                                1024, //THIS LINE WAS MISSING
                                EV_AXIS_MIN_RES /* min_res */ , //THIS LINE WAS MISSING
                                EV_AXIS_MAX_RES /* max_res */ ); //THIS LINE WAS MISSING
xf86InitValuatorDefaults(dev, 1);
#endif

dmesgは最後に次のように報告します。

input: USB HID v0.01 Mouse [QEMU QEMU USB Tablet] on usb1:2.0
hid-core.c: v1.9.1 Andreas Gal, Vojtech Pavlik <[email protected]>
hid-core.c: USB HID support drivers
mtrr: type mismatch for fa000000,2000000 old: uncachable new: write-combining

エラーメッセージは次のとおりです。 (EE)タッチスクリーン:デバイスをキャッチできません(無効なパラメータ)。残念ながら、どのパラメータが実際に無効であるかについての情報はありません。 evtouch.cのコードを調べたところ、DeviceOn関数の次のインスタンスでエラーが発生したことがわかりました。

if (ioctl(local->fd, EVIOCGRAB, (void *)1))
    xf86Msg(X_ERROR, "%s: Unable to grab device (%s).\n", local->name, strerror(errno));

ここで EVIOCGRAB は次のように定義されます。

#ifndef EVIOCGRAB
#define EVIOCGRAB _IOW('E', 0x90, int)
#endif

私が見るにはlocal-> fdのいくつかのオプションはioctlを介して適用できないようです。さて、お客さんに提供される装備に問題があってちゃんと掴めないらしい気がし始めました…

これをどのように機能させるのですか?

ベストアンサー1

カーネル2.4を使用してSLES9で絶対ポインタサポートを取得できましたが、Evtouchではこれを実行できませんでした。

私が一つ見つけた解決策はここにあります、「非常に古いLinuxにはEvTouch USBタブレットがありません」セクションを参照してください。 「EvTouchをコンパイルできますが、EvTouchタブレットは「HID」(ヒューマンインターフェイスデバイス)として検出されます」で始まりますが、hidドライバはそれを認識しません。

まず、usbhidがそれを無視するように促すために、ブートパラメータを使用してSLESを起動しました。

usbhid.quirk=0x672:0x0001:0x4

動作しません。このページにはevtouch、vmmouse、wacomタブレットが記載されています。確認してみると、ディレクトリwacom.oに1つあります/usr/X11R6/lib/module/input。これは、2.4カーネルがwacomデバイスと互換性があることを願っています。

次の変更wacomを動作させるために必要:

  • 概要のvirt-manager最初の行を次のように変更します。

    <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
    
  • 下部に以下を追加します。

    <qemu:commandline>
        <qemu:arg value='-usb'/>
        <qemu:arg value='-device'/>
        <qemu:arg value='usb-wacom-tablet'/>
    </qemu:commandline>
    

-usbこのリンクに記載されていない追加のコンテンツがここにあることに注意してください。

ゲストで/dev/input/event0Xが停止すると(startupを使用init 3)、ガーベッジ出力が表示されます。
これには設定変更が必要です/etc/X11/XFree86

Section "InputDevice"
  Identifier "Tablet"
  Driver "wacom"
  Option "Device" "/dev/input/event0"
  Option "DeviceName" "Wacom"
  Option "Type" "stylus"
  Option "USB" "on"
  Option "Mode" "Absolute"
  Option "SendCoreEvents"
#  Option "AlwaysCore" "On"
#  Option "BottomX" "98"
#  Option "BottomY" "43"
#  Option "TopX" "940"
#  Option "TopY" "925"
EndSection

リンクも変更されましたが、ServerLayout次の変更をご利用ください。

Section "ServerLayout"
  Identifier   "Layout[all]"
  InputDevice  "Keyboard[0]" "CoreKeyboard"
  InputDevice  "Tablet" "CorePointer"
  Screen       "Screen[0]"
  Option       "Clone" "off"
  Option       "Xinerama" "off"
#  InputDevice  "Mouse[1]" "CorePointer"
EndSection

この設定ではうまくいくようです。

おすすめ記事