Ubuntuデスクトップ用にMaliit(https://wiki.maliit.org/Main_Page)仮想オンスクリーンキーボードを作成しましたが、付属のサンプルアプリで問題なく動作します。また、ウィジェットがフォーカスを引き継いだときにキーボードを表示する、独自のシンプルなQtサンプルアプリを作成することもできました。
現在、タッチスクリーンを使用してターゲットボード上で実行されている組み込みLinuxシステムに仮想キーボードを展開しようとしています。ターゲットボードにX11がインストールされておらず、QWS(-qws)を使用してかなりの数のQtアプリを実行しています。
Maliitアーキテクチャ(http://maliit.org/doc/framework/latest/architecture.html)では、サーバーインスタンスがアプリケーションと通信する必要があり、アプリケーションはQApplication::setInputContextを使用して入力コンテキストを設定します。
Ubuntuでは単純に次のようにします。
export QT_IM_MODULE=Maliit
maliit-server -software &
maliit-exampleapp-plainqt
そして、キーボードが表示され、すべてが機能します(X11を使用している場合)。
組み込みボードでは、1つのSSHセッションで実行します。
export QT_IM_MODULE=Maliit
dbus-launch --auto-syntax maliit-server -software -qws
そして、別のSSHセッション:
export QT_IM_MODULE=Maliit
source /find_dbus_address.sh
echo $DBUS_SESSION_BUS_ADDRESS
maliit-exampleapp-plainqt -qws
しかし、私は常にエラーが発生します:
QApplication::setInputContext: called with 0 input context
これは、サンプルアプリがメインで次の行で失敗していることを意味します。
// Workaround for lighthouse Qt
kit.setInputContext(QInputContextFactory::create("Maliit", &kit));
組み込みボードでの「ps」コマンドの出力は、次のようになります。
191 user 1692 S -sh
192 user 39608 S maliit-server -software -qws
196 user 2092 S /usr/bin/dbus-daemon --fork --print-pid 4 --print-address 6 --session
201 user 1692 R ps
そのため、サーバーはUbuntuのようにアクティブに実行されていませんが、「中断可能なスリープ」状態になっています。この状態でマウスは動きます。それでも0入力コンテキストエラーが発生します。
ここにバグがあります-> https://bugs.maliit.org/show_bug.cgi?id=185MaliitとのQWSが彼のために働いていると主張し、少なくとも彼は入力を見ることができます。
DBUSをバイパスすると思われるMaliitのモードもあり(ここを参照-> http://www.jonnor.com/2012/03/)、それでも「0入力コンテキスト」エラーが発生します。
だから私は自分の組み込みボードでやってみました:
export QT_IM_MODULE=MaliitDirect ; echo $QT_IM_MODULE ; maliit-exampleapp-embedded -qws
そして常に受け取る:
QApplication::setInputContext: called with 0 input context
Unable to embedded Maliit input method widget
私はUbuntu12.04デスクトップにQt4.8.2Embeddedを構築し、-qwsとサンプルアプリを使用してmaliit-serverを起動でき、QWSを使用して仮想キーボードが正常に機能していることを確認できます。プラグインとmaliit-frameworkの両方のgitリポジトリに最新のクローンを使用しています。
私の問題は、ターゲット上でARMボード用にコンパイルされた同じmaliit-serverとサンプルアプリを実行していることです。QApplication :: setInputContext:0入力コンテキストで呼び出されるというエラーが常に発生します。
DBUSdbus-monitorツールを使用して監視を行いました。最初にボードに対して1つのSSHセッションを開き、evaldbus-launch --auto-syntax
を実行して、DBUS_SESSION_BUSをコピーしました。次に、2つの新しいSSHセッションを開きました。
私がした最初のもので:
$ export DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-vVNCW9zP7e,guid=75ecd72645dfb9b4358048db506dfec
$ export QT_IM_MODULE=Maliit
$ maliit-server -software -qws
2番目のもので私はしました:
$ export DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-vVNCW9zP7e,guid=75ecd72645dfb9b4358048db506dfecb
$ export QT_IM_MODULE=Maliit
$ maliit-exampleapp-settings -qws
しかし、私はすぐに直面しています:
[9;0]QApplication::setInputContext: called with 0 input context
SettingsWidget::connected()
SettingsWidget::pluginSettingsReceived()
Setting layout QVariant(QString, "nemo-keyboard.qml:")
そして、dbus-monitorシェルで私は見ます:
desktop.DBus; member=NameOwnerChanged
string ":1.6"
string ""
string ":1.6"
method call sender=:1.6 -> dest=org.freedesktop.DBus serial=1 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=Hello
signal sender=org.freedesktop.DBus -> dest=(null destination) serial=8 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged
string "org.maliit.server"
string ""
string ":1.6"
method call sender=:1.6 -> dest=org.freedesktop.DBus serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=RequestName
string "org.maliit.server"
uint32 4
signal sender=org.freedesktop.DBus -> dest=(null destination) serial=9 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged
string ":1.7"
string ""
string ":1.7"
method call sender=:1.7 -> dest=org.freedesktop.DBus serial=1 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=Hello
method call sender=:1.7 -> dest=org.maliit.server serial=2 path=/org/maliit/server/address; interface=org.freedesktop.DBus.Properties; member=Get
string "org.maliit.Server.Address"
string "address"
method return sender=:1.6 -> dest=:1.7 reply_serial=2
variant string "unix:abstract=/tmp/maliit-server/dbus-CPgFHrxwAi,guid=dfc1dfc367a647e36e6e4c3c506e00db"
誰かがここで何が起こっているのかについての考えを持っていますか?DBUSはQInputContextFactoryの失敗と関係がありますか?何が失敗しているのか、なぜ入力コンテキストを設定できないのかについて、どういうわけかより多くの情報を得ることができますか?
ご協力ありがとうございました -