Rust桌面环境检测库detect-desktop-environment的使用,快速识别Linux/Unix系统桌面环境类型

Rust桌面环境检测库detect-desktop-environment的使用,快速识别Linux/Unix系统桌面环境类型

安装

在您的项目中运行以下命令:

cargo add detect-desktop-environment

示例用法

use detect_desktop_environment::DesktopEnvironment;

fn main() {
    match DesktopEnvironment::detect() {
        Some(de) => println!("检测到的桌面环境: {de:?}"),
        None => println!("无法检测桌面环境"),
    }
}

这个库公开了两个主要符号:detect函数和它的返回值DesktopEnvironment枚举。下面是完整的示例代码:

完整示例代码

// 引入桌面环境检测库
use detect_desktop_environment::DesktopEnvironment;

fn main() {
    // 检测当前桌面环境
    match DesktopEnvironment::detect() {
        Some(de) => {
            // 打印检测到的桌面环境
            println!("当前桌面环境: {:?}", de);
            
            // 可以根据不同桌面环境执行特定操作
            match de {
                DesktopEnvironment::Gnome => {
                    println!("检测到Gnome桌面环境");
                    // 执行Gnome特有的操作
                },
                DesktopEnvironment::Kde => {
                    println!("检测到KDE桌面环境");
                    // 执行KDE特有的操作
                },
                DesktopEnvironment::Xfce => {
                    println!("检测到XFCE桌面环境");
                    // 执行XFCE特有的操作
                },
                _ => println!("其他桌面环境"),
            }
        },
        None => println!("未检测到桌面环境或环境不支持"),
    }
}

支持的桌面环境

该库支持检测多种桌面环境,包括:

名称 缩略图
Cinnamon ![Cinnamon]
Cosmic ![COSMIC]
Cosmic Epoch ![COSMIC Epoch]
Dde ![Deepin DE]
Ede ![EDE]
Endless ![Endless]
Enlightenment ![Enlightenment]
Gnome ![Gnome]
Hyprland ![Hyprland]
Kde ![Kde]
Lxde ![Lxde]
Lxqt ![Lxqt]
MacOs ![MacOs]
Mate ![Mate]
Old ![Old]
Pantheon ![Pantheon]
Razor ![Razor]
Rox ![Rox]
Sway ![Sway]
Tde ![Tde]
Unity ![Unity]
Windows ![Windows]
Xfce ![Xfce]

维护状态

这个库已经稳定,预计不会有重大变化。如果您想改进这个库,可以随时提交问题或PR。

许可证

MIT许可证


1 回复

Rust桌面环境检测库detect-desktop-environment使用指南

detect-desktop-environment是一个轻量级的Rust库,用于快速识别Linux/Unix系统上运行的桌面环境类型。

功能特性

  • 支持检测常见桌面环境(GNOME, KDE, XFCE等)
  • 支持检测窗口管理器(i3, sway等)
  • 支持检测终端环境(是否在SSH会话中)
  • 跨平台支持(主要针对Linux/Unix系统)
  • 无外部依赖

基本用法示例

添加依赖

[dependencies]
detect-desktop-environment = "0.1"

检测桌面环境

use detect_desktop_environment::DesktopEnvironment;

fn main() {
    let de = DesktopEnvironment::detect();
    println!("当前桌面环境: {:?}", de);
    
    match de {
        DesktopEnvironment::Gnome => println!("你正在使用GNOME桌面"),
        DesktopEnvironment::Kde => println!("你正在使用KDE Plasma桌面"),
        DesktopEnvironment::Xfce => println!("你正在使用XFCE桌面"),
        DesktopEnvironment::Unknown => println!("无法识别或没有桌面环境"),
        _ => println!("其他桌面环境: {:?}", de),
    }
}

检测窗口管理器

use detect_desktop_environment::WindowManager;

