You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin Jetpack Compose for Desktop如何仅在应用运行时隐藏鼠标指针

Compose Desktop 运行时仅在应用内隐藏鼠标指针方案(适配Raspberry Pi 4B 触摸屏场景)

不要用修改lightdm.conf的全局配置方案,那个确实会让整个X11会话永久隐藏光标,不符合按需隐藏的需求,以下两个方案都不会修改系统全局设置,应用退出后光标自动恢复:

  • 方案1:Compose 内API实现(优先推荐,无额外依赖,仅当前应用窗口生效)
    Compose Desktop 底层基于AWT渲染,直接给窗口设置内置的隐藏光标类型即可,兼容所有运行X11桌面的树莓派系统,哪怕应用崩溃退出,窗口销毁后光标也会自动恢复,不需要写额外的兜底逻辑。
    实现代码如下:
import androidx.compose.ui.Modifier
import androidx.compose.ui.fillMaxSize
import androidx.compose.ui.window.Window
import androidx.compose.ui.window.application
import java.awt.Cursor

fun main() = application {
    Window(
        onCloseRequest = ::exitApplication,
        title = "触摸屏应用",
        modifier = Modifier.fillMaxSize()
    ) {
        // 仅当前窗口隐藏光标
        window.cursor = Cursor.getPredefinedCursor(Cursor.HIDDEN_CURSOR)
        
        // 下方编写你的业务UI代码
    }
}

这个方案的优势是光标仅在你的应用窗口内隐藏,如果用户切到其他系统应用,光标会正常显示,适配所有场景。

  • 方案2:进程级临时隐藏(适合全屏独占、用户不会切出应用的触摸屏场景)
    如果用的是低版本Compose Desktop不支持上面的API,可以借助unclutter工具临时全局隐藏光标,应用退出后立刻恢复:
  1. 先在树莓派上安装依赖:
sudo apt update && sudo apt install -y unclutter
  1. 写应用启动脚本,控制隐藏逻辑的生命周期:
#!/bin/bash
# 启动光标隐藏进程,鼠标无移动立刻隐藏
unclutter -idle 0 -root &
HIDE_PID=$!

# 启动你的Compose应用
java -jar /path/to/your/app.jar

# 应用退出后杀掉隐藏进程,光标自动恢复
kill $HIDE_PID

这个方案的缺点是应用运行期间切到其他窗口也看不到光标,适合kiosk模式的全屏触摸屏应用。

补充说明:不要使用修改/etc/lightdm/lightdm.conf添加xserver-command = X -nocursor的方案,这个是X服务器级别的全局配置,开启后整个系统所有场景都不会显示光标,包括桌面、其他应用、终端界面,除非改回配置重启X服务,完全不匹配你的需求,不需要测试这个方案。

内容的提问来源于stack exchange,提问作者supercolo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:03:50