octahedron

LemとSKKとCommon Lispでたたかうプログラマのブログ

Linux版OneShotの終盤でファイルが開けない(ネタバレ注意)

 この記事は以下の記事の続きです。

octahedron.hatenablog.jp

 上の記事の内容も利用しているので、適宜参照ください。

 ストーリー終盤のギミックについての不具合対処記事なのでネタバレを含みます。ご注意を!!

あらまし

 OneShotをプレイしていますと、終盤でとあるギミックが登場します。「このファイルを開け!!」と言われるのですがそのファイルが開けないという問題です。終盤のなかなか先が気になる部分で止まってしまうのはいやなので、なんとしてでも動かそうと頑張った結果を記します。対処のおかげでちゃんとエンディングを迎えることができました。

環境情報

 これを行っている環境は以下です。

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.2 LTS"

発生現象

 OneShot終盤にて、the Authorから「Documents/OneShotにあるクローバーのプログラムを起動してからゲームを立ち上げるんだ」とメッセージを受け取ります。しかしこのファイル、いわゆる.desktopファイルなのですが、ダブルクリックしても無言のままでちっとも実行されません。まあ.desktopファイルなんてシンボリックリンクみたいなものなので「エディタで開いて実行ファイルのパスをもってきて実行」してみると、libpython.3.7m.soGLIBC問題で起動できず。

 では前の記事のようにして消してみると今度はPyQt5のバージョンがlibpython3.7m.soと合わない。それじゃあと.local/share/Steam/steamapp/common/OneShot/PyQt5を消してみると、なんか「PythonプログラムからPyQt5.QtCoreモジュールが見つからない」と出る。

 今回はこの対処法を探ってみます。

対処方法

1. OneShotディレクトリ内の共有ライブラリを削除

 基本的にはモジュールを差し替えて動かす方針なので、まずはapt等でpython3-pyqt5qt5dxcb-pluginを入れましょう(ほかにもあったかも)。その状態で以下の.soをリネームして(あるいは消して)無効にします。

./libQt5Core.so.5
./libQt5XcbQpa.so.5
./libQt5Widgets.so.5
./libQt5Gui.so.5
./libQt5DBus.so.5
./PyQt5/QtGui.so
./PyQt5/QtWidgets.so
./PyQt5/QtCore.so
./PyQt5/sip.so
./PyQt5/Qt/plugins
./libpython3.7m.so.1.0

2. インストールした共有ライブラリに向けてsymlinkを張る

 以下のライブラリについては.soの名前が異なるので、OneShotディレクトリ内にシンボリックリンクを張ります。

$ find . -type l -printf '%p -> %l\n'
./sip.so -> /usr/lib/python3/dist-packages/sip.cpython-36m-x86_64-linux-gnu.so
./PyQt5/QtGui.so -> /usr/lib/python3/dist-packages/PyQt5/QtGui.cpython-36m-x86_64-linux-gnu.so
./PyQt5/QtWidgets.so -> /usr/lib/python3/dist-packages/PyQt5/QtWidgets.cpython-36m-x86_64-linux-gnu.so
./PyQt5/sip.so -> /usr/lib/python3/dist-packages/sip.cpython-36m-x86_64-linux-gnu.so
./PyQt5/QtCore.so -> /usr/lib/python3/dist-packages/PyQt5/QtCore.cpython-36m-x86_64-linux-gnu.so
./libpython3.7.so -> /usr/lib/python3.7/config-3.7m-x86_64-linux-gnu/libpython3.7.so
./libpython3.7m.so.1.0 -> /usr/lib/python3.7/config-3.7m-x86_64-linux-gnu/libpython3.7m.so

3. Qtのプラグインパスを環境変数で指定して起動

 開く対象のファイルは________という名前の実行ファイルですが、こいつがQtのプラグインを触れるように指定して実行します。

$ QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms ./_______

 これで、続きを楽しめるはずです。ぼくはこの対処によってエンディングを迎えることができました。