系統版本資訊
本文面向的麒麟系統版本資訊如下:
$ cat /etc/os-release
NAME="Kylin"
VERSION="銀河麒麟桌面作業系統(教育版)V10"
VERSION_US="Kylin Linux Desktop EDU V10"
ID=kylin
ID_LIKE=debian
PRETTY_NAME="Kylin V10 SP1"
VERSION_ID="v10"
HOME_URL="http://www.kylinos.cn/"
SUPPORT_URL="http://www.kylinos.cn/support/technology.html"
BUG_REPORT_URL="http://www.kylinos.cn/"
PRIVACY_POLICY_URL="http://www.kylinos.cn"
VERSION_CODENAME=kylin
UBUNTU_CODENAME=kylin
PROJECT_CODENAME=V10SP1-General-Edu
KYLIN_RELEASE_ID="2403"
系統為從麒麟拿到的系統,沒有經過什麼更改。如無特殊說明,本文均採用此係統版本
讀取麒麟系統的各項版本資訊
讀取麒麟系統的各項版本資訊
圖示在工作列上
不能在 MapWindow 之後,透過傳送 ClientMessage 訊息的方式,透過 _NET_WM_STATE_SKIP_TASKBAR
設定應用不在工作列顯示圖示
必須要在 MapWindow 之前完成 _NET_WM_STATE_SKIP_TASKBAR
的設定。由於在視窗 Map 之前呼叫,不能利用桌面管理器輔助設定,需要透過 XChangeProperty 進行設定
在麒麟系統讓圖示不在工作列上顯示的方法如下
var _NET_WM_STATE_SKIP_TASKBAR = XInternAtom(Display, "_NET_WM_STATE_SKIP_TASKBAR", false);
ChangeWMAtomsByXChangeProperty(true, _NET_WM_STATE_SKIP_TASKBAR);
XMapWindow(Display, Window);
XFlush(Display);
private unsafe void ChangeWMAtomsByXChangeProperty(bool enable, params IntPtr[] atoms)
{
var wmState = XInternAtom(Display, "_NET_WM_STATE", true);
XGetWindowProperty(Display, Window, wmState, IntPtr.Zero, new IntPtr(256),
false, (IntPtr) Atom.XA_ATOM, out _, out _, out var nitems, out _,
out var prop);
var ptr = (IntPtr*) prop.ToPointer();
var newAtoms = new HashSet<IntPtr>();
for (var c = 0; c < nitems.ToInt64(); c++)
{
newAtoms.Add(*ptr);
ptr++;
}
XFree(prop);
foreach (var atom in atoms)
{
if (enable)
{
newAtoms.Add(atom);
}
else
{
newAtoms.Remove(atom);
}
}
XChangeProperty(Display, Window, wmState, (IntPtr) Atom.XA_ATOM, 32,
PropertyMode.Replace, newAtoms.ToArray(), newAtoms.Count);
}
以上的 ChangeWMAtomsByXChangeProperty 方法的實現是從 Avalonia 裡面抄的,且是經過 walterlv 在 https://github.com/AvaloniaUI/Avalonia/pull/16110 修復之後的程式碼
攔截問題
記 Kylin 麒麟系統安全中心攔截導致 dotnet sdk 找不到 OpenSsl 構建失敗
dotnet 記龍芯麒麟教育版安全中心攔截檔案 導致 docker 內 CI CD 構建失敗
更多相關部落格
- dotnet 8 版本與銀河麒麟V10和UOS系統的 glibc 相容性
更多國產化相關開發部落格,請參閱 部落格導航