Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Linux Nativeビルドで動作しない #2

Open
KisaragiEffective opened this issue Nov 10, 2022 · 6 comments
Open

Linux Nativeビルドで動作しない #2

KisaragiEffective opened this issue Nov 10, 2022 · 6 comments
Labels
enhancement New feature or request

Comments

@KisaragiEffective
Copy link

KisaragiEffective commented Nov 10, 2022

Proton経由だと正常に動作したのですが、Linux Nativeビルドだと日本語入力ができないようです。

情報

MODのバージョン:1.0.0
ログ:deb11-v4 - 2022.1.28.1335 - 2022-11-10 19_19_31.log

@hantabaru1014
Copy link
Owner

@KisaragiEffective
動作テスト、報告ありがとうございます!

一応、確認なんですけど、日本語入力ができないというのは、未確定文字が表示されないというだけで、変換を確定すれば入力自体はできてますか?(つまり、このModを入れていない状態ではProton経由と同様の動作をしますか?)

ログを見る限り、アセンブリのロードとパッチは問題なさそうなので、現在の未確定文字を通知してくるUnity.InputSystemのAPI が上手く動いてなさそうです。
ただ、詳しくはログの内容が足りてないので、ログを増やしたデバッグ用バージョンを用意しました。

NeosBetterIMESupport_v1.0.1-debug.zip

お手すきの際に実行、ログの添付をお願いします。

(このModはもともと、WindowsのAPI使ってIMEと連携するつもりで作り始めたので、windowsのみに対応するつもりだったのですが、UnityのAPIだけでv1.0.0の動作は実現できたので、win以外でも動くかと少し期待していたのですが、ダメそうだったら申し訳ないのですが、私の方ではlinux nativeの対応はしばらく諦めようと思います... もちろんPR等歓迎です!)

@hantabaru1014 hantabaru1014 self-assigned this Nov 10, 2022
@hantabaru1014 hantabaru1014 added the bug Something isn't working label Nov 10, 2022
@KisaragiEffective
Copy link
Author

帰ってきたのでやります

@KisaragiEffective
Copy link
Author

KisaragiEffective commented Nov 11, 2022

日本語入力ができないというのは、未確定文字が表示されないというだけで、変換を確定すれば入力自体はできてますか?

入力自体できません。キーをタイプするとアルファベットが入力されてしまいます。

Modを入れていない状態ではProton経由と同様の動作をしますか?

いいえ(ログ:deb11-v4 - 2022.1.28.1335 - 2022-11-11 19_32_38.log)。

お手すきの際に実行、ログの添付をお願いします。

deb11-v4 - 2022.1.28.1335 - 2022-11-11 19_37_28.log

でできていますでしょうか?

@hantabaru1014
Copy link
Owner

入力自体できません。キーをタイプするとアルファベットが入力されてしまいます。

なんと...
入力自体ができないのは想定してなかったです。それはこのMod以前の問題ですね。(ただ、確かにこのModで対応したい事項)
明らかにそれが原因なので、原因を調査して対応する必要があります。
(私はNeosがまともに動きそうなLinux Desktopの環境を用意するのが難しいので対応難しいです。。。)

でできていますでしょうか?

できてます。ありがとうございます!

@hantabaru1014 hantabaru1014 added enhancement New feature or request and removed bug Something isn't working labels Nov 11, 2022
@hantabaru1014 hantabaru1014 removed their assignment Nov 11, 2022
@KisaragiEffective
Copy link
Author

簡単に調査したところ、Unity側に実装されていないので機能しないようです1233によると、次の付記があったためUnity側のサポートは当面の間ないでしょう(NeosVRが内部的に使用しているUnityのバージョンがアップデートされない限り)。

Resolution Note (2022.1.X):

We want to support IME input on Linux in the future. Presently, this is not supported.

Footnotes

  1. https://forum.unity.com/threads/bug-unity-for-linux-doesnt-recognize-ibus-mozc-ime-and-i-cant-input-japanese-in-unity-for-linux.1133476/

  2. https://forum.unity.com/threads/unity-linux-inputfiled-ime-issue.1026481/

  3. https://issuetracker.unity3d.com/issues/linux-japanese-characters-can-not-be-entered-anywhere-in-the-editor-when-using-japanese-mozc 2

@iamgreaser
Copy link

( GreaseMonkeyです。 )
IMEではLinuxとWindowsは全然違いますね。
以下はUnityでLinuxのIMEのサポートを参加の方です。

( 全編集のために、これは便利ですかな: https://zenn.dev/sthairno/articles/cd0ea916f45580 )


Here are the necessary changes for basic support.
The following code has been written in C, not C#.

基本的なサポートに必要な変更は次のとおりです。
次のコードは、C# ではなく C で記述されています。


Make sure this happens once, before anything calls XOpenIM():

何かが XOpenIM() を呼び出す前に、これが 1 回発生することを確認し:

if (XSupportsLocale()) {
    XSetLocaleModifiers("");
}

Replace all calls to XFilterEvent(display, ...) with a single XFilterEvent(display, None) call:

XFilterEvent(display, ...) へのすべての呼び出しを単一の XFilterEvent(display, None) 呼び出しに置き換え:

int events_queued = XEventsQueued(display, QueuedAfterFlush);
for (int i = 0; i < events_queued; i++) {
    XEvent event;
    XNextEvent(display, &event);
    if (XFilterEvent(display, None) == True) {
        continue;
    }

    ... other code happens here - but none of it will call XFilterEvent() ...
}

When Unity calls Xutf8LookupString(), it needs to be told to iterate over every character in the string.
Currently it only reads the first character.

Unity が Xutf8LookupString() を呼び出すとき、文字列内のすべての文字を繰り返すように指示する必要があります。
現在、最初の文字だけを読み取ります。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants