1diff --git a/kcms/audio_information/kcm_audio_information.json b/kcms/audio_information/kcm_audio_information.json
2index 7ece92ee..a4fb6664 100644
3--- a/kcms/audio_information/kcm_audio_information.json
4+++ b/kcms/audio_information/kcm_audio_information.json
5@@ -82,7 +82,7 @@
6 "Name[zh_CN]": "音频",
7 "Name[zh_TW]": "音訊"
8 },
9- "TryExec": "pactl",
10+ "TryExec": "@pactl@",
11 "X-KDE-KInfoCenter-Category": "device_information",
12 "X-KDE-Keywords": "Pipewire,Audio,PulseAudio,pactl",
13 "X-KDE-Keywords[ar]": "Pipewire,Audio,PulseAudio,pactl,بايبواير,الصوت,بولس أوديو",
14diff --git a/kcms/audio_information/main.cpp b/kcms/audio_information/main.cpp
15index adb196fd..9d6c8675 100644
16--- a/kcms/audio_information/main.cpp
17+++ b/kcms/audio_information/main.cpp
18@@ -16,7 +16,7 @@ public:
19 explicit KCMAudioInformation(QObject *parent, const KPluginMetaData &data)
20 : KQuickConfigModule(parent, data)
21 {
22- m_outputContext = new CommandOutputContext(QStringLiteral("pactl"), {"list"}, parent);
23+ m_outputContext = new CommandOutputContext(QStringLiteral("@pactl@"), {"list"}, parent);
24 }
25 CommandOutputContext *outputContext() const
26 {
27diff --git a/kcms/block_devices/kcm_block_devices.json b/kcms/block_devices/kcm_block_devices.json
28index f73cf5a5..b18ecbfb 100644
29--- a/kcms/block_devices/kcm_block_devices.json
30+++ b/kcms/block_devices/kcm_block_devices.json
31@@ -82,7 +82,7 @@
32 "Name[zh_CN]": "块设备",
33 "Name[zh_TW]": "區塊裝置"
34 },
35- "TryExec": "lsblk",
36+ "TryExec": "@lsblk@",
37 "X-KDE-KInfoCenter-Category": "device_information",
38 "X-KDE-Keywords": "lsblk,block device,partition,disk,drive,hdd,ssd,nvme",
39 "X-KDE-Keywords[ar]": "lsblk,block device,partition,disk,drive,hdd,ssd,nvme,قرص,قسم,قطاع جهاز",
40diff --git a/kcms/block_devices/main.cpp b/kcms/block_devices/main.cpp
41index 2de923f3..6b14f7fb 100644
42--- a/kcms/block_devices/main.cpp
43+++ b/kcms/block_devices/main.cpp
44@@ -20,7 +20,7 @@ public:
45 {
46 // NOTE: careful when using -o, it tends to incorrectly print multiple mountpoints as a single path
47 // (e.g. when different btrfs subvolumes are mounted at various points in the system it ought to enumerate all mountpoints)
48- m_outputContext = new CommandOutputContext(u"lsblk"_s, {}, parent);
49+ m_outputContext = new CommandOutputContext(u"@lsblk@"_s, {}, parent);
50 }
51 CommandOutputContext *outputContext() const
52 {
53diff --git a/kcms/cpu/kcm_cpu.json b/kcms/cpu/kcm_cpu.json
54index e8fb086e..c87b98f8 100644
55--- a/kcms/cpu/kcm_cpu.json
56+++ b/kcms/cpu/kcm_cpu.json
57@@ -104,7 +104,7 @@
58 "Name[zh_CN]": "CPU",
59 "Name[zh_TW]": "CPU"
60 },
61- "TryExec": "lscpu",
62+ "TryExec": "@lscpu@",
63 "X-KDE-KInfoCenter-Category": "device_information",
64 "X-KDE-Keywords": "cpu,amd,intel,arm,instructions,cores,architecture,byte order",
65 "X-KDE-Keywords[ar]": "cpu,amd,intel,arm,instructions,cores,architecture,byte order,تعليمات,أنوية,معمارية",
66diff --git a/kcms/cpu/main.cpp b/kcms/cpu/main.cpp
67index 608381eb..8fd7914f 100644
68--- a/kcms/cpu/main.cpp
69+++ b/kcms/cpu/main.cpp
70@@ -16,7 +16,7 @@ public:
71 explicit KCMCPU(QObject *parent, const KPluginMetaData &data)
72 : KQuickConfigModule(parent, data)
73 {
74- m_outputContext = new CommandOutputContext(QStringLiteral("lscpu"), {}, parent);
75+ m_outputContext = new CommandOutputContext(QStringLiteral("@lscpu@"), {}, parent);
76 }
77 CommandOutputContext *outputContext() const
78 {
79diff --git a/kcms/edid/edid.sh b/kcms/edid/edid.sh
80index da803598..4e24eaaf 100755
81--- a/kcms/edid/edid.sh
82+++ b/kcms/edid/edid.sh
83@@ -13,7 +13,7 @@ for card in /sys/class/drm/card*; do
84 # Try to read any data. If it fails continue. This prevents errors from di-edid-decode.
85 IFS= read -r data < "$edid" || continue
86
87- data=$(di-edid-decode "$edid" 2>&1) || true
88+ data=$(@di_edid_decode@ "$edid" 2>&1) || true
89 printf "# %s #######################\n" "$(basename "$card")"
90 printf "%s\n\n" "$data"
91 done
92diff --git a/kcms/edid/kcm_edid.json b/kcms/edid/kcm_edid.json
93index e180df8d..3d5bbd0b 100644
94--- a/kcms/edid/kcm_edid.json
95+++ b/kcms/edid/kcm_edid.json
96@@ -72,7 +72,7 @@
97 "Name[zh_CN]": "EDID",
98 "Name[zh_TW]": "EDID"
99 },
100- "TryExec": "di-edid-decode",
101+ "TryExec": "@di_edid_decode@",
102 "X-KDE-KInfoCenter-Category": "graphical_information",
103 "X-KDE-Keywords": "EDID,Graphics",
104 "X-KDE-Keywords[ar]": "EDID,Graphics,الرسوميات,بيانات تعريف العرض الممتدة",
105diff --git a/kcms/edid/main.cpp b/kcms/edid/main.cpp
106index 9f04e7fd..8ef37d2c 100644
107--- a/kcms/edid/main.cpp
108+++ b/kcms/edid/main.cpp
109@@ -20,7 +20,7 @@ public:
110 {
111 const QString executable =
112 QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("kinfocenter/edid/edid.sh"), QStandardPaths::LocateFile);
113- m_outputContext = new CommandOutputContext({QStringLiteral("di-edid-decode")}, QStringLiteral("/bin/sh"), {executable}, parent);
114+ m_outputContext = new CommandOutputContext({QStringLiteral("@di_edid_decode@")}, QStringLiteral("/bin/sh"), {executable}, parent);
115 }
116 [[nodiscard]] CommandOutputContext *outputContext() const
117 {
118diff --git a/kcms/egl/kcm_egl.json b/kcms/egl/kcm_egl.json
119index 02a90071..64bfb609 100644
120--- a/kcms/egl/kcm_egl.json
121+++ b/kcms/egl/kcm_egl.json
122@@ -104,7 +104,7 @@
123 "Name[zh_CN]": "OpenGL (EGL)",
124 "Name[zh_TW]": "OpenGL (EGL)"
125 },
126- "TryExec": "eglinfo",
127+ "TryExec": "@eglinfo@",
128 "X-KDE-KInfoCenter-Category": "graphical_information",
129 "X-KDE-Keywords": "OpenGL,DRI,3D,VideoCard,Hardware Acceleration,Graphics,EGL",
130 "X-KDE-Keywords[ar]": "OpenGL,DRI,3D,VideoCard,Hardware Acceleration,Graphics,EGL,بطاقة الرسوميات,تسريع العتاد,رسوميات",
131diff --git a/kcms/egl/main.cpp b/kcms/egl/main.cpp
132index 1a509dac..886a62d8 100644
133--- a/kcms/egl/main.cpp
134+++ b/kcms/egl/main.cpp
135@@ -16,7 +16,7 @@ public:
136 explicit KCMXServer(QObject *parent, const KPluginMetaData &data)
137 : KQuickConfigModule(parent, data)
138 {
139- m_outputContext = new CommandOutputContext(QStringLiteral("eglinfo"), {}, parent);
140+ m_outputContext = new CommandOutputContext(QStringLiteral("@eglinfo@"), {}, parent);
141 }
142 CommandOutputContext *outputContext() const
143 {
144diff --git a/kcms/firmware_security/main.cpp b/kcms/firmware_security/main.cpp
145index eab20e0f..5a0d2499 100644
146--- a/kcms/firmware_security/main.cpp
147+++ b/kcms/firmware_security/main.cpp
148@@ -20,7 +20,7 @@ public:
149 const QString executable = QStandardPaths::locate(QStandardPaths::GenericDataLocation,
150 QStringLiteral("kinfocenter/firmware_security/fwupdmgr.sh"),
151 QStandardPaths::LocateFile);
152- m_outputContext = new CommandOutputContext({QStringLiteral("fwupdmgr"), QStringLiteral("aha")},
153+ m_outputContext = new CommandOutputContext({QStringLiteral("fwupdmgr"), QStringLiteral("@aha@")},
154 QStringLiteral("/bin/sh"),
155 {executable},
156 Qt::TextFormat::RichText,
157diff --git a/kcms/glx/kcm_glx.json b/kcms/glx/kcm_glx.json
158index 8a56690a..e2caaec7 100644
159--- a/kcms/glx/kcm_glx.json
160+++ b/kcms/glx/kcm_glx.json
161@@ -103,7 +103,7 @@
162 "Name[zh_CN]": "OpenGL (GLX)",
163 "Name[zh_TW]": "OpenGL (GLX)"
164 },
165- "TryExec": "glxinfo",
166+ "TryExec": "@glxinfo@",
167 "X-KDE-KInfoCenter-Category": "graphical_information",
168 "X-KDE-Keywords": "OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display",
169 "X-KDE-Keywords[ar]": "OpenGL,DRI,GLX,3D,VideoCard,Hardware Acceleration,Graphics,X,X11,Xserver,X-Server,XFree86,Display,بطاقة الرسوميات,تسريع العتاد,الرسوميات",
170diff --git a/kcms/glx/main.cpp b/kcms/glx/main.cpp
171index a7317411..a6c5621d 100644
172--- a/kcms/glx/main.cpp
173+++ b/kcms/glx/main.cpp
174@@ -16,7 +16,7 @@ public:
175 explicit KCMXServer(QObject *parent, const KPluginMetaData &data)
176 : KQuickConfigModule(parent, data)
177 {
178- m_outputContext = new CommandOutputContext(QStringLiteral("glxinfo"), {}, parent);
179+ m_outputContext = new CommandOutputContext(QStringLiteral("@glxinfo@"), {}, parent);
180 }
181 CommandOutputContext *outputContext() const
182 {
183diff --git a/kcms/helpers/dmidecode-helper/helper.cpp b/kcms/helpers/dmidecode-helper/helper.cpp
184index 11921934..1160c5f0 100644
185--- a/kcms/helpers/dmidecode-helper/helper.cpp
186+++ b/kcms/helpers/dmidecode-helper/helper.cpp
187@@ -20,10 +20,7 @@ auto make_array(Input &&...args) -> std::array<Output, sizeof...(args)> // NB: w
188 DMIDecodeHelper::DMIDecodeHelper(QObject *parent)
189 : QObject(parent)
190 {
191- // PATH is super minimal when invoked through dbus
192- setenv("PATH", "/usr/sbin:/sbin:/usr/local/sbin", 1);
193-
194- m_dmidecodePath = QStandardPaths::findExecutable("dmidecode");
195+ m_dmidecodePath = QStringLiteral("@dmidecode@");
196 }
197
198 KAuth::ActionReply DMIDecodeHelper::memoryinformation(const QVariantMap &args)
199diff --git a/kcms/kwinsupportinfo/kcm_kwinsupportinfo.json.in b/kcms/kwinsupportinfo/kcm_kwinsupportinfo.json.in
200index 9e502d52..f9f26cbd 100644
201--- a/kcms/kwinsupportinfo/kcm_kwinsupportinfo.json.in
202+++ b/kcms/kwinsupportinfo/kcm_kwinsupportinfo.json.in
203@@ -95,6 +95,6 @@
204 "Name[zh_CN]": "窗口管理器",
205 "Name[zh_TW]": "視窗管理員"
206 },
207- "TryExec": "@QtBinariesDir@/qdbus",
208+ "TryExec": "@qdbus@",
209 "X-KDE-KInfoCenter-Category": "graphical_information"
210 }
211diff --git a/kcms/kwinsupportinfo/main.cpp b/kcms/kwinsupportinfo/main.cpp
212index ddb55b5c..8dc6b668 100644
213--- a/kcms/kwinsupportinfo/main.cpp
214+++ b/kcms/kwinsupportinfo/main.cpp
215@@ -18,7 +18,7 @@ public:
216 explicit KCMKWinSupportInfo(QObject *parent, const KPluginMetaData &data)
217 : KQuickConfigModule(parent, data)
218 {
219- m_outputContext = new CommandOutputContext(QLibraryInfo::path(QLibraryInfo::BinariesPath) + QStringLiteral("/qdbus"),
220+ m_outputContext = new CommandOutputContext(QStringLiteral("@qdbus@"),
221 {QStringLiteral("org.kde.KWin"), QStringLiteral("/KWin"), QStringLiteral("supportInformation")},
222 parent);
223 }
224diff --git a/kcms/memory/kcm_memory.json b/kcms/memory/kcm_memory.json
225index 20df9662..6a64c762 100644
226--- a/kcms/memory/kcm_memory.json
227+++ b/kcms/memory/kcm_memory.json
228@@ -134,7 +134,7 @@
229 "Name[zh_CN]": "内存",
230 "Name[zh_TW]": "記憶體"
231 },
232- "TryExec": "pkexec dmidecode",
233+ "TryExec": "@dmidecode@",
234 "X-KDE-KInfoCenter-Category": "device_information",
235 "X-KDE-Keywords": "Memory,RAM,dmidecode",
236 "X-KDE-Keywords[ar]": "Memory,RAM,dmidecode,رام,ذاكرة,ذاكرة حية",
237diff --git a/kcms/network/kcm_network.json b/kcms/network/kcm_network.json
238index 5fc677a5..59ec49da 100644
239--- a/kcms/network/kcm_network.json
240+++ b/kcms/network/kcm_network.json
241@@ -148,7 +148,7 @@
242 "Name[zh_CN]": "网络接口",
243 "Name[zh_TW]": "網路介面"
244 },
245- "TryExec": "ip",
246+ "TryExec": "@ip@",
247 "X-KDE-KInfoCenter-Category": "network_information",
248 "X-KDE-Keywords": "network,nic,ip,ip address,mac,inet,eth,wlan,wifi",
249 "X-KDE-Keywords[ar]": "network,nic,ip,ip address,mac,inet,eth,wlan,wifi,الشبكة,شبكة الاتصال,عنوان IP,عنوان IP,جهاز Mac,شبكة الإنترنت,شبكة ETH,شبكة WLAN,شبكة Wi-Fi",
250diff --git a/kcms/network/main.cpp b/kcms/network/main.cpp
251index f02577a3..479e18df 100644
252--- a/kcms/network/main.cpp
253+++ b/kcms/network/main.cpp
254@@ -18,7 +18,7 @@ public:
255 explicit KCMNetwork(QObject *parent, const KPluginMetaData &data)
256 : KQuickConfigModule(parent, data)
257 {
258- m_outputContext = new CommandOutputContext(u"ip"_s, {u"address"_s}, parent);
259+ m_outputContext = new CommandOutputContext(u"@ip@"_s, {u"address"_s}, parent);
260 }
261 CommandOutputContext *outputContext() const
262 {
263diff --git a/kcms/opencl/kcm_opencl.json b/kcms/opencl/kcm_opencl.json
264index 61706cb9..b7fb9c59 100644
265--- a/kcms/opencl/kcm_opencl.json
266+++ b/kcms/opencl/kcm_opencl.json
267@@ -92,7 +92,7 @@
268 "Name[zh_CN]": "OpenCL",
269 "Name[zh_TW]": "OpenCL"
270 },
271- "TryExec": "clinfo",
272+ "TryExec": "@clinfo@",
273 "X-KDE-KInfoCenter-Category": "graphical_information",
274 "X-KDE-Keywords": "OpenCL,VideoCard,Hardware Acceleration,Graphics",
275 "X-KDE-Keywords[ar]": "OpenCL,VideoCard,Hardware Acceleration,Graphics,بطاقة الفيديو,تسريع العتاد,الرسوميات",
276diff --git a/kcms/opencl/main.cpp b/kcms/opencl/main.cpp
277index d58728ab..88733d46 100644
278--- a/kcms/opencl/main.cpp
279+++ b/kcms/opencl/main.cpp
280@@ -18,7 +18,7 @@ public:
281 explicit KCMOpenCL(QObject *parent, const KPluginMetaData &data)
282 : KQuickConfigModule(parent, data)
283 {
284- m_outputContext = new CommandOutputContext(QStringLiteral("clinfo"), {}, parent);
285+ m_outputContext = new CommandOutputContext(QStringLiteral("@clinfo@"), {}, parent);
286 }
287 CommandOutputContext *outputContext() const
288 {
289diff --git a/kcms/pci/CMakeLists.txt b/kcms/pci/CMakeLists.txt
290index 36d82ef8..16ce2703 100644
291--- a/kcms/pci/CMakeLists.txt
292+++ b/kcms/pci/CMakeLists.txt
293@@ -19,7 +19,7 @@ else()
294 find_package(lspci)
295 set_package_properties(lspci PROPERTIES TYPE RUNTIME)
296
297- set(PCI_BACKEND lspci)
298+ set(PCI_BACKEND @lspci@)
299 set(PCI_BACKEND_ARGUMENTS "-v")
300 endif()
301
302diff --git a/kcms/sensors/kcm_sensors.json b/kcms/sensors/kcm_sensors.json
303index e1994f2c..e1c27245 100644
304--- a/kcms/sensors/kcm_sensors.json
305+++ b/kcms/sensors/kcm_sensors.json
306@@ -58,7 +58,7 @@
307 "Name[zh_CN]": "传感器",
308 "Name[zh_TW]": "感測器"
309 },
310- "TryExec": "sensors",
311+ "TryExec": "@sensors@",
312 "X-KDE-KInfoCenter-Category": "device_information",
313 "X-KDE-Keywords": "lm_sensors,sensors,temp,temperature,volt,voltage,sensors,fan,fan speed,monitoring,amp,amps,current,power",
314 "X-KDE-Keywords[ar]": "مستشعرات lm,مستشعرات,درجة الحرارة,درجة الحرارة,فولت,جهد,مستشعرات,مروحة,سرعة المروحة,مراقبة,أمبير,أمبير,تيار,طاقة",
315diff --git a/kcms/sensors/main.cpp b/kcms/sensors/main.cpp
316index 8dae9f8f..ee70f381 100644
317--- a/kcms/sensors/main.cpp
318+++ b/kcms/sensors/main.cpp
319@@ -18,7 +18,7 @@ public:
320 explicit KCMSensors(QObject *parent, const KPluginMetaData &data)
321 : KQuickConfigModule(parent, data)
322 {
323- m_outputContext = new CommandOutputContext(u"sensors"_s, {}, parent);
324+ m_outputContext = new CommandOutputContext(u"@sensors@"_s, {}, parent);
325 m_outputContext->setAutoRefreshMs(1000);
326 }
327 CommandOutputContext *outputContext() const
328diff --git a/kcms/vulkan/kcm_vulkan.json b/kcms/vulkan/kcm_vulkan.json
329index 9a297a07..2c30b20a 100644
330--- a/kcms/vulkan/kcm_vulkan.json
331+++ b/kcms/vulkan/kcm_vulkan.json
332@@ -102,7 +102,7 @@
333 "Name[zh_CN]": "Vulkan",
334 "Name[zh_TW]": "Vulkan"
335 },
336- "TryExec": "vulkaninfo",
337+ "TryExec": "@vulkaninfo@",
338 "X-KDE-KInfoCenter-Category": "graphical_information",
339 "X-KDE-Keywords": "Vulkan,VideoCard,Hardware Acceleration,Graphics",
340 "X-KDE-Keywords[ar]": "Vulkan,VideoCard,Hardware Acceleration,Graphics,فولكان,بطاقة الفيديو,تسريع الأجهزة,الرسومات",
341diff --git a/kcms/vulkan/main.cpp b/kcms/vulkan/main.cpp
342index 5665d9d2..008f1bf0 100644
343--- a/kcms/vulkan/main.cpp
344+++ b/kcms/vulkan/main.cpp
345@@ -16,7 +16,7 @@ public:
346 explicit KCMVulkan(QObject *parent, const KPluginMetaData &data)
347 : KQuickConfigModule(parent, data)
348 {
349- m_outputContext = new CommandOutputContext(QStringLiteral("vulkaninfo"), {}, parent);
350+ m_outputContext = new CommandOutputContext(QStringLiteral("@vulkaninfo@"), {}, parent);
351 }
352 CommandOutputContext *outputContext() const
353 {
354diff --git a/kcms/wayland/kcm_wayland.json b/kcms/wayland/kcm_wayland.json
355index 66022b79..1756eb0e 100644
356--- a/kcms/wayland/kcm_wayland.json
357+++ b/kcms/wayland/kcm_wayland.json
358@@ -108,7 +108,7 @@
359 "Name[zh_CN]": "Wayland",
360 "Name[zh_TW]": "Wayland"
361 },
362- "TryExec": "wayland-info",
363+ "TryExec": "@waylandinfo@",
364 "X-KDE-KInfoCenter-Category": "graphical_information",
365 "X-KDE-Keywords": "Wayland,Compositor,Display,System Information",
366 "X-KDE-Keywords[ar]": "ويلاند,مراكب,عرض,معلومات النّظام",
367diff --git a/kcms/wayland/main.cpp b/kcms/wayland/main.cpp
368index 3a4825c7..4633927b 100644
369--- a/kcms/wayland/main.cpp
370+++ b/kcms/wayland/main.cpp
371@@ -16,7 +16,7 @@ public:
372 explicit KCMWayland(QObject *parent, const KPluginMetaData &data)
373 : KQuickConfigModule(parent, data)
374 {
375- m_outputContext = new CommandOutputContext(QStringLiteral("wayland-info"), {}, parent);
376+ m_outputContext = new CommandOutputContext(QStringLiteral("@waylandinfo@"), {}, parent);
377 }
378 CommandOutputContext *outputContext() const
379 {
380diff --git a/kcms/xserver/kcm_xserver.json b/kcms/xserver/kcm_xserver.json
381index a5e64d94..81190779 100644
382--- a/kcms/xserver/kcm_xserver.json
383+++ b/kcms/xserver/kcm_xserver.json
384@@ -148,7 +148,7 @@
385 "Name[zh_CN]": "X 服务器",
386 "Name[zh_TW]": "X 伺服器"
387 },
388- "TryExec": "xdpyinfo",
389+ "TryExec": "@xdpyinfo@",
390 "X-DocPath": "kinfocenter/graphical.html#xserver",
391 "X-KDE-KInfoCenter-Category": "graphical_information",
392 "X-KDE-Keywords": "X,X-Server,XServer,XFree86,Display,VideoCard,System Information",
393diff --git a/kcms/xserver/main.cpp b/kcms/xserver/main.cpp
394index df9af24a..e5983e22 100644
395--- a/kcms/xserver/main.cpp
396+++ b/kcms/xserver/main.cpp
397@@ -16,7 +16,7 @@ public:
398 explicit KCMXServer(QObject *parent, const KPluginMetaData &data)
399 : KQuickConfigModule(parent, data)
400 {
401- m_outputContext = new CommandOutputContext(QStringLiteral("xdpyinfo"), {}, parent);
402+ m_outputContext = new CommandOutputContext(QStringLiteral("@xdpyinfo@"), {}, parent);
403 }
404 CommandOutputContext *outputContext() const
405 {