diff --git a/Telegram/SourceFiles/core/launcher.cpp b/Telegram/SourceFiles/core/launcher.cpp
index 4ba3e197c..19d9c3bbf 100644
--- a/Telegram/SourceFiles/core/launcher.cpp
+++ b/Telegram/SourceFiles/core/launcher.cpp
@@ -249,7 +249,7 @@ void Launcher::init() {
 	QApplication::setApplicationName(qsl("TelegramDesktop"));
 
 #if defined(Q_OS_LINUX) && QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
-	QApplication::setDesktopFileName(qsl(MACRO_TO_STRING(TDESKTOP_LAUNCHER_BASENAME)) + ".desktop");
+	QApplication::setDesktopFileName(Platform::GetLauncherFilename());
 #endif
 
 #ifndef OS_MAC_OLD
diff --git a/Telegram/SourceFiles/platform/linux/main_window_linux.cpp b/Telegram/SourceFiles/platform/linux/main_window_linux.cpp
index a469d443c..8d6186248 100644
--- a/Telegram/SourceFiles/platform/linux/main_window_linux.cpp
+++ b/Telegram/SourceFiles/platform/linux/main_window_linux.cpp
@@ -9,6 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 
 #include "styles/style_window.h"
 #include "platform/linux/linux_libs.h"
+#include "platform/linux/specific_linux.h"
 #include "platform/linux/linux_desktop_environment.h"
 #include "platform/platform_notifications_manager.h"
 #include "history/history.h"
@@ -29,8 +30,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 namespace Platform {
 namespace {
 
-constexpr auto kLauncherBasename = MACRO_TO_STRING(TDESKTOP_LAUNCHER_BASENAME) ".desktop"_cs;
-
 bool noQtTrayIcon = false, tryAppIndicator = false;
 bool useGtkBase = false, useAppIndicator = false, useStatusIcon = false, trayIconChecked = false, useUnityCount = false;
 
@@ -556,32 +555,21 @@ void MainWindow::psFirstShow() {
 
 #ifndef TDESKTOP_DISABLE_DBUS_INTEGRATION
 	if (QDBusInterface("com.canonical.Unity", "/").isValid()) {
-		auto snapName = QString::fromLatin1(qgetenv("SNAP_NAME"));
-		if (snapName.isEmpty()) {
-			std::vector<QString> possibleDesktopFiles = {
-				kLauncherBasename.utf16(),
-				"Telegram.desktop"
-			};
+		std::vector<QString> possibleDesktopFiles = {
+			GetLauncherFilename(),
+			"Telegram.desktop"
+		};
 
-			for (auto it = possibleDesktopFiles.begin(); it != possibleDesktopFiles.end(); it++) {
-				if (!QStandardPaths::locate(QStandardPaths::ApplicationsLocation, *it).isEmpty()) {
-					_desktopFile = *it;
-					LOG(("Found Unity Launcher entry %1!").arg(_desktopFile));
-					useUnityCount = true;
-					break;
-				}
+		for (auto it = possibleDesktopFiles.begin(); it != possibleDesktopFiles.end(); it++) {
+			if (!QStandardPaths::locate(QStandardPaths::ApplicationsLocation, *it).isEmpty()) {
+				_desktopFile = *it;
+				LOG(("Found Unity Launcher entry %1!").arg(_desktopFile));
+				useUnityCount = true;
+				break;
 			}
-			if (!useUnityCount) {
-				LOG(("Could not get Unity Launcher entry!"));
-			}
-		} else {
-			LOG(("SNAP Environment detected, setting Launcher entry to %1_%2.desktop!")
-				.arg(snapName)
-				.arg(kLauncherBasename.utf16()));
-			_desktopFile = snapName
-				+ '_'
-				+ kLauncherBasename.utf16();
-			useUnityCount=true;
+		}
+		if (!useUnityCount) {
+			LOG(("Could not get Unity Launcher entry!"));
 		}
 		_dbusPath = "/com/canonical/unity/launcherentry/" + QString::number(djbStringHash("application://" + _desktopFile));
 	} else {
diff --git a/Telegram/SourceFiles/platform/linux/notifications_manager_linux.cpp b/Telegram/SourceFiles/platform/linux/notifications_manager_linux.cpp
index d48ac19c0..46ad6f85b 100644
--- a/Telegram/SourceFiles/platform/linux/notifications_manager_linux.cpp
+++ b/Telegram/SourceFiles/platform/linux/notifications_manager_linux.cpp
@@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 */
 #include "platform/linux/notifications_manager_linux.h"
 
+#include "platform/linux/specific_linux.h"
 #include "history/history.h"
 #include "lang/lang_keys.h"
 #include "facades.h"
@@ -157,8 +158,7 @@ NotificationData::NotificationData(
 
 	_hints["category"] = qsl("im.received");
 
-	_hints["desktop-entry"] =
-		qsl(MACRO_TO_STRING(TDESKTOP_LAUNCHER_BASENAME));
+	_hints["desktop-entry"] = GetLauncherBasename();
 
 	_notificationInterface->connection().connect(
 		kService.utf16(),
diff --git a/Telegram/SourceFiles/platform/linux/specific_linux.cpp b/Telegram/SourceFiles/platform/linux/specific_linux.cpp
index 4969bbe13..741d69274 100644
--- a/Telegram/SourceFiles/platform/linux/specific_linux.cpp
+++ b/Telegram/SourceFiles/platform/linux/specific_linux.cpp
@@ -116,8 +116,7 @@ bool GenerateDesktopFile(const QString &targetPath, const QString &args) {
 	DEBUG_LOG(("App Info: placing .desktop file to %1").arg(targetPath));
 	if (!QDir(targetPath).exists()) QDir().mkpath(targetPath);
 
-	const auto targetFile = targetPath
-		+ qsl(MACRO_TO_STRING(TDESKTOP_LAUNCHER_BASENAME) ".desktop");
+	const auto targetFile = targetPath + GetLauncherFilename();
 
 	QString fileText;
 
@@ -182,6 +181,11 @@ bool InSandbox() {
 	return Sandbox;
 }
 
+bool InSnap() {
+	static const auto Snap = qEnvironmentVariableIsSet("SNAP");
+	return Snap;
+}
+
 QString CurrentExecutablePath(int argc, char *argv[]) {
 	constexpr auto kMaxPath = 1024;
 	char result[kMaxPath] = { 0 };
@@ -200,17 +204,15 @@ QString CurrentExecutablePath(int argc, char *argv[]) {
 }
 
 QString SingleInstanceLocalServerName(const QString &hash) {
-	const auto isSnap = !qgetenv("SNAP").isEmpty();
-
 	const auto runtimeDir = QStandardPaths::writableLocation(
 		QStandardPaths::RuntimeLocation);
 
 	if (InSandbox()) {
 		return runtimeDir
 			+ qsl("/app/")
-			+ QString::fromUtf8(qgetenv("FLATPAK_ID"))
+			+ QString::fromLatin1(qgetenv("FLATPAK_ID"))
 			+ '/' + hash;
-	} else if (QFileInfo::exists(runtimeDir) && isSnap) {
+	} else if (QFileInfo::exists(runtimeDir) && InSnap()) {
 		return runtimeDir + '/' + hash;
 	} else if (QFileInfo::exists(runtimeDir)) {
 		return runtimeDir + '/' + hash + '-' + cGUIDStr();
@@ -220,6 +222,35 @@ QString SingleInstanceLocalServerName(const QString &hash) {
 	}
 }
 
+QString GetLauncherBasename() {
+	static const auto LauncherBasename = [&] {
+		QString launcherBasename;
+
+		if (InSnap()) {
+			launcherBasename = qsl("%1_%2")
+				.arg(QString::fromLatin1(qgetenv("SNAP_NAME")))
+				.arg(qsl(MACRO_TO_STRING(TDESKTOP_LAUNCHER_BASENAME)));
+
+			LOG(("SNAP Environment detected, "
+				"launcher filename is %1.desktop")
+					.arg(launcherBasename));
+		} else {
+			launcherBasename =
+				qsl(MACRO_TO_STRING(TDESKTOP_LAUNCHER_BASENAME));
+		}
+
+		return launcherBasename;
+	}();
+
+	return LauncherBasename;
+}
+
+QString GetLauncherFilename() {
+	static const auto LauncherFilename = GetLauncherBasename()
+		+ qsl(".desktop");
+	return LauncherFilename;
+}
+
 } // namespace Platform
 
 namespace {
@@ -379,8 +410,8 @@ void RegisterCustomScheme() {
 		+ EscapeShell(QFile::encodeName(applicationsPath)));
 
 	RunShellCommand("xdg-mime default "
-		MACRO_TO_STRING(TDESKTOP_LAUNCHER_BASENAME)
-		".desktop x-scheme-handler/tg");
+		+ GetLauncherFilename().toLatin1()
+		+ " x-scheme-handler/tg");
 #endif // !TDESKTOP_DISABLE_REGISTER_CUSTOM_SCHEME
 }
 
@@ -459,9 +490,7 @@ void psAutoStart(bool start, bool silent) {
 		if (start) {
 			GenerateDesktopFile(autostart, qsl("-autostart"));
 		} else {
-			QFile::remove(autostart
-				+ qsl(MACRO_TO_STRING(TDESKTOP_LAUNCHER_BASENAME)
-					".desktop"));
+			QFile::remove(autostart + GetLauncherFilename());
 		}
 	}
 }
diff --git a/Telegram/SourceFiles/platform/linux/specific_linux.h b/Telegram/SourceFiles/platform/linux/specific_linux.h
index 7546f758a..51a7c5464 100644
--- a/Telegram/SourceFiles/platform/linux/specific_linux.h
+++ b/Telegram/SourceFiles/platform/linux/specific_linux.h
@@ -21,11 +21,15 @@ inline void SetWatchingMediaKeys(bool watching) {
 }
 
 bool InSandbox();
+bool InSnap();
 
 QString CurrentExecutablePath(int argc, char *argv[]);
 
 QString SingleInstanceLocalServerName(const QString &hash);
 
+QString GetLauncherBasename();
+QString GetLauncherFilename();
+
 inline std::optional<crl::time> LastUserInputTime() {
 	return std::nullopt;
 }