Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/base/common/desktopEnvironmentInfo.ts
3292 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { env } from './process.js';
7
8
// Define the enumeration for Desktop Environments
9
enum DesktopEnvironment {
10
UNKNOWN = 'UNKNOWN',
11
CINNAMON = 'CINNAMON',
12
DEEPIN = 'DEEPIN',
13
GNOME = 'GNOME',
14
KDE3 = 'KDE3',
15
KDE4 = 'KDE4',
16
KDE5 = 'KDE5',
17
KDE6 = 'KDE6',
18
PANTHEON = 'PANTHEON',
19
UNITY = 'UNITY',
20
XFCE = 'XFCE',
21
UKUI = 'UKUI',
22
LXQT = 'LXQT',
23
}
24
25
const kXdgCurrentDesktopEnvVar = 'XDG_CURRENT_DESKTOP';
26
const kKDESessionEnvVar = 'KDE_SESSION_VERSION';
27
28
export function getDesktopEnvironment(): DesktopEnvironment {
29
const xdgCurrentDesktop = env[kXdgCurrentDesktopEnvVar];
30
if (xdgCurrentDesktop) {
31
const values = xdgCurrentDesktop.split(':').map(value => value.trim()).filter(value => value.length > 0);
32
for (const value of values) {
33
switch (value) {
34
case 'Unity': {
35
const desktopSessionUnity = env['DESKTOP_SESSION'];
36
if (desktopSessionUnity && desktopSessionUnity.includes('gnome-fallback')) {
37
return DesktopEnvironment.GNOME;
38
}
39
40
return DesktopEnvironment.UNITY;
41
}
42
case 'Deepin':
43
return DesktopEnvironment.DEEPIN;
44
case 'GNOME':
45
return DesktopEnvironment.GNOME;
46
case 'X-Cinnamon':
47
return DesktopEnvironment.CINNAMON;
48
case 'KDE': {
49
const kdeSession = env[kKDESessionEnvVar];
50
if (kdeSession === '5') { return DesktopEnvironment.KDE5; }
51
if (kdeSession === '6') { return DesktopEnvironment.KDE6; }
52
return DesktopEnvironment.KDE4;
53
}
54
case 'Pantheon':
55
return DesktopEnvironment.PANTHEON;
56
case 'XFCE':
57
return DesktopEnvironment.XFCE;
58
case 'UKUI':
59
return DesktopEnvironment.UKUI;
60
case 'LXQt':
61
return DesktopEnvironment.LXQT;
62
}
63
}
64
}
65
66
const desktopSession = env['DESKTOP_SESSION'];
67
if (desktopSession) {
68
switch (desktopSession) {
69
case 'deepin':
70
return DesktopEnvironment.DEEPIN;
71
case 'gnome':
72
case 'mate':
73
return DesktopEnvironment.GNOME;
74
case 'kde4':
75
case 'kde-plasma':
76
return DesktopEnvironment.KDE4;
77
case 'kde':
78
if (kKDESessionEnvVar in env) {
79
return DesktopEnvironment.KDE4;
80
}
81
return DesktopEnvironment.KDE3;
82
case 'xfce':
83
case 'xubuntu':
84
return DesktopEnvironment.XFCE;
85
case 'ukui':
86
return DesktopEnvironment.UKUI;
87
}
88
}
89
90
if ('GNOME_DESKTOP_SESSION_ID' in env) {
91
return DesktopEnvironment.GNOME;
92
}
93
if ('KDE_FULL_SESSION' in env) {
94
if (kKDESessionEnvVar in env) {
95
return DesktopEnvironment.KDE4;
96
}
97
return DesktopEnvironment.KDE3;
98
}
99
100
return DesktopEnvironment.UNKNOWN;
101
}
102
103