2

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の失敗と関係がありますか?何が失敗しているのか、なぜ入力コンテキストを設定できないのかについて、どういうわけかより多くの情報を得ることができますか?

ご協力ありがとうございました -

4

1 に答える 1

3

信じられないほど簡単な修正です。次のように QT_PLUGIN_PATH を設定するだけです。

export QT_PLUGIN_PATH=/home/user/plugins
于 2012-10-09T13:03:10.173 に答える