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工具临时全局隐藏光标,应用退出后立刻恢复:
- 先在树莓派上安装依赖:
sudo apt update && sudo apt install -y unclutter
- 写应用启动脚本,控制隐藏逻辑的生命周期:
#!/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
相关产品推荐
相关产品推荐

