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 0000000..6b1b9ac Binary files /dev/null and b/src/main/resources/icons/termora_256x256.png differ