Source: qtbase-opensource-src Version: 5.15.8+dfsg-3 Severity: important Tags: patch upstream Forwarded: https://bugreports.qt.io/browse/QTBUG-43674
Hello, Currently, qt5 applications, when run in sudo, are not accessible to screen readers. This is because the accessibility layer does not manage to connect to the accessibility bus to export the application content: https://bugreports.qt.io/browse/QTBUG-43674 Most of the support was merged into qt5, but there is a little fix missing, that was missed by upstream. I have attached the fix, it is very simple: the ordering in QSpiAccessibleBridge::QSpiAccessibleBridge used to be - new DBusConnection() creates the dbusConnection object - the DBusConnection::DBusConnection constructor connects to the atspi bus - connect the enabledChanged signal and this patch changes it to: - new DBusConnection() creates the dbusConnection object - connect the enabledChanged signal - the DBusConnection::init method connects to the atspi bus This is needed in the root case because since in that case it cannot access the user session dbus, it uses a synchronous method, in which case the enabledChanged signal is emitted from the DBusConnection::DBusConnection constructor, and thus lost forever since it was not connected yet at that time. So we need to connect the signal before connecting to the atspi bus (and get the enabledChanged event). This is particularly important because the calamares installer is based on qt5 and runs as root, and it currently is completely inaccessible to blind users, and this fix makes it possible for blind users to use it. I have confirmed that this fixes the issue for bookworm, would it be possible to upload to unstable? I'll then handle requesting the unblock from the release team. Samuel -- System Information: Debian Release: 12.0 APT prefers testing APT policy: (990, 'testing'), (500, 'unstable-debug'), (500, 'testing-debug'), (500, 'stable-security'), (500, 'stable-debug'), (500, 'proposed-updates-debug'), (500, 'proposed-updates'), (500, 'oldstable-proposed-updates'), (500, 'oldoldstable'), (500, 'buildd-unstable'), (500, 'unstable'), (500, 'stable'), (500, 'oldstable'), (1, 'experimental-debug'), (1, 'buildd-experimental'), (1, 'experimental') Architecture: amd64 (x86_64) Foreign Architectures: i386, arm64 Kernel: Linux 6.2.0 (SMP w/8 CPU threads; PREEMPT) Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8), LANGUAGE not set Shell: /bin/sh linked to /usr/bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled
From: Frederik Gladhorn <frederik.gladh...@qt.io> Date: Tue, 12 Sep 2017 09:22:30 +0000 (+0200) Subject: Fix accessibility on XCB when running as root X-Git-Url: https://codereview.qt-project.org/gitweb?p=qt%2Fqtbase.git;a=commitdiff_plain;h=4ee3703ffaf063047285247016ee9e5c07ef3b53;hp=689606de91faecf91f1f92e8d355789d9be62d2f Forwarded: https://bugreports.qt.io/browse/QTBUG-43674 Fix accessibility on XCB when running as root Accessibility actually works when running applications as root, but we would never properly connect, since the enabledChanged signal would be emitted from the constructor in this case. Only applications running as root would be affected, because all other applications would go through the asynchronous pattern of getting the bus address from dbus instead. Since running apps as root won't let them access the session bus, the xatom is the way to go. [ChangeLog][QtGui][Accessibility] On XCB applications running as root are now accessible. Task-number: QTBUG-43674 Change-Id: I82cdc35f00693a8366dfcdab2f2c3c6dc5f5b783 --- --- src/platformsupport/linuxaccessibility/bridge.cpp | 1 + src/platformsupport/linuxaccessibility/dbusconnection.cpp | 8 ++++++++ src/platformsupport/linuxaccessibility/dbusconnection_p.h | 1 + 3 files changed, 10 insertions(+) --- a/src/platformsupport/linuxaccessibility/bridge.cpp +++ b/src/platformsupport/linuxaccessibility/bridge.cpp @@ -65,6 +65,7 @@ QSpiAccessibleBridge::QSpiAccessibleBrid { dbusConnection = new DBusConnection(); connect(dbusConnection, SIGNAL(enabledChanged(bool)), this, SLOT(enabledChanged(bool))); + dbusConnection->init(); } void QSpiAccessibleBridge::enabledChanged(bool enabled) --- a/src/platformsupport/linuxaccessibility/dbusconnection.cpp +++ b/src/platformsupport/linuxaccessibility/dbusconnection.cpp @@ -69,6 +69,14 @@ QT_BEGIN_NAMESPACE DBusConnection::DBusConnection(QObject *parent) : QObject(parent), m_a11yConnection(QString()), m_enabled(false) { +} + +/** + \internal + Connect to the accessibility dbus service. +*/ +void DBusConnection::init() +{ // Start monitoring if "org.a11y.Bus" is registered as DBus service. QDBusConnection c = QDBusConnection::sessionBus(); if (!c.isConnected()) { --- a/src/platformsupport/linuxaccessibility/dbusconnection_p.h +++ b/src/platformsupport/linuxaccessibility/dbusconnection_p.h @@ -67,6 +67,7 @@ class DBusConnection : public QObject public: DBusConnection(QObject *parent = nullptr); QDBusConnection connection() const; + void init(); bool isEnabled() const { return m_enabled; } Q_SIGNALS: