首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在进入或退出tablet模式时重新配置屏幕方向的Bash脚本

在进入或退出tablet模式时重新配置屏幕方向的Bash脚本
EN

Code Review用户
提问于 2019-10-13 16:05:40
回答 1查看 53关注 0票数 4

我正在为我的平板电脑编写bash脚本,根据Manjaro中的文件来翻转屏幕。我的当前脚本如下:

代码语言:javascript
复制
while true
do
    state=$(cat /sys/devices/platform/thinkpad_acpi/hotkey_tablet_mode) #This file indicates if it's in tablet mode or not
    if [[ $state == 0 && $oldState == 1 ]]
    then
        xrandr --output LVDS1 --rotate normal
        xsetwacom --set "$a" Rotate none
        xsetwacom --set "$b" Rotate none
        xsetwacom --set "$c" Rotate none
        oldState=0
    elif [[ $state == 1 && $oldState == 0 ]]
    then
        xrandr --output LVDS1 --rotate inverted
        xsetwacom --set "$a" Rotate half
        xsetwacom --set "$b" Rotate half
        xsetwacom --set "$c" Rotate half
        oldState=1
        /home/eto/scripts/backlight 0
    fi
    sleep 1s
done

if语句中的代码并不重要,但我担心的是它检查平板模式的整个逻辑。是否有更好的方法来检查平板模式指示文件而不是while循环?我觉得这是一种非常低效率的方法,因为它经常读取磁盘,但我不知道如何才能这样做。任何输入都是非常感谢的,因为我是一个非常业余的编码。

EN

回答 1

Code Review用户

回答已采纳

发布于 2019-10-13 22:18:20

到目前为止,我喜欢你所做的大部分工作:

  • 对条件词使用[[ (双方括号)是一种很好的做法。
  • 使用$()代替经典的backticks命令替换也是一种很好的现代shell实践。
  • 您的大多数变量替换都是引用的。这是一个很好的习惯,以防变量包含空间,它不会被shell解析所破坏。

可能是更好的

有些小事情我会改进的:

  • 在顶部包括#!
  • 通常,您会看到人们将他们的thens添加到前面一行的末尾,比如if [[ cond ]]; then。您的外部循环也可以作为while true; do执行。
  • 这句话在右边有点失传了。为什么不把它放在上面的线上呢?

思考

脚本每秒钟都会被调用,并占用一定数量的CPU。在这种情况下,可能没有多少CPU被烧毁,但有一件事要考虑的是,这种轮询是否可以避免。Linux将inotify作为一个函数,让进程在文件更改时知道,这样他们就不必不断地检查文件本身。这在shell中可以通过inotifywait获得。如果您正在检查的文件与inotifywait一起工作,则可以避免使用sleep

除了节省CPU不跳过sleep之外,还有一个好处是脚本应该以较低的延迟运行。您的脚本将在一小部分秒内调用,而不需要等待多达一秒才能检测到更改。

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/230649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档