diff --git a/app/src/main/app/shell/UnifiedActivityDrawer.kt b/app/src/main/app/shell/UnifiedActivityDrawer.kt
index 4d4703032..d6ab89976 100644
--- a/app/src/main/app/shell/UnifiedActivityDrawer.kt
+++ b/app/src/main/app/shell/UnifiedActivityDrawer.kt
@@ -166,6 +166,7 @@ import com.winlator.cmod.feature.setup.SetupWizardActivity
import com.winlator.cmod.feature.library.LibraryItemType
import com.winlator.cmod.feature.library.LinuxApps
import com.winlator.cmod.runtime.linux.LinuxClientInstaller
+import com.winlator.cmod.runtime.linux.LinuxRuntime
import com.winlator.cmod.feature.shortcuts.LibraryShortcutUtils
import com.winlator.cmod.feature.shortcuts.LibraryShortcutArtwork
import com.winlator.cmod.feature.artwork.SteamArtworkScraper
@@ -816,7 +817,7 @@ internal fun UnifiedActivity.AddCustomGameDialog(
isAdding = true
scope.launch(Dispatchers.IO) {
val container = LinuxApps.gamescopeContainer(ContainerManager(context))
- if (container == null) {
+ if (container == null || !LinuxRuntime.isInstalled(context)) {
// The entry lives in the GameScope container, which the Linux Client install creates.
withContext(Dispatchers.Main) {
isAdding = false
diff --git a/app/src/main/app/shell/UnifiedActivityHub.kt b/app/src/main/app/shell/UnifiedActivityHub.kt
index 5f34da8f1..4be1af74e 100644
--- a/app/src/main/app/shell/UnifiedActivityHub.kt
+++ b/app/src/main/app/shell/UnifiedActivityHub.kt
@@ -351,10 +351,13 @@ internal fun UnifiedActivity.UnifiedHub() {
val context = LocalContext.current
var showLinuxClient by rememberSaveable { mutableStateOf(false) }
val linuxClient by LinuxClientInstaller.state.collectAsState()
- // An install finishing adds the Steam entry, which the Library has to read again to show.
+ val linuxClientWasWorking = remember { booleanArrayOf(false) }
+ // An install finishing adds the Steam entry, and an uninstall removes it; the Library reads it again.
LaunchedEffect(linuxClient) {
val found = linuxClient
- if (found is LinuxClientInstaller.State.Installed) localLibraryRefreshKey++
+ val removed = linuxClientWasWorking[0] && found is LinuxClientInstaller.State.Missing
+ linuxClientWasWorking[0] = found is LinuxClientInstaller.State.Working
+ if (found is LinuxClientInstaller.State.Installed || removed) localLibraryRefreshKey++
// A newer runtime is put in front of the user once; after that it waits in Stores.
if (found is LinuxClientInstaller.State.UpdateAvailable && found.isNews) {
LinuxClientInstaller.dismissUpdate(context, found)
@@ -1244,6 +1247,7 @@ internal fun UnifiedActivity.UnifiedHub() {
state = linuxClient,
onStart = { LinuxClientInstaller.start(context) },
onCancelInstall = { LinuxClientInstaller.cancel() },
+ onUninstall = { LinuxClientInstaller.uninstall(context) },
onDismiss = { showLinuxClient = false },
)
}
diff --git a/app/src/main/app/shell/UnifiedActivityStartup.kt b/app/src/main/app/shell/UnifiedActivityStartup.kt
index 8c63aa5d9..7e9d0e268 100644
--- a/app/src/main/app/shell/UnifiedActivityStartup.kt
+++ b/app/src/main/app/shell/UnifiedActivityStartup.kt
@@ -413,9 +413,8 @@ internal fun UnifiedActivity.bootstrapStartupState() {
// The Steam entry's artwork is redrawn here as well as at container creation, so an
// install made by an earlier build picks up the current one.
runCatching {
- val manager = ContainerManager(appContext)
- LinuxApps.gamescopeContainer(manager)?.let { LinuxApps.ensureSteamShortcut(appContext, it) }
if (LinuxRuntime.isInstalled(appContext)) {
+ LinuxApps.gamescopeContainer(ContainerManager(appContext))?.let { LinuxApps.ensureSteamShortcut(appContext, it) }
LinuxSteamLibrary.adoptClientInstalls(appContext, LinuxRuntime.rootDir(appContext))
}
}.onFailure { Log.w("UnifiedActivity", "Could not refresh the Steam entries", it) }
diff --git a/app/src/main/feature/settings/stores/LinuxClientDialog.kt b/app/src/main/feature/settings/stores/LinuxClientDialog.kt
index fc925fa45..981de775e 100644
--- a/app/src/main/feature/settings/stores/LinuxClientDialog.kt
+++ b/app/src/main/feature/settings/stores/LinuxClientDialog.kt
@@ -10,10 +10,15 @@ import androidx.compose.foundation.layout.widthIn
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.ArrowDownward
import androidx.compose.material.icons.outlined.CheckCircle
+import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
+import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
@@ -36,6 +41,7 @@ import com.winlator.cmod.shared.ui.nav.PaneNavRegistry
private val InstallBlue = Color(0xFF1A9FFF)
private val InstalledGreen = Color(0xFF3FB950)
+private val UninstallRed = Color(0xFFFF7A88)
private val DialogTextPrimary = Color(0xFFF0F4FF)
private val DialogTextSecondary = Color(0xFF93A6BC)
@@ -49,32 +55,65 @@ internal fun LinuxClientDialog(
state: State,
onStart: () -> Unit,
onCancelInstall: () -> Unit,
+ onUninstall: () -> Boolean,
onDismiss: () -> Unit,
) {
val nav = remember { PaneNavRegistry() }
val installed = state is State.Installed
- val accent = if (installed) InstalledGreen else InstallBlue
+ var confirming by rememberSaveable { mutableStateOf(false) }
+ var sessionRunning by rememberSaveable { mutableStateOf(false) }
+ val confirm = confirming && installed
+ val accent =
+ when {
+ confirm -> UninstallRed
+ installed -> InstalledGreen
+ else -> InstallBlue
+ }
Dialog(onDismissRequest = onDismiss) {
DialogPaneNav(nav, onDismiss = onDismiss)
CompositionLocalProvider(LocalPaneNav provides nav) {
PopupDialog(
title = stringResource(R.string.linux_client_title),
- message = linuxClientMessage(state),
- icon = if (installed) Icons.Outlined.CheckCircle else Icons.Outlined.ArrowDownward,
+ message =
+ when {
+ confirm && sessionRunning -> stringResource(R.string.linux_client_uninstall_session_running)
+ confirm -> stringResource(R.string.linux_client_uninstall_message)
+ else -> linuxClientMessage(state)
+ },
+ icon =
+ when {
+ confirm -> Icons.Outlined.Delete
+ installed -> Icons.Outlined.CheckCircle
+ else -> Icons.Outlined.ArrowDownward
+ },
accentColor = accent,
modifier = Modifier.widthIn(min = 300.dp, max = 420.dp),
content = {
if (state is State.Working) WorkingBody(state)
},
footer = {
- LinuxClientFooter(
- state = state,
- accent = accent,
- onStart = onStart,
- onCancelInstall = onCancelInstall,
- onDismiss = onDismiss,
- )
+ if (confirm) {
+ UninstallFooter(
+ onCancel = {
+ confirming = false
+ sessionRunning = false
+ },
+ onUninstall = {
+ sessionRunning = !onUninstall()
+ if (!sessionRunning) confirming = false
+ },
+ )
+ } else {
+ LinuxClientFooter(
+ state = state,
+ accent = accent,
+ onStart = onStart,
+ onCancelInstall = onCancelInstall,
+ onUninstall = { confirming = true },
+ onDismiss = onDismiss,
+ )
+ }
},
)
}
@@ -111,6 +150,7 @@ internal fun linuxClientStageLabel(stage: Stage): Int =
Stage.DOWNLOAD_STEAM -> R.string.linux_client_stage_download_steam
Stage.INSTALL_STEAM -> R.string.linux_client_stage_install_steam
Stage.LIBRARY -> R.string.linux_client_stage_library
+ Stage.UNINSTALL -> R.string.linux_client_stage_uninstall
}
@Composable
@@ -154,18 +194,21 @@ private fun LinuxClientFooter(
accent: Color,
onStart: () -> Unit,
onCancelInstall: () -> Unit,
+ onUninstall: () -> Unit,
onDismiss: () -> Unit,
) {
- // The last step writes the container in one go and cannot be stopped part way.
- val single = state is State.Installed || (state is State.Working && state.stage == Stage.LIBRARY)
+ // The last step writes the container in one go, and an uninstall deletes; neither stops part way.
+ val single = state is State.Working && (state.stage == Stage.LIBRARY || state.stage == Stage.UNINSTALL)
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = if (single) Arrangement.End else Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically,
) {
when (state) {
- State.Installed ->
+ State.Installed -> {
+ PopupTextAction(stringResource(R.string.common_ui_uninstall), UninstallRed, onUninstall)
PopupTextAction(stringResource(R.string.common_ui_ok), accent, onDismiss, isEntry = true)
+ }
is State.Working -> {
if (!single) {
PopupTextAction(stringResource(R.string.common_ui_cancel), DialogTextSecondary, onCancelInstall)
@@ -187,3 +230,18 @@ private fun LinuxClientFooter(
}
}
}
+
+@Composable
+private fun UninstallFooter(
+ onCancel: () -> Unit,
+ onUninstall: () -> Unit,
+) {
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.SpaceBetween,
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ PopupTextAction(stringResource(R.string.common_ui_cancel), DialogTextSecondary, onCancel, isEntry = true)
+ PopupTextAction(stringResource(R.string.common_ui_uninstall), UninstallRed, onUninstall)
+ }
+}
diff --git a/app/src/main/feature/settings/stores/StoresScreen.kt b/app/src/main/feature/settings/stores/StoresScreen.kt
index 91693b6c8..caac4b8dc 100644
--- a/app/src/main/feature/settings/stores/StoresScreen.kt
+++ b/app/src/main/feature/settings/stores/StoresScreen.kt
@@ -178,6 +178,7 @@ fun StoresScreen(
LinuxClientInstaller.cancel()
linuxClientDialog = false
},
+ onUninstall = { LinuxClientInstaller.uninstall(context) },
onDismiss = { linuxClientDialog = false },
)
}
diff --git a/app/src/main/res/values-b+es+419/strings.xml b/app/src/main/res/values-b+es+419/strings.xml
index c1962e622..44a447bfb 100644
--- a/app/src/main/res/values-b+es+419/strings.xml
+++ b/app/src/main/res/values-b+es+419/strings.xml
@@ -271,6 +271,9 @@
El cliente de Steam para Linux aún se está instalando. Inténtalo de nuevo cuando termine.
Hay un entorno de Linux más reciente. Al actualizar se conservan tu sesión de Steam, los juegos instalados, las partidas guardadas y los contenedores.
Hay una sesión de Linux en curso. Ciérrala y luego actualiza.
+ Al desinstalar se elimina el entorno Linux con el cliente de Steam, su inicio de sesión y Proton, y los juegos y partidas guardadas que contiene. Los juegos de tus otras bibliotecas de Steam siguen instalados.
+ Hay una sesión de Linux en curso. Ciérrala y luego desinstala.
+ Desinstalando el cliente de Linux
The Linux client draws with the Turnip Vulkan driver, which needs an Adreno GPU. This device has a different GPU.
The display driver of the Linux client is not installed, so the screen would stay black. Install it with Linux Client in Settings > Stores.
La sesión de Linux se detuvo apenas inició. Su registro está en Configuración > Depuración > Abrir administrador de registros; compártelo para que se pueda encontrar la causa.
diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml
index 2e2541794..59da7efcd 100644
--- a/app/src/main/res/values-da/strings.xml
+++ b/app/src/main/res/values-da/strings.xml
@@ -270,6 +270,9 @@
Linux Steam-klienten installeres stadig. Prøv igen, når den er færdig.
Et nyere Linux-miljø er tilgængeligt. Opdateringen bevarer dit Steam-login, installerede spil, gemte spil og containere.
En Linux-session kører. Afslut den, og opdater derefter.
+ Afinstallation fjerner Linux-miljøet med Steam-klienten, dens login og Proton samt de spil og gemte data, der ligger i det. Spil i dine andre Steam-biblioteker forbliver installeret.
+ En Linux-session kører. Afslut den, og afinstaller derefter.
+ Afinstallerer Linux-klienten
The Linux client draws with the Turnip Vulkan driver, which needs an Adreno GPU. This device has a different GPU.
The display driver of the Linux client is not installed, so the screen would stay black. Install it with Linux Client in Settings > Stores.
Linux-sessionen stoppede, så snart den startede. Dens log ligger under Indstillinger > Fejlfinding > Åbn loghåndtering; del den, så årsagen kan findes.
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 31ebf950f..d105b3125 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -270,6 +270,9 @@
Der Linux-Steam-Client wird noch installiert. Versuche es nach Abschluss erneut.
Eine neuere Linux-Laufzeitumgebung ist verfügbar. Beim Aktualisieren bleiben Steam-Anmeldung, installierte Spiele, Spielstände und Container erhalten.
Eine Linux-Sitzung läuft. Beende sie und aktualisiere dann.
+ Die Deinstallation entfernt die Linux-Laufzeit samt Steam-Client, Anmeldung und Proton sowie die darin gespeicherten Spiele und Spielstände. Spiele in deinen anderen Steam-Bibliotheken bleiben installiert.
+ Eine Linux-Sitzung läuft. Beende sie und deinstalliere dann.
+ Linux-Client wird deinstalliert
The Linux client draws with the Turnip Vulkan driver, which needs an Adreno GPU. This device has a different GPU.
The display driver of the Linux client is not installed, so the screen would stay black. Install it with Linux Client in Settings > Stores.
Die Linux-Sitzung wurde sofort nach dem Start beendet. Ihr Protokoll liegt unter Einstellungen > Debug > Protokollverwaltung öffnen; teile es, damit die Ursache gefunden werden kann.
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index b9ce46b16..5e5390d41 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -270,6 +270,9 @@
El cliente de Steam para Linux aún se está instalando. Inténtalo de nuevo cuando termine.
Hay un entorno de Linux más reciente. Al actualizar se conservan tu sesión de Steam, los juegos instalados, las partidas guardadas y los contenedores.
Hay una sesión de Linux en curso. Ciérrala y luego actualiza.
+ Al desinstalar se elimina el entorno Linux con el cliente de Steam, su inicio de sesión y Proton, y los juegos y partidas guardadas que contiene. Los juegos de tus otras bibliotecas de Steam siguen instalados.
+ Hay una sesión de Linux en curso. Ciérrala y luego desinstala.
+ Desinstalando el cliente de Linux
The Linux client draws with the Turnip Vulkan driver, which needs an Adreno GPU. This device has a different GPU.
The display driver of the Linux client is not installed, so the screen would stay black. Install it with Linux Client in Settings > Stores.
La sesión de Linux se detuvo nada más iniciarse. Su registro está en Ajustes > Depuración > Abrir gestor de registros; compártelo para que se pueda encontrar la causa.
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index c061ff497..f41a180f5 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -271,6 +271,9 @@
Linux Steam -asiakasta asennetaan yhä. Yritä uudelleen, kun asennus on valmis.
Uudempi Linux-ympäristö on saatavilla. Päivitys säilyttää Steam-kirjautumisen, asennetut pelit, tallennukset ja säiliöt.
Linux-istunto on käynnissä. Sulje se ja päivitä sitten.
+ Asennuksen poisto poistaa Linux-ympäristön Steam-asiakkaineen, kirjautumisineen ja Protoneineen sekä sen sisällä olevat pelit ja tallennukset. Muiden Steam-kirjastojesi pelit pysyvät asennettuina.
+ Linux-istunto on käynnissä. Sulje se ja poista asennus sitten.
+ Poistetaan Linux-asiakasta
The Linux client draws with the Turnip Vulkan driver, which needs an Adreno GPU. This device has a different GPU.
The display driver of the Linux client is not installed, so the screen would stay black. Install it with Linux Client in Settings > Stores.
Linux-istunto pysähtyi heti käynnistyttyään. Sen loki on kohdassa Asetukset > Virheenkorjaus > Avaa lokien hallinta; jaa se, jotta syy löytyy.
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index aa08dd23e..076754d66 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -270,6 +270,9 @@
Le client Steam Linux est encore en cours d\'installation. Réessayez une fois terminé.
Un environnement Linux plus récent est disponible. La mise à jour conserve votre connexion Steam, vos jeux installés, vos sauvegardes et vos conteneurs.
Une session Linux est en cours. Quittez-la, puis mettez à jour.
+ La désinstallation supprime l\'environnement Linux avec le client Steam, sa connexion et Proton, ainsi que les jeux et sauvegardes qu\'il contient. Les jeux de vos autres bibliothèques Steam restent installés.
+ Une session Linux est en cours. Quittez-la, puis désinstallez.
+ Désinstallation du client Linux
The Linux client draws with the Turnip Vulkan driver, which needs an Adreno GPU. This device has a different GPU.
The display driver of the Linux client is not installed, so the screen would stay black. Install it with Linux Client in Settings > Stores.
La session Linux s’est arrêtée dès son démarrage. Son journal se trouve dans Paramètres > Débogage > Ouvrir le gestionnaire des journaux ; partagez-le pour que la cause puisse être trouvée.
diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml
index e1793752b..7147e292b 100644
--- a/app/src/main/res/values-hi/strings.xml
+++ b/app/src/main/res/values-hi/strings.xml
@@ -268,6 +268,9 @@
Linux Steam क्लाइंट अभी इंस्टॉल हो रहा है। पूरा होने पर फिर से प्रयास करें।
नया Linux रनटाइम उपलब्ध है। अपडेट करने पर आपका Steam साइन-इन, इंस्टॉल किए गए गेम, सेव और कंटेनर बने रहते हैं।
एक Linux सत्र चल रहा है। उसे बंद करें, फिर अपडेट करें।
+ अनइंस्टॉल करने से Steam क्लाइंट, उसका साइन-इन और Proton सहित Linux रनटाइम, और उसमें रखे गेम और सेव हट जाते हैं। आपकी अन्य Steam लाइब्रेरी के गेम इंस्टॉल रहते हैं।
+ एक Linux सत्र चल रहा है। उसे बंद करें, फिर अनइंस्टॉल करें।
+ Linux क्लाइंट अनइंस्टॉल हो रहा है
The Linux client draws with the Turnip Vulkan driver, which needs an Adreno GPU. This device has a different GPU.
The display driver of the Linux client is not installed, so the screen would stay black. Install it with Linux Client in Settings > Stores.
Linux सत्र शुरू होते ही रुक गया। इसका लॉग सेटिंग्स > डीबग > लॉग मैनेजर खोलें में है; कारण पता करने के लिए इसे साझा करें।
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 33a95a4fd..35552b7a3 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -270,6 +270,9 @@
Il client Steam per Linux è ancora in installazione. Riprova al termine.
È disponibile un ambiente Linux più recente. L\'aggiornamento mantiene l\'accesso a Steam, i giochi installati, i salvataggi e i container.
È in corso una sessione Linux. Chiudila, poi aggiorna.
+ La disinstallazione rimuove l\'ambiente Linux con il client Steam, il suo accesso e Proton, e i giochi e i salvataggi al suo interno. I giochi nelle altre librerie di Steam restano installati.
+ È in corso una sessione Linux. Chiudila, poi disinstalla.
+ Disinstallazione del client Linux
The Linux client draws with the Turnip Vulkan driver, which needs an Adreno GPU. This device has a different GPU.
The display driver of the Linux client is not installed, so the screen would stay black. Install it with Linux Client in Settings > Stores.
La sessione Linux si è interrotta appena avviata. Il suo log si trova in Impostazioni > Debug > Apri gestione log; condividilo per individuare la causa.
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 18a4f80fe..b2cb7ba04 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -271,6 +271,9 @@
Linux Steam クライアントはまだインストール中です。完了してからもう一度お試しください。
新しい Linux ランタイムがあります。更新しても Steam のサインイン、インストール済みのゲーム、セーブデータ、コンテナは保持されます。
Linux セッションが実行中です。終了してから更新してください。
+ アンインストールすると、Steam クライアント、そのサインインと Proton を含む Linux ランタイム、およびその中に保存されたゲームとセーブデータが削除されます。他の Steam ライブラリのゲームはインストールされたままです。
+ Linux セッションが実行中です。終了してからアンインストールしてください。
+ Linux クライアントをアンインストール中
The Linux client draws with the Turnip Vulkan driver, which needs an Adreno GPU. This device has a different GPU.
The display driver of the Linux client is not installed, so the screen would stay black. Install it with Linux Client in Settings > Stores.
Linux セッションは開始直後に停止しました。ログは 設定 > デバッグ > ログマネージャーを開く にあります。原因を特定できるよう共有してください。
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index 0995b943d..db6f24f9f 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -270,6 +270,9 @@
Linux Steam 클라이언트를 아직 설치하고 있습니다. 완료된 후 다시 시도하세요.
새 Linux 런타임을 사용할 수 있습니다. 업데이트해도 Steam 로그인, 설치된 게임, 세이브 및 컨테이너는 유지됩니다.
Linux 세션이 실행 중입니다. 종료한 후 업데이트하세요.
+ 제거하면 Steam 클라이언트, 로그인 정보, Proton이 포함된 Linux 런타임과 그 안에 저장된 게임 및 세이브가 삭제됩니다. 다른 Steam 라이브러리의 게임은 설치된 상태로 유지됩니다.
+ Linux 세션이 실행 중입니다. 종료한 후 제거하세요.
+ Linux 클라이언트 제거 중
The Linux client draws with the Turnip Vulkan driver, which needs an Adreno GPU. This device has a different GPU.
The display driver of the Linux client is not installed, so the screen would stay black. Install it with Linux Client in Settings > Stores.
Linux 세션이 시작하자마자 중지되었습니다. 로그는 설정 > 디버그 > 로그 관리자 열기에 있습니다. 원인을 찾을 수 있도록 공유해 주세요.
diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml
index 4cb6a4e03..cf46441ce 100644
--- a/app/src/main/res/values-no/strings.xml
+++ b/app/src/main/res/values-no/strings.xml
@@ -271,6 +271,9 @@
Linux Steam-klienten installeres fortsatt. Prøv igjen når den er ferdig.
Et nyere Linux-miljø er tilgjengelig. Oppdateringen beholder Steam-innloggingen, installerte spill, lagrede spill og containere.
En Linux-økt kjører. Avslutt den, og oppdater deretter.
+ Avinstallering fjerner Linux-miljøet med Steam-klienten, påloggingen og Proton, og spillene og lagringene som ligger i det. Spill i de andre Steam-bibliotekene dine forblir installert.
+ En Linux-økt kjører. Avslutt den, og avinstaller deretter.
+ Avinstallerer Linux-klienten
The Linux client draws with the Turnip Vulkan driver, which needs an Adreno GPU. This device has a different GPU.
The display driver of the Linux client is not installed, so the screen would stay black. Install it with Linux Client in Settings > Stores.
Linux-økten stoppet straks den startet. Loggen ligger under Innstillinger > Feilsøking > Åpne loggbehandler; del den så årsaken kan finnes.
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index c0dc3fbbc..e43c9e64f 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -274,6 +274,9 @@
Klient Steam dla Linuksa wciąż się instaluje. Spróbuj ponownie po zakończeniu.
Dostępne jest nowsze środowisko Linux. Aktualizacja zachowuje logowanie do Steam, zainstalowane gry, zapisy i kontenery.
Trwa sesja Linux. Zakończ ją, a następnie zaktualizuj.
+ Odinstalowanie usuwa środowisko Linux wraz z klientem Steam, jego logowaniem i Protonem oraz przechowywane w nim gry i zapisy. Gry w pozostałych bibliotekach Steam pozostaną zainstalowane.
+ Trwa sesja Linux. Zakończ ją, a następnie odinstaluj.
+ Odinstalowywanie klienta Linux
The Linux client draws with the Turnip Vulkan driver, which needs an Adreno GPU. This device has a different GPU.
The display driver of the Linux client is not installed, so the screen would stay black. Install it with Linux Client in Settings > Stores.
Sesja Linux zatrzymała się zaraz po uruchomieniu. Jej log znajdziesz w Ustawienia > Debugowanie > Otwórz menedżer logów; udostępnij go, aby można było znaleźć przyczynę.
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 2f3ab4ef3..c14529bac 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -270,6 +270,9 @@
O cliente Steam para Linux ainda está sendo instalado. Tente novamente quando terminar.
Há um ambiente Linux mais recente. A atualização mantém seu login na Steam, os jogos instalados, os saves e os contêineres.
Uma sessão Linux está em execução. Saia dela e depois atualize.
+ Desinstalar remove o ambiente Linux com o cliente Steam, seu login e o Proton, e os jogos e saves guardados nele. Os jogos nas suas outras bibliotecas Steam continuam instalados.
+ Uma sessão Linux está em execução. Saia dela e depois desinstale.
+ Desinstalando o cliente Linux
The Linux client draws with the Turnip Vulkan driver, which needs an Adreno GPU. This device has a different GPU.
The display driver of the Linux client is not installed, so the screen would stay black. Install it with Linux Client in Settings > Stores.
A sessao Linux parou assim que comecou. O log esta em Configuracoes > Depuracao > Abrir gerenciador de logs; compartilhe-o para que a causa possa ser encontrada.
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 4e427485c..4155ef215 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -271,6 +271,9 @@
O cliente Steam para Linux ainda está a ser instalado. Tente novamente quando terminar.
Está disponível um ambiente Linux mais recente. A atualização mantém o início de sessão na Steam, os jogos instalados, as gravações e os contentores.
Está a decorrer uma sessão Linux. Saia dela e depois atualize.
+ Desinstalar remove o ambiente Linux com o cliente Steam, a sua sessão iniciada e o Proton, e os jogos e gravações guardados nele. Os jogos nas suas outras bibliotecas Steam continuam instalados.
+ Está a decorrer uma sessão Linux. Saia dela e depois desinstale.
+ A desinstalar o cliente Linux
The Linux client draws with the Turnip Vulkan driver, which needs an Adreno GPU. This device has a different GPU.
The display driver of the Linux client is not installed, so the screen would stay black. Install it with Linux Client in Settings > Stores.
A sessão Linux parou assim que começou. O registo está em Definições > Depuração > Abrir Gestor de Registos; partilhe-o para que a causa possa ser encontrada.
diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml
index e410c4e6e..259b79ecb 100644
--- a/app/src/main/res/values-ro/strings.xml
+++ b/app/src/main/res/values-ro/strings.xml
@@ -270,6 +270,9 @@
Clientul Steam pentru Linux încă se instalează. Încearcă din nou după ce se termină.
Este disponibil un mediu Linux mai nou. Actualizarea păstrează autentificarea Steam, jocurile instalate, salvările și containerele.
O sesiune Linux este în desfășurare. Închide-o, apoi actualizează.
+ Dezinstalarea elimină mediul Linux cu clientul Steam, autentificarea sa și Proton, precum și jocurile și salvările păstrate în el. Jocurile din celelalte biblioteci Steam rămân instalate.
+ O sesiune Linux este în desfășurare. Închide-o, apoi dezinstalează.
+ Se dezinstalează clientul Linux
The Linux client draws with the Turnip Vulkan driver, which needs an Adreno GPU. This device has a different GPU.
The display driver of the Linux client is not installed, so the screen would stay black. Install it with Linux Client in Settings > Stores.
Sesiunea Linux s-a oprit imediat dupa pornire. Jurnalul ei este in Setari > Depanare > Deschide managerul de jurnale; distribuie-l pentru a se putea gasi cauza.
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 8a1499bf1..efac0962a 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -274,6 +274,9 @@
Клиент Steam для Linux ещё устанавливается. Повторите попытку после завершения.
Доступна более новая среда Linux. При обновлении сохраняются вход в Steam, установленные игры, сохранения и контейнеры.
Запущен сеанс Linux. Завершите его, затем обновите.
+ Удаление стирает среду Linux вместе с клиентом Steam, его входом в аккаунт и Proton, а также хранящиеся в ней игры и сохранения. Игры в других библиотеках Steam останутся установленными.
+ Запущен сеанс Linux. Завершите его, затем удалите.
+ Удаление клиента Linux
The Linux client draws with the Turnip Vulkan driver, which needs an Adreno GPU. This device has a different GPU.
The display driver of the Linux client is not installed, so the screen would stay black. Install it with Linux Client in Settings > Stores.
Сеанс Linux завершился сразу после запуска. Его журнал находится в Настройки > Отладка > Открыть диспетчер журналов; поделитесь им, чтобы можно было найти причину.
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index 2164b3a46..2d2ef1649 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -271,6 +271,9 @@
Linux Steam-klienten installeras fortfarande. Försök igen när den är klar.
En nyare Linux-miljö finns tillgänglig. Uppdateringen behåller din Steam-inloggning, installerade spel, sparfiler och containrar.
En Linux-session körs. Avsluta den och uppdatera sedan.
+ Avinstallationen tar bort Linux-miljön med Steam-klienten, dess inloggning och Proton samt de spel och sparfiler som finns i den. Spel i dina andra Steam-bibliotek förblir installerade.
+ En Linux-session körs. Avsluta den och avinstallera sedan.
+ Avinstallerar Linux-klienten
The Linux client draws with the Turnip Vulkan driver, which needs an Adreno GPU. This device has a different GPU.
The display driver of the Linux client is not installed, so the screen would stay black. Install it with Linux Client in Settings > Stores.
Linux-sessionen stoppade så snart den startade. Loggen finns under Inställningar > Felsökning > Öppna logghanteraren; dela den så att orsaken kan hittas.
diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml
index 7fa83bc76..75a55e021 100644
--- a/app/src/main/res/values-th/strings.xml
+++ b/app/src/main/res/values-th/strings.xml
@@ -271,6 +271,9 @@
ไคลเอ็นต์ Steam สำหรับ Linux ยังติดตั้งไม่เสร็จ ลองอีกครั้งเมื่อติดตั้งเสร็จ
มีรันไทม์ Linux เวอร์ชันใหม่ การอัปเดตจะเก็บการลงชื่อเข้าใช้ Steam เกมที่ติดตั้ง เซฟ และคอนเทนเนอร์ไว้
เซสชัน Linux กำลังทำงานอยู่ ออกจากเซสชันก่อนแล้วจึงอัปเดต
+ การถอนการติดตั้งจะลบรันไทม์ Linux พร้อมไคลเอนต์ Steam การลงชื่อเข้าใช้ และ Proton รวมถึงเกมและเซฟที่เก็บอยู่ภายใน เกมในคลัง Steam อื่นของคุณจะยังคงติดตั้งอยู่
+ เซสชัน Linux กำลังทำงานอยู่ ออกจากเซสชันก่อนแล้วจึงถอนการติดตั้ง
+ กำลังถอนการติดตั้งไคลเอนต์ Linux
The Linux client draws with the Turnip Vulkan driver, which needs an Adreno GPU. This device has a different GPU.
The display driver of the Linux client is not installed, so the screen would stay black. Install it with Linux Client in Settings > Stores.
เซสชัน Linux หยุดทำงานทันทีที่เริ่ม บันทึกอยู่ที่ การตั้งค่า > ดีบัก > เปิดตัวจัดการบันทึก โปรดแชร์เพื่อให้หาสาเหตุได้
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 78abffc96..068548591 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -271,6 +271,9 @@
Linux Steam İstemcisi hâlâ kuruluyor. Bittiğinde yeniden deneyin.
Daha yeni bir Linux çalışma ortamı var. Güncelleme; Steam oturumunuzu, yüklü oyunları, kayıtları ve kapsayıcıları korur.
Bir Linux oturumu çalışıyor. Oturumdan çıkın, sonra güncelleyin.
+ Kaldırma işlemi Linux ortamını Steam istemcisi, oturumu ve Proton ile birlikte, içinde tutulan oyunlar ve kayıtlarla beraber siler. Diğer Steam kitaplıklarınızdaki oyunlar yüklü kalır.
+ Bir Linux oturumu çalışıyor. Oturumdan çıkın, sonra kaldırın.
+ Linux istemcisi kaldırılıyor
The Linux client draws with the Turnip Vulkan driver, which needs an Adreno GPU. This device has a different GPU.
The display driver of the Linux client is not installed, so the screen would stay black. Install it with Linux Client in Settings > Stores.
Linux oturumu başlar başlamaz durdu. Günlüğü Ayarlar > Hata Ayıklama > Günlük Yöneticisini Aç altındadır; nedeni bulunabilsin diye paylaş.
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index 1820f294e..32cc449c0 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -274,6 +274,9 @@
Клієнт Steam для Linux ще встановлюється. Спробуйте ще раз після завершення.
Доступне новіше середовище Linux. Під час оновлення зберігаються вхід у Steam, встановлені ігри, збереження та контейнери.
Запущено сеанс Linux. Завершіть його, а потім оновіть.
+ Видалення стирає середовище Linux разом із клієнтом Steam, його входом в обліковий запис і Proton, а також ігри та збереження в ньому. Ігри в інших бібліотеках Steam залишаться встановленими.
+ Запущено сеанс Linux. Завершіть його, а потім видаліть.
+ Видалення клієнта Linux
The Linux client draws with the Turnip Vulkan driver, which needs an Adreno GPU. This device has a different GPU.
The display driver of the Linux client is not installed, so the screen would stay black. Install it with Linux Client in Settings > Stores.
Сеанс Linux зупинився одразу після запуску. Його журнал розташований у Налаштування > Налагодження > Відкрити менеджер журналів; поділіться ним, щоб можна було знайти причину.
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index f167dd1a8..ab8000416 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -270,6 +270,9 @@
Linux Steam 客户端仍在安装。请在完成后重试。
有更新的 Linux 运行环境可用。更新会保留 Steam 登录、已安装的游戏、存档和容器。
Linux 会话正在运行。请先退出,然后再更新。
+ 卸载会删除 Linux 运行时及其中的 Steam 客户端、登录信息和 Proton,以及保存在其中的游戏和存档。其他 Steam 库中的游戏仍会保留安装。
+ Linux 会话正在运行。请先退出,然后再卸载。
+ 正在卸载 Linux 客户端
The Linux client draws with the Turnip Vulkan driver, which needs an Adreno GPU. This device has a different GPU.
The display driver of the Linux client is not installed, so the screen would stay black. Install it with Linux Client in Settings > Stores.
Linux 会话刚启动就停止了。日志位于 设置 > 调试 > 打开日志管理器;请分享日志以便查明原因。
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 95ca4d9c4..331d183ef 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -270,6 +270,9 @@
Linux Steam 用戶端仍在安裝。請在完成後再試一次。
有較新的 Linux 執行環境可用。更新會保留 Steam 登入、已安裝的遊戲、存檔和容器。
Linux 工作階段正在執行。請先結束,然後再更新。
+ 解除安裝會移除 Linux 執行環境及其中的 Steam 用戶端、登入資訊和 Proton,以及存放在其中的遊戲和存檔。其他 Steam 收藏庫中的遊戲仍會保持安裝。
+ Linux 工作階段正在執行。請先結束,然後再解除安裝。
+ 正在解除安裝 Linux 用戶端
The Linux client draws with the Turnip Vulkan driver, which needs an Adreno GPU. This device has a different GPU.
The display driver of the Linux client is not installed, so the screen would stay black. Install it with Linux Client in Settings > Stores.
Linux 工作階段剛啟動就停止了。日誌位於 設定 > 除錯 > 開啟日誌管理器;請分享日誌以便查明原因。
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index cb6b91956..94bac0c6a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -272,6 +272,9 @@
The Linux Steam Client is still installing. Try again when it finishes.
A newer Linux runtime is available. Updating keeps your Steam sign-in, installed games, saves and containers.
A Linux session is running. Exit it, then update.
+ Uninstalling removes the Linux runtime with the Steam client, its sign-in and Proton, and the games and saves kept inside it. Games in your other Steam libraries stay installed.
+ A Linux session is running. Exit it, then uninstall.
+ Uninstalling the Linux client
The Linux client draws with the Turnip Vulkan driver, which needs an Adreno GPU. This device has a different GPU.
The display driver of the Linux client is not installed, so the screen would stay black. Install it with Linux Client in Settings > Stores.
The Linux session stopped as soon as it started. Its log is under Settings > Debug > Open Logs Manager; share it so the cause can be found.
diff --git a/app/src/main/runtime/linux/LinuxClientInstaller.kt b/app/src/main/runtime/linux/LinuxClientInstaller.kt
index 7d81182e1..395d21a79 100644
--- a/app/src/main/runtime/linux/LinuxClientInstaller.kt
+++ b/app/src/main/runtime/linux/LinuxClientInstaller.kt
@@ -10,6 +10,7 @@ import android.util.Log
import androidx.annotation.StringRes
import com.winlator.cmod.R
import com.winlator.cmod.feature.library.LinuxApps
+import com.winlator.cmod.feature.library.LinuxSteamLibrary
import com.winlator.cmod.runtime.container.Container
import com.winlator.cmod.runtime.container.ContainerCreation
import com.winlator.cmod.runtime.container.ContainerManager
@@ -97,7 +98,7 @@ object LinuxClientInstaller {
private const val CLIENT_ZONE_SECONDS = 8 * 3600L
private const val PROGRESS_INTERVAL_MS = 100L
- enum class Stage { CONNECT, DOWNLOAD_RUNTIME, INSTALL_RUNTIME, DOWNLOAD_PROTON, INSTALL_PROTON, DOWNLOAD_STEAM, INSTALL_STEAM, LIBRARY }
+ enum class Stage { CONNECT, DOWNLOAD_RUNTIME, INSTALL_RUNTIME, DOWNLOAD_PROTON, INSTALL_PROTON, DOWNLOAD_STEAM, INSTALL_STEAM, LIBRARY, UNINSTALL }
sealed interface State {
data object Checking : State
@@ -224,6 +225,38 @@ object LinuxClientInstaller {
synchronized(lock) { job?.cancel() }
}
+ /**
+ * Removes the runtime, and with it the client, its sign-in, Proton and what the client keeps
+ * inside it, then the driver it downloaded and the Library's Steam entry. False while a
+ * session has the runtime open.
+ */
+ fun uninstall(context: Context): Boolean {
+ val appContext = context.applicationContext
+ synchronized(lock) {
+ if (isWorking || SessionKeepAliveService.isLinuxSessionActive()) return false
+ generation++
+ mutableState.value = State.Working(Stage.UNINSTALL, 0, 0)
+ job = scope.launch { remove(appContext) }
+ }
+ return true
+ }
+
+ private fun remove(context: Context) {
+ try {
+ recoverSwap(context)
+ discard(context, File(context.filesDir, WORK_DIR))
+ val root = LinuxRuntime.rootDir(context)
+ FileUtils.delete(root)
+ FileUtils.delete(LinuxRuntime.driverDir(context))
+ preferences(context).edit().remove(DISMISSED_UPDATE).apply()
+ gamescopeContainer(context)?.let { File(it.desktopDir, "${LinuxApps.STEAM_SHORTCUT_NAME}.desktop").delete() }
+ LinuxSteamLibrary.adoptClientInstalls(context, root)
+ } catch (e: Exception) {
+ Log.w(TAG, "Linux client uninstall failed", e)
+ }
+ publishSettled(if (isInstalled(context)) State.Installed else State.Missing)
+ }
+
private suspend fun install(
context: Context,
update: Boolean,