Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion system/inputdevices1/inputdevices.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,12 @@ func (m *InputDevices) init() {
logger.Warning(err)
return
}
err = m.touchpad.setTouchpadEnable(v.Value().(bool))
enabled := v.Value().(bool)
// 启动恢复:直接根据 dconfig 重建 udev 规则文件。
// 不调用 setTouchpadEnable,因为 newTouchpad 已将 Enable 设为 dconfig 值,
// setPropEnable 会判定 changed=false 从而跳过 udev 写入,
// 导致强制关机后 udev 规则文件丢失但无法重建。
err = m.touchpad.setTouchpadEnableViaUdev(enabled)
if err != nil {
logger.Warning(err)
}
Expand Down
20 changes: 18 additions & 2 deletions system/inputdevices1/touchpad.go
Original file line number Diff line number Diff line change
Expand Up @@ -154,8 +154,24 @@ func (t *Touchpad) setTouchpadEnableViaUdev(enabled bool) error {
return nil
}

// 创建或覆盖 udev 规则文件
if err := os.WriteFile(udevRuleFile, []byte(udevRuleContent), 0644); err != nil {
// 创建或覆盖 udev 规则文件,使用 fsync 确保落盘,
// 防止强制关机(断电)时 page cache 丢失导致规则文件丢失
f, err := os.Create(udevRuleFile)
if err != nil {
return err
}
_, err = f.Write([]byte(udevRuleContent))
if err != nil {
f.Close()
return err
}
err = f.Sync()
if err != nil {
f.Close()
return err
}
err = f.Close()
if err != nil {
return err
}
logger.Info("created udev rule file:", udevRuleFile)
Expand Down
Loading