fn main() {
    let wm = WindowManager::detect();
    println!("当前窗口管理器: {:?}", wm);
    
    if wm == WindowManager::I3 {
        println!("你正在使用i3窗口管理器");
    }
}

检测终端环境

use detect_desktop_environment::is_ssh_session;

fn main() {
    if is_ssh_session() {
        println!("当前在SSH会话中");
    } else {
        println!("当前不在SSH会话中");
    }
}

完整示例代码

// 引入必要的模块
use detect_desktop_environment::{DesktopEnvironment, WindowManager, is_ssh_session};

fn main() {
    // 检测桌面环境
    let de = DesktopEnvironment::detect();
    println!("=== 桌面环境检测 ===");
    println!("当前桌面环境: {:?}", de);
    
    match de {
        DesktopEnvironment::Gnome => {
            println!("你正在使用GNOME桌面");
            // 获取GNOME版本信息
            if let Some(version) = DesktopEnvironment::gnome_version() {
                println!("GNOME版本: {}", version);
            }
        },
        DesktopEnvironment::Kde => {
            println!("你正在使用KDE Plasma桌面");
            // 获取KDE版本信息
            if let Some(version) = DesktopEnvironment::kde_version() {
                println!("KDE Plasma版本: {}", version);
            }
        },
        DesktopEnvironment::Xfce => println!("你正在使用XFCE桌面"),
        DesktopEnvironment::Unknown => println!("无法识别或没有桌面环境"),
        _ => println!("其他桌面环境: {:?}", de),
    }
    
    // 检测窗口管理器
    println!("\n=== 窗口管理器检测 ===");
    let wm = WindowManager::detect();
    println!("当前窗口管理器: {:?}", wm);
    
    match wm {
        WindowManager::I3 => println!("你正在使用i3窗口管理器"),
        WindowManager::Sway => println!("你正在使用sway窗口管理器"),
        WindowManager::Awesome => println!("你正在使用awesome窗口管理器"),
        WindowManager::Unknown => println!("使用默认窗口管理器或无法识别"),
        _ => println!("其他窗口管理器: {:?}", wm),
    }
    
    // 组合检测桌面环境和窗口管理器
    println!("\n=== 组合检测 ===");
    if de == DesktopEnvironment::Gnome && wm == WindowManager::Unknown {
        println!("你正在使用GNOME默认的窗口管理器");
    } else if de == DesktopEnvironment::Kde && wm == WindowManager::Unknown {
        println!("你正在使用KDE默认的窗口管理器");
    }
    
    // 检测终端环境
    println!("\n=== 终端环境检测 ===");
    if is_ssh_session() {
        println!("当前在SSH会话中");
    } else {
        println!("当前不在SSH会话中");
    }
    
    // 显示所有支持的桌面环境和窗口管理器
    println!("\n=== 支持的环境列表 ===");
    println!("支持的桌面环境:");
    println!("GNOME, KDE, XFCE, LXDE, LXQT, MATE, Cinnamon, Budgie, Unity, Pantheon, Deepin");
    
    println!("\n支持的窗口管理器:");
    println!("i3, sway, awesome, bspwm, dwm, xmonad, herbstluftwm, qtile");
}

支持的桌面环境

  • GNOME
  • KDE
  • XFCE
  • LXDE
  • LXQT
  • MATE
  • Cinnamon
  • Budgie
  • Unity
  • Pantheon (Elementary OS)
  • Deepin
  • Unknown (无法识别)

支持的窗口管理器

  • i3
  • sway
  • awesome
  • bspwm
  • dwm
  • xmonad
  • herbstluftwm
  • qtile
  • Unknown (无法识别)

注意事项

  1. 该库主要通过检查环境变量和进程信息来检测桌面环境
  2. 在某些情况下可能无法准确检测(如自定义环境)
  3. 在无桌面环境的服务器上会返回Unknown
  4. 在Windows和macOS上功能有限

这个库非常适合需要根据用户桌面环境调整应用行为或UI的Rust应用程序开发者使用。

回到顶部