极客油画

虽然linux桌面一言难尽,但是这不影响linux作为自己的主操作系统,
因为linux中运行windows或者mac的虚拟机性能损耗极低,但是windows或者mac中运行linux虚拟机性能损耗极大。

概念:

  • opengl/vulkan: 定义如何绘制三角形、纹理、光照等,但不关心图像如何显示到屏幕。
    • 开源实现: dioxus->wgpu->[vulkan/opengl前端,例如ash和glow和mesa3d前端api]->[vulkan/opengl后端,例如mesa3d后端api]->mesa3d驱动->gpu硬件
    • mesa3d驱动:硬件驱动模块(如 Intel i965、AMD RadeonSI)
    • mesa3d-api:OpenGL/Vulkan API 的底层实现,包括前端实现,和后端实现。
  • X11/Wayland: 决定窗口如何排列、输入如何传递,以及最终图像如何呈现给用户。
    • X11已进入维护状态,不再接受新功能,Wayland作为linux图形显示的未来已经不可逆转。
    • GNOME 50将在2026年3月完全移除X11代码。
    • cosmic桌面更彻底,完全基于Wayland开发,跨平台gui框架使用的是iced,不依赖gtk和qt这类c或c++写的gui框架。
    • X11采用客户端-服务器模型,应用程序(客户端)需通过X服务器中转图形渲染和输入事件,导致额外的通信开销。
    • Wayland采用的是本地高性能渲染,没有网络开销。

将im软件和会议软件分离是有意义的:

  • 开会的人是未知的,如果把im软件和会议软件合并在一起,会导致开个会还需要加个好友或者加入组织。
  • 会议软件支持屏幕远程控制功能是有意义,im软件支持屏幕远程控制是没有意义的。

ubuntu

Fedora 有出口管制策略,不建议国内使用。

Canonical宣布从Ubuntu 25.10版本开始逐步淘汰GNU组件,转向Rust实现的核心工具。

yum使用python写的,dnf使用c++和python写的,apt使用c++写的,未来apt会使用rust重构。

  1. 使用命令行对snap-store“切换频道”
$ sudo snap refresh snap-store --channel=<channel-name>

# 其中,<channel-name>可以是以下常用频道之一:
# * stable : 稳定版(推荐日常使用)
# * beta : 测试版(包含新功能预览)
# * edge : 开发版(每日构建,最不稳定)
# * candidate : 候选版(接近稳定版)

可以通过以下命令验证当前使用的频道:

snap info snap-store

在输出信息中查看"tracking"字段,即可确认当前使用的频道。

  1. 设置光标大小

设置/无障碍/视觉/指针大小

  1. 设置Dock

设置/Ubuntu桌面/Dock/Position On Screen

gnome

gnome只支持linux操作系统,为何使用 gtk这种跨平台的gui库呢?直接调用wayland不是更好么

  1. gnome shell

GNOME 3 的插件(扩展)主要基于 JavaScript 和 GJS(GNOME JavaScript 引擎),通过修改 GNOME Shell 的运行时对象(如 MetaWindow、St 等)来实现功能。

GNOME 3 早期版本的官方扩展 API 功能有限,许多高级定制(如修改工作区行为、调整窗口动画)只能通过直接操作内部对象实现。

不通过插件API接口,而是通过对象的属性来编写的插件,导致只要 Gnome3 的核心代码一改变,或者属性链中的任一一个变量发生了变化,Gnome3插件就失效了。

  1. GNOME Display Manager

简称gdm,配置文件位置 /etc/gdm3/

当你启动一台安装了 GNOME的 Linux 电脑时,你看到的那个让你输入用户名和密码的界面,通常就是 GDM。

它负责启动 X Server 或 Wayland Compositor,验证用户身份,并加载该用户的桌面环境 GNOME。

  1. gnome-shell-extension-manager

安装命令: sudo apt install gnome-shell-extension-manager

之后就可以点击“扩展管理器”桌面图标,打开“扩展管理器”。

在它的“浏览”界面,可以搜索各种插件,并安装选中的插件。

必装插件:

  • kimpanel:提供更好的输入法状态显示
  1. gnome-remote-desktop

同时支持vnc和rdp协议,但是只能作为服务端,客户端的话需要使用如下技术:

  • vnc: 使用浏览器来访问
  • rdp: 使用freerdp命令行工具来访问。wfreerdp.exe /v:ip地址 /u:用户名/p:"密码" +dynamic-resolution | findstr "^"
    • /drive:是 FreeRDP 中用于设置本地文件夹重定向的参数,它允许你将本地文件夹映射为远程系统中的网络驱动器。
      # 将本地 /home/user/Documents 映射为远程驱动器的 "MyDocs"
      wfreerdp /drive:MyDocs,/home/user/Documents /v:server.example.com
      
      # 在 Windows 客户端上
      wfreerdp /drive:MyDocs,C:\Projects /v:server.example.com
      
      • 连接后,在远程系统中:
        • Windows:在"此电脑"中看到网络位置,如 \tsclient\MyDocs
        • Linux:通常挂载在 /mnt/tsclient/MyDocs或类似路径
    • windows: wfreerdp, linux-x11: xfreerdp, linux-wayland: wlfreerdp

输入法

  1. fcitx5设置

安装依赖:sudo apt install fcitx5-chinese-addons libime-bin

fcitx配置/附加组件/输入法/拼音

  • 管理词库/导入/来自搜狗细胞词库文件
  • 快速输入的触发键:设置为空
  1. libinput,evdev,fcitx5,dbus 的关系
  • evdev是Linux内核的输入事件驱动,负责将物理设备的原始输入信号转换为标准事件流;

    • 位于/dev/input/event*设备节点
  • libinput是用户空间的输入处理库,对evdev事件进行高级处理(如手势识别、触摸板优化);

    • 在Wayland环境下,libinput直接与合成器交互;
    • 在X.Org环境下,通过xf86-input-libinput驱动与X服务器通信。
  • fcitx5是输入法框架,最终将经libinput处理后的输入事件转换为文字输出。

    • 支持多种输入法引擎(如拼音、五笔、Rime等),提供词库管理、云输入、智能联想等功能
    • fcitx5通过输入法模块(fcitx5-qt、fcitx5-gtk)与应用程序交互
  • DBus是通信桥梁:evdev、libinput、fcitx5都是独立组件,DBus使它们能在不同进程间协作

  • fcitx5 和 fcitx4 的区别:

    • fcitx4和fcitx5不能共存,需要先卸载fcitx4再安装fcitx5
    • fcitx5可模拟IBus框架,兼容性更强
    • fcitx5原生支持Wayland,fcitx4对Wayland的支持有限
    • fcitx5支持各种插件,fcitx4的插件比较有限
  1. gnome 46的默认输入法,如何从ibus改为fcitx5呢?
# 安装fcitx5框架、配置工具和中文输入法引擎
sudo apt install fcitx5 fcitx5-configtool fcitx5-chinese-addons

# 安装前端界面支持(确保GTK/Qt程序正常使用)
sudo apt install fcitx5-frontend-gtk3 fcitx5-frontend-gtk4 fcitx5-frontend-qt5

# 添加fcitx5的环境变量
sudo cat >> /etc/environment << EOF
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
EOF

# 针对GNOME Wayland的额外配置(可选)
# 如何确认GNOME 46使用Wayland: echo $XDG_SESSION_TYPE
gsettings set org.gnome.settings-daemon.plugins.xsettings overrides "{'Gtk/IMModule':<'fcitx'>}"

修改系统默认输入法框架:

  • 方法1: 设置/系统/区域和语言/管理已安装的语言/在"键盘输入法系统"下拉菜单中,选择"fcitx5"
  • 方法2: im-config -n fcitx5

GNOME通常会自动启动Fcitx5,若未启动可手动添加:

  • 打开"启动应用程序"(gnome-session-properties)
  • 添加新条目:名称填"Fcitx5",命令填fcitx5 -d
  • 保存后重启验证

fcitx5的错误信息,可以使用fcitx5-diagnose命令查看

附录A 华为笔记本

  1. 如何解决没有声音的问题
# 解除耳机静音控制
amixer -c 0 set Headphone unmute

# 将音量设置为30%
amixer -c $CARD_NUMBER -M set Headphone 30%

或者,命令行执行alsamixer,在弹出的界面按F6,在弹出的界面选项中选择default:0 sof-hda-dsp,切到Headphone,然后按M键。

  1. 开机功能键

F2 BIOS/UEFI 设置

F12 启动菜单(Boot Menu)

Esc 总控菜单

附录B windows桌面

  1. 安装msys2

官网: https://www.msys2.org

github: https://github.com/msys2/msys2-installer

镜像地址: https://mirrors.tuna.tsinghua.edu.cn/msys2/distrib/x86_64/

安装位置: D:\software\msys64

在终端内启动msys2: D:\software\msys64\msys2_shell.cmd -ucrt64 -defterm -no-start -here

  1. 配置pacman镜像

pacman是arclinux中的软件管理工具,也是widows上msys2默认的软件管理工具。

镜像地址:https://mirrors.tuna.tsinghua.edu.cn/help/msys2/

启动msys2,并执行如下命令:

1
sed -i "s#https\?://mirror.msys2.org/#https://mirrors.tuna.tsinghua.edu.cn/msys2/#g" /etc/pacman.d/mirrorlist*

执行 pacman -Sy 刷新软件包数据

解决错误:clangarm64: 密钥 "5F944B027F7FE2091985AA2EFA11531AA0AA7F57" 未知问题:

1
2
3
4
# 编辑/etc/pacman.conf文件,设置这三个配置
SigLevel    = Never
LocalFileSigLevel = Optional
RemoteFileSigLevel = Never
  1. pacman常用命令

pacman -Sy: 从服务器下载新的软件包数据库(实际上就是下载远程仓库最新软件列表到本地)。

pacman -Syu: 升级系统及所有已经安装的软件。

pacman -S 软件名: 安装软件。也可以同时安装多个包,只需以空格分隔包名即可。

pacman -Rs 软件名: 删除软件,同时删除本机上只有该软件依赖的软件。

pacman -Ru 软件名: 删除软件,同时删除不再被任何软件所需要的依赖。

pacman -Ssq 关键字: 在仓库中搜索含关键字的软件包,并用简洁方式显示。

pacman -Qs 关键字: 搜索已安装的软件包。

pacman -Qi 软件名: 查看某个软件包信息,显示软件简介,构架,依赖,大小等详细信息。

pacman -Sg: 列出软件仓库上所有的软件包组。

pacman -Sg 软件包组: 查看某软件包组所包含的所有软件包。

pacman -Sc:清理未安装的包文件,包文件位于 /var/cache/pacman/pkg/ 目录。

pacman -Scc:清理所有的缓存文件

附录C 安卓的HAL层 和 鸿蒙的HDF层

安卓的硬件抽象层(HAL)是连接 Android 操作系统与底层硬件设备的核心桥梁。它的主要意义在于屏蔽不同硬件的具体实现细节,为上层框架和应用提供统一、稳定的硬件访问接口

因为 Android 通过将硬件支持的复杂性从内核空间转移到用户空间的 HAL,所以,安卓的内核是linux,是宏内核,但是其驱动接口依然稳定。

Android HAL 并非一成不变,其主要经历了三个阶段:

  • 传统 HAL(Android 8.0 之前):以 .so动态库形式存在,通过 hw_get_module()加载
  • HIDL(Android 8.0 及以后):引入 HAL 接口定义语言(HIDL),支持 Binder IPC 进程间通信,HAL 可运行于独立进程,进一步增强了稳定性和安全性
  • AIDL HAL(Android 11 及以后):逐步采用 AIDL(Android Interface Definition Language)来定义接口,旨在简化开发流程

微内核将系统核心功能(如文件系统、设备驱动、网络协议栈等)作为独立的服务运行在用户态,与最核心的内隔离开,安卓的HAL实际上借鉴了微内核的思想,但是又保留了宏内核的性能优势。

OpenHarmony 的 HDF(Hardware Driver Foundation)驱动框架的目标是让驱动开发者能专注于硬件操作本身,而不必过多纠结于驱动与系统其他模块的交互。它通过几种核心设计来实现这一点:

  • 驱动模型抽象与组件化:HDF 为常见类型的设备(如 Audio、Camera、Sensor 等)提供了标准化的驱动模型。开发者更多地是进行“适配”而非“从零创造”,这提升了开发效率,也使得驱动更容易在不同硬件平台间迁移。
  • 配置与代码分离:驱动通过 .hcs(HDF Configuration Source) 配置文件来定义硬件资源、设备属性、加载策略等。
  • 统一的驱动接口(HDI):HDF 通过 Hardware Driver Interface (HDI)​ 为上层系统服务提供标准化的硬件操作接口。
  • 灵活的加载与部署:HDF 支持驱动按需动态加载和静态加载,并允许驱动根据需要部署在内核态 (KHDF) 或用户态 (UHDF)。用户态部署可以增强系统稳定性(驱动崩溃不会导致内核恐慌),而内核态部署则利于追求极致性能。

本文发表于 0001-01-01,最后修改于 0001-01-01。

本站永久域名「 jiavvc.top 」,也可搜索「 极客油画 」找到我。


上一篇 « 下一篇 »

赞赏支持

请我吃鸡腿 =^_^=

i ysf

云闪付

i wechat

微信

推荐阅读

Big Image