Hi,
I'm getting a fatal X crash when I touch the screen with 3 or more fingers simultaneously.
When applying the touches sequentially there is no crash (I can get > 10 touches on the screen at once without issue).
I'm using geis advanced interface and have set up two subscriptions (on the same window ID & region):
1. 1 touch touch
2. 2 touch rotate
Although this crash happens when I only have 1 subscription for 1 touch touches.
This is the log from geis including the X crash (when only setting up 1 subscription):
(initialise phase)
GEIS(debug)-geis_register_backend:94 back end 0 registered as 'com.canonical.oif.backend.mock'
GEIS(debug)-geis_register_backend:94 back end 1 registered as 'com.canonical.oif.backend.dbus'
GEIS(debug)-geis_register_backend:94 back end 2 registered as 'com.canonical.oif.backend.grail'
GEIS(debug)-geis_backend_by_name:124 creating back end of class "com.canonical.oif.backend.grail"
GEIS(debug)-geis_register_gesture_class:1221 registering class "Drag" id 0
GEIS(debug)-geis_register_gesture_class:1221 registering class "Pinch" id 1
GEIS(debug)-geis_register_gesture_class:1221 registering class "Rotate" id 2
GEIS(debug)-geis_register_gesture_class:1221 registering class "Tap" id 15
GEIS(debug)-geis_register_gesture_class:1221 registering class "Touch" id 32
GEIS(debug)-geis_register_region:1471 registering region
GEIS(debug)-geis_register_gesture_class:1221 registering class "Flick" id 128
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 18 callback_info=0x1670170
GEIS(debug)-geis_register_device:1260 registering device "ELAN Touchscreen" id 50144
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x16612c0
GEIS(debug)-_input_event_handler:262 input event available
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x16612c0
GEIS(debug)-_input_event_handler:262 input event available
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x16612c0
GEIS(debug)-_input_event_handler:262 input event available
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x16612c0
GEIS(debug)-_input_event_handler:262 input event available
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x16612c0
GEIS(debug)-_input_event_handler:262 input event available
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x16612c0
GEIS(debug)-_input_event_handler:262 input event available
GEIS(debug)-geis_subscription_new:407 created subscription "1fingerGestures" id 0
GEIS(debug)-geis_backend_token_activate:63 called
GEIS(debug)-_geis_grail_activate_with_filters:2347 filter 0x83846a0 'Touch1Touch' matches ALL devices
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x16612c0
GEIS(debug)-_input_event_handler:262 input event available
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x16612c0
GEIS(debug)-_input_event_handler:262 input event available
GEIS(debug)-_geis_grail_filter_gestures:2091 mask=0x00000010 start=1 min=1 max=1
GEIS(debug)-_geis_grail_activate_for_device_region:2220 subscription='1fingerGestures' filter='Touch1Touch' device=50144 'ELAN Touchscreen' window=0x02a00001 ugsub=0x86d3f60
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 18 callback_info=0x1670170
GEIS(debug)-geis_register_device:1260 registering device "ELAN Touchscreen" id 50144
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x16612c0
GEIS(debug)-_input_event_handler:262 input event available
(initalise finished)
(now I tap the screen with 3 fingers)
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 17 callback_info=0x166fb10
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 18 callback_info=0x1670170
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 17 callback_info=0x166fb10
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 18 callback_info=0x1670170
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 17 callback_info=0x166fb10
X Error of failed request: BadAccess (attempt to access private resource denied)
Major opcode of failed request: 131 (XInputExtension)
Minor opcode of failed request: 53 ()
Serial number of failed request: 41
Current serial number in output stream: 43
GEIS(debug)-_subscription_destroy:425 destroying subscription "1fingerGestures" id 0
GEIS(debug)-geis_backend_token_deactivate:75 called
X Error of failed request: BadAccess (attempt to access private resource denied)
Major opcode of failed request: 131 (XInputExtension)
Minor opcode of failed request: 53 ()
Serial number of failed request: 42
Current serial number in output stream: 44
(end log)
I also get some Geis warnings that seem to be related to X when using the 2 finger gestures - I don't know if these issues are related.
Here is an example of a geis log with the warnings on executing a 2 finger gesture:
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 17 callback_info=0x166fa50
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 18 callback_info=0x16700a0
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 19 callback_info=0x169b5e0
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x1661200
GEIS(debug)-_input_event_handler:262 input event available
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x1661200
GEIS(debug)-_input_event_handler:262 input event available
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 17 callback_info=0x166fa50
GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 18 callback_info=0x16700a0
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 19 callback_info=0x169b5e0
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x1661200
GEIS(debug)-_input_event_handler:262 input event available
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x1661200
GEIS(debug)-_input_event_handler:262 input event available
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x1661200
GEIS(debug)-_input_event_handler:262 input event available
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x1661200
GEIS(debug)-_input_event_handler:262 input event available
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 17 callback_info=0x166fa50
GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
GEIS(warning)-_x11_fd_callback:1161 failed to get X generic event data
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 18 callback_info=0x16700a0
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 19 callback_info=0x169b5e0
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x1661200
GEIS(debug)-_input_event_handler:262 input event available
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x1661200
GEIS(debug)-_input_event_handler:262 input event available
GEIS(debug)-geis_backend_multiplexor_pump:411 activity 0x1 on fd 15 callback_info=0x1661200
Here is and overview of the code I'm using to initialise geis
(init:)
m_geisObject = geis_new(
GEIS_INIT_GRAIL_BACKEND,
GEIS_INIT_TRACK_DEVICES, // Report input devices
GEIS_INIT_TRACK_GESTURE_CLASSES, // Send gesture class events
GEIS_INIT_NO_ATOMIC_GESTURES, // Disable geis v1 style atomic gestures
nullptr);
if (geis_get_configuration(m_geisObject, GEIS_CONFIGURATION_FD, &m_geisFd) != GEIS_STATUS_SUCCESS)
{
LOG4CXX_ERROR(m_logger, "error retrieving GEIS fd");
}
geis_register_event_callback(m_geisObject, &GeisHelpersAdv::eventCallback, this);
geis_register_class_callback(m_geisObject, &GeisHelpersAdv::eventCallback, this);
geis_register_device_callback(m_geisObject, &GeisHelpersAdv::eventCallback, this);
(init complete callback:)
sub = geis_subscription_new(m_geisObject, "1fingerGestures", GEIS_SUBSCRIPTION_CONT)
filter = geis_filter_new(m_geisObject, "Touch1Touch");
geis_filter_add_term(
filter,
GEIS_FILTER_REGION,
GEIS_REGION_ATTRIBUTE_WINDOWID,
GEIS_FILTER_OP_EQ,
windowid,
nullptr);
geis_filter_add_term(
filter,
GEIS_FILTER_CLASS,
GEIS_CLASS_ATTRIBUTE_NAME, GEIS_FILTER_OP_EQ, GEIS_GESTURE_TOUCH,
GEIS_GESTURE_ATTRIBUTE_TOUCHES, GEIS_FILTER_OP_EQ, 1,
nullptr);
geis_subscription_add_filter(sub, filter)
geis_subscription_activate(sub)
Can anyone help me on this issue? Does geis fully support X? Is there another window manager that works better with Geis?
Let me know if any more details are needed.
Thanks in advance,
Amit