Files

2.3 KiB

LiveTraffic Steam Fix (X-Plane 12, Linux)

Naprawia problem z ładowaniem wtyczki LiveTraffic w wersji X-Plane 12 ze Steam na Linuxie.

Problem

Steam Linux Runtime „przypina" (pinuje) własny, stary libcurl.so.4 (wersja 4.2.0), który eksportuje tylko symbol CURL_OPENSSL_3. LiveTraffic jest zbudowany przeciw nowszemu libcurl (CURL_OPENSSL_4) i wymaga też libssl.so.3 / libcrypto.so.3.

Efekt w Log.txt:

dlerror: .../SteamLinuxRuntime/var/steam-runtime/pinned_libs_64/libcurl.so.4:
  version `CURL_OPENSSL_4' not found
  (required by .../LiveTraffic/lin_x64/LiveTraffic.xpl)

i wtyczka nie jest ładowana (nie pojawia się w menu Plugins).

To samo dotyczy innych wtyczek zbudowanych przeciw nowemu libcurl (np. plugin REP dla Cessny — SimCoders).

Dlaczego to się dzieje

Steam Runtime v1 („scout") jest zgodny z Ubuntu 12.04, więc musi używać starego ABI libcurl. To potwierdzone przez Valve — nie da się tego obejść opcjami uruchamiania (STEAM_RUNTIME_USE_LIBCURL_SHIM ani przełączeniem runtime'u na soldier).

Rozwiązanie

Kopiujemy systemowy libcurl + wszystkie jego zależności do katalogu wtyczki i ustawiamy RPATH=$ORIGIN/lib, dzięki czemu wtyczka ładuje własne, nowe biblioteki niezależnie od Steam Runtime.

Użycie

./fix-livetraffic.sh [/ścieżka/do/X-Plane 12]

Domyślnie skrypt zakłada ścieżkę /mnt/nvme_data/SteamLibrary/steamapps/common/X-Plane 12. Możesz podać własną jako argument.

Wymagania:

  • patchelf (pacman -S patchelf)
  • systemowy libcurl 4.8+ z libssl.so.3 (Arch Linux / nowoczesny Linux)

Co robi skrypt

  1. Backup LiveTraffic.xpl → LiveTraffic.xpl.bak.
  2. Kopiuje libcurl.so.4 + 21 zależności z /usr/lib do LiveTraffic/lin_x64/lib/.
  3. Ustawia RPATH=$ORIGIN na wszystkich skopiowanych bibliotekach.
  4. Ustawia RPATH=$ORIGIN/lib na LiveTraffic.xpl.

Weryfikacja

Po uruchomieniu X-Plane w Log.txt szukaj:

Loaded: .../LiveTraffic/lin_x64/LiveTraffic.xpl

(zamiast dlerror).

Uwagi

  • Skrypt jest idempotentny — można go uruchomić wielokrotnie (backup robi tylko raz).
  • Po aktualizacji systemu (nowszy libcurl) uruchom skrypt ponownie, żeby odświeżyć biblioteki.
  • Nie wrzucamy binarek .so do tego repo — są zależne od wersji systemu.