From 117a9ea692214583cdd4ae7d5076a62902692b8f Mon Sep 17 00:00:00 2001 From: hstyi Date: Tue, 12 Aug 2025 14:42:40 +0800 Subject: [PATCH] fix: icons not displaying on some Linux systems --- build.gradle.kts | 12 ++++++++++-- .../kotlin/app/termora/ApplicationInitializr.kt | 13 ++++++++++++- src/main/resources/icons/termora_256x256.png | Bin 0 -> 13561 bytes 3 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 src/main/resources/icons/termora_256x256.png diff --git a/build.gradle.kts b/build.gradle.kts index 81f2f02..0dadfb8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -384,6 +384,7 @@ tasks.register("jpackage") { } if (os.isLinux) { + options.add("--add-opens=java.desktop/sun.awt.X11=ALL-UNNAMED") if (isDeb) { options.add("-Djpackage.app-layout=deb") } @@ -681,17 +682,24 @@ fun packOnLinux(distributionDir: Directory, finalFilenameWithoutExtension: Strin exec { commandLine("chmod", "+x", appimagetool.absolutePath) } } - // Desktop file val termoraName = project.name.uppercaseFirstChar() + + // copy icon + FileUtils.copyFile( + File("${projectDir.absolutePath}/src/main/resources/icons/termora_256x256.png"), + distributionDir.file(termoraName + File.separator + termoraName + ".png").asFile + ) + val desktopFile = distributionDir.file(termoraName + File.separator + termoraName + ".desktop").asFile desktopFile.writeText( """[Desktop Entry] Type=Application Name=${termoraName} Comment=Terminal emulator and SSH client -Icon=/lib/${termoraName} +Icon=${termoraName} Categories=Development; +StartupWMClass=${termoraName} Terminal=false """.trimIndent() ) diff --git a/src/main/kotlin/app/termora/ApplicationInitializr.kt b/src/main/kotlin/app/termora/ApplicationInitializr.kt index d7e3308..180b706 100644 --- a/src/main/kotlin/app/termora/ApplicationInitializr.kt +++ b/src/main/kotlin/app/termora/ApplicationInitializr.kt @@ -9,6 +9,7 @@ import org.apache.commons.lang3.SystemUtils import org.apache.commons.lang3.math.NumberUtils import org.slf4j.LoggerFactory import org.tinylog.configuration.Configuration +import java.awt.Toolkit import java.io.File import kotlin.system.exitProcess import kotlin.system.measureTimeMillis @@ -35,10 +36,20 @@ class ApplicationInitializr { // 检查是否单例 checkSingleton() - if (SystemUtils.IS_OS_MAC_OSX) { + if (SystemInfo.isMacOS) { System.setProperty("apple.awt.application.name", Application.getName()) } + if (SystemInfo.isLinux) { + // https://stackoverflow.com/questions/10593075 + runCatching { + val toolkit = Toolkit.getDefaultToolkit() + val awtAppClassNameField = toolkit.javaClass.getDeclaredField("awtAppClassName") + awtAppClassNameField.setAccessible(true) + awtAppClassNameField.set(toolkit, Application.getName()) + } + } + // 启动 val runtime = measureTimeMillis { ApplicationRunner().run() } val log = LoggerFactory.getLogger(javaClass) diff --git a/src/main/resources/icons/termora_256x256.png b/src/main/resources/icons/termora_256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..6b1b9ac400f55700d577946c28e0c337e3054add GIT binary patch literal 13561 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 literal 0 HcmV?d00001