令人赏心悦目

令人赏心悦目

我在 Acer Aspire E5-773G 笔记本上运行 Ubuntu 16.04。不幸的是,我无法在登录屏幕上使用亮度功能键,因此我能够在成功输入密码并登录后第一次更改屏幕背光亮度。

默认情况下,Ubuntu 会以上次关机时设置的亮度级别启动,但这并不是很有用,例如,有时我会在深夜以大约 5% 的亮度级别关机,第二天再次启动时,我需要至少 50% 的亮度级别才能舒适地看到所有内容。相反,如果我在白天以大约 80% 的亮度关机,然后在晚上启动它,我几乎会被灯光晃得睁不开眼……

如何配置 Ubuntu 以根据当前白天的亮度级别启动?我希望在 22:00 到 06:00 之间亮度为 10%,在 10:00 到 16:00 之间亮度为 60%,在中间亮度为 30%。平滑曲线是可以的,只要它保持易于配置即可。或者,如果您找到一种根据当地日落/日出时间进行设置的方法,那将是一个很大的好处。:)

根据这些规则修改亮度只能在启动期间或从挂起状态唤醒时进行。在我工作时它可能不会自动更改亮度。

答案1

基本思想:

  1. 保存配置文件/opt/.time_brightness_values

    {
      "5,7": 0.25,
      "8,16": 0.50,
      "17,22": 0.75
    }
    

    注意带引号的值和逗号。带引号的值的第一列表示 24 小时制的小时范围,第二列表示百分比。例如,如果您从 5 点到 7 点启动,亮度将设置为 25%。如果您从 8 点到 16 点启动,亮度将设置为 50%。

  2. 将以下脚本保存为/opt/set_timed_brightness.py

    #!/usr/bin/env python3
    from __future__ import print_function
    from collections import OrderedDict
    import json
    import time
    import sys
    import os
    
    def read_config():
        dir = '/opt'
        filename = '.time_brightness_values'
        conf_file = os.path.join(dir,filename)
        brightness = None
        with open(conf_file) as f:
             try:
                  data = json.load(f)
                  data = OrderedDict(sorted(data.items()))
             except Exception as e:
                  print(e)
                  sys.exit(1)
             else:
                  keys = [ key.split(',') for key,value in data.items()]
                  keys.sort()
    
                  hour =  time.localtime().tm_hour
                  for key in keys:
                      if int(key[0]) <= hour and int(key[1]) >= hour:
                         brightness = data[','.join(key)]  
    
        return brightness
    
    def set_percentage(pcent):
        dir = os.listdir('/sys/class/backlight')
        dev = os.path.join('/sys/class/backlight',dir[0])   
    
        max = None
        with open(os.path.join(dev,'max_brightness')) as f:
            max = f.readline().strip()
    
        new = int(float(max)*pcent)
        new = str(new)
        with open(os.path.join(dev,'brightness'),'w') as f:
             f.write(new)
    
    def main():
        percentage = read_config()
        if percentage:
            set_percentage(percentage)
    
    
    if __name__ == '__main__':
        main()
    
  3. greeter-setup-script=/opt/set_timed_brightness.py在文件中设置/etc/lightdm/lightdm.conf。欢迎设置脚本以 root 身份运行,一旦您的系统进入登录屏幕,该脚本将运行并设置您需要的亮度。

  4. 至于从挂起状态唤醒,创建/etc/pm/sleep.d/set_timed_brightness.sh

    #!/bin/bash
    
    case "${1}" in
            resume|thaw) python3 /opt/set_timed_brightness.py
        ;;
    esac
    

记住:所有标准规则均适用,脚本必须可执行chmod +x,并且每个文件的命名和调用必须一致。

答案2

令人赏心悦目

Eyesome 是一个以守护进程形式运行的 bash 脚本,24/7 大部分时间处于休眠状态。它通过硬件接口自动调整笔记本电脑显示屏的屏幕亮度(也可以选择调整伽玛值),并使用xrandr软件控制最多调整另外两台显示器的屏幕亮度。

日出时(每天自动从互联网获取时间),屏幕亮度和伽玛(又称色温、色调或色调)会逐渐调整。日落前,夜间设置会逐渐调整。在这两个时间段之间,这些令人赏心悦目的守护进程会休眠数小时。

eyesome 与 Redshift、Night Light 和类似产品的区别在于,它能够同时控制三台具有独特设置的显示器。同样值得注意的是,eyesome 除了控制色温外,还控制亮度(硬件和软件)。

Eyesome 设置 - 主菜单

运行时,sudo eyesome-cfg.sh主菜单将出现:

eyesome 主菜单.png

编辑配置 - 常规选项卡

当您点击编辑主菜单中的按钮编辑配置常规选项卡最初显示如下。

eyesom配置常规选项卡.png

如果“亮度更新间隔”太短,可能会导致硬件亮度调整太小,而有些笔记本电脑会忽略它。如果您的屏幕在日落前没有变暗,请将间隔增加到 60 秒或更长。您可以在“监视器”选项卡上查看当前亮度级别变化。例如,如果您看到每个更新间隔的级别变化小于 21,则对于 Dell Alienware 17R3 笔记本电脑来说,这个间隔太短了。然而,在 Dell Inspiron 17" 7720 SE 笔记本电脑上,亮度变化 1 可以正常工作。

您的“国家/城市名称”应会自动出现。如有必要,您可以覆盖它。

“监视外部显示器插入/电源切换”复选框也适用于某些应用程序随机调用颜色管理 dbus 守护程序,该守护程序会重置xrandr为 100% 亮度和伽玛。除非有充分理由不这样做,否则您应该选中此框。

编辑配置 - 监视器 1 选项卡

单击“监视器 1”选项卡会在我的配置中显示此面板(您的配置可能有所不同):

eyeshem-编辑-配置监视器-1.png

不要被这些设置吓到,因为大多数设置都是由 eyesome 自动获取的。不过,您需要设置白天和夜晚的亮度/级别。

如果红色、绿色和蓝色的伽马值令人生畏,您可以稍后使用覆盖主菜单中的按钮。在那里,您可以访问色温滑块控件,其中 3500 是典型的夜间设置,6500 是典型的白天设置。典型的白天设置是红色、绿色和蓝色通道的 1.0,这是每个系统的默认值。

编辑配置 - 监视器 3 选项卡

单击“监视器 3”选项卡会在我的配置中显示此面板(您的配置可能有所不同):

显示器 2 选项卡未显示,因为它是具有自适应亮度和智能操作系统的新电视。它不需要 Eyesome 覆盖。

在此处输入图片描述

安装 eyesome 后,大部分配置都会自动创建。如果稍后您连接了其他显示器,则可能需要输入xrandr显示器名称。

Eyesome 设置 - 5 秒测试

在主菜单中,您可以点击白天夜间按钮。您可以从“编辑配置 - 常规”选项卡中将测试持续时间从 1 秒更改为 20 秒。

以下是 5 秒夜间测试的内容:

赏心悦目的夜间测试.gif

在现实生活中,如果你在白天进行测试,你会看到屏幕会急剧变暗。但是用于制作上述 .gif 动画的屏幕录像机无法记录亮度或色温(伽马)变化。

令人赏心悦目的覆盖

当您点击覆盖单击主菜单中的按钮,将出现以下窗口:

eyesom覆盖主窗口.png

毫无疑问,你的第一步是点击帮助使用此窗口按钮:

eyesom覆盖帮助按钮.png

假设我们点击得到按钮并选择监视器 3,夜间设置:

eyesom override monitor 3 nightime.png

现在我们在内存中有了默认值,请单击颜色按钮:

eyesome 覆盖色温到 gamma.png

抓住滑块并将其向左移动,以获得夜间的暖色/偏红颜色设置。向右移动滑块以获得白天的冷色/偏蓝颜色设置。点击转变按钮来计算红色,绿色,蓝色伽马通道或辞职如果您改变主意,请按下按钮。

异常事件处理

假设您在早上上班前将笔记本电脑挂起,屏幕完全暗淡。下班后,当太阳高挂天空时,您回到家并打开笔记本电脑。现在屏幕太暗了,很难阅读。

为了解决这种情况,提供了 systemd 控制文件:

  • /etc/systemd/system-sleep/systemd-wake-eyesome每当系统暂停或恢复时,都会调用控制文件。
  • 控制文件调用bash脚本/usr/local/bin/wake-eyesome.sh根据时间设置亮度,然后睡眠直到下一个过渡期。

晚上,您正在外接电视上观看电影,为了更好地观看,您合上了笔记本电脑盖。Ubuntu / Lightdm / xrandr 需要几秒钟的时间,然后将外接电视重置为全亮度。您的眼睛真疼。

为了解决这种情况,提供了 acpi 事件控制文件:

  • /etc/acpi/event/lid-event-eyesome每当打开或关闭笔记本电脑盖时,都会调用控制文件。
  • 控制文件调用bash脚本/etc/acpi/acpi-lid-eyesome.sh来处理盖子的打开和关闭。
  • 反过来,令人赏心悦目的 bash 脚本会/usr/local/bin/wake-eyesome.sh调用重置亮度以方便夜间观看,然后休眠直到日落。

概括

这个答案是在问题发布后近两年才发布的。这个答案的早期版本在 2017 年 2 月被删除,我刚刚恢复并修改了它。

Eyesome 可以从以下网址下载:https://github.com/WinEunuuchs2Unix/eyesome

Eyesome 于 2018 年 9 月发布。随后,它于 2020 年 6 月进行了修订,增加了色温功能,以减轻输入红、绿和蓝伽马通道的负担。计划进行更多更改以手动输入日出和日落时间。

相关内容