web-dev-qa-db-ja.com

昼間に応じて初期起動時の背景輝度を設定する

Acer Aspire E5-773GノートブックでUbuntu 16.04を実行しています。残念ながら、ログイン画面で明るさのファンクションキーを使用することはできません。そのため、画面のバックライトの明るさを変更できるようになるのは、パスワードを入力してログインした後です。

デフォルトでは、Ubuntuは最後のシャットダウン時に設定された輝度レベルで起動しますが、これは非常に便利ではありません。時々、夜遅くに5%程度の明るさでシャットダウンし、翌日にはすべてを快適に見るために少なくとも50%の明るさレベルが必要なときに再び起動します。逆に、日中に多分80%の明るさでシャットダウンし、夕方に起動すると、ライトに目がくらんでしまいます...

現在の昼間に応じて明るさレベルで起動するようにUbuntuを構成するにはどうすればよいですか? 22:00から06:00の間は10%の明るさ、10:00から16:00の間は60%の明るさ、30%の明るさのようなものが欲しいです。簡単に構成できる限り、曲線を滑らかにすることは問題ありません。あるいは、現地の日没/日の出時間に基づいて設定する方法を見つけた場合、それは大きなボーナスになります。 :)

これらのルールに従って明るさを変更するのは、ブート中、またはオプションでサスペンドから復帰したときにのみ行う必要があります。作業中に自動的に明るさが変わるとは限りません。

8
Byte Commander

基本的な考え方:

  1. 設定ファイルの保存/opt/.time_brightness_values

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

    引用符で囲まれた値とコンマに注意してください。引用符で囲まれた値を持つ最初の列は24時間形式の時間範囲を表し、2番目の列はパーセンテージです。たとえば、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 __== '__main__':
        main()
    
  3. greeter-setup-script=/opt/set_timed_brightness.pyファイルに/etc/lightdm/lightdm.confを設定します。 greeterセットアップスクリプトはルートとして実行され、システムがログイン画面に到達すると、スクリプトが実行され、必要な明るさを設定します。

  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で実行可能にする必要があり、各ファイルの命名と呼び出しは一貫している必要があります。

4

目障りな

Eyesomeは、デーモンとして実行され、ほとんどの時間、24時間年中無休で動作するbashスクリプトです。 xrandrのソフトウェアコントロールを使用して、ハードウェアインターフェイスと最大2つのモニターを介して、ラップトップディスプレイの画面の明るさ(およびオプションでガンマも)を自動的に調整します。

日の出時には(毎日インターネットから時刻が自動的に取得されます)、画面の明るさ(およびオプションでガンマも)が徐々に調整されます。段階的な調整はユーザーが定義しますが、120分で十分です。調整が目立たないようにするには、調整間のスリープ間隔を設定します。おそらく15秒から60秒の間が最適で、デフォルトは60秒です。

日の出の移行が完了すると、目を引くデーモンは日の出の移行が始まるまで何時間もスリープします。日の出の90分前に使用していますが、好きな期間を設定できます。

日の出の遷移とは逆に、日没の遷移は画面の明るさを徐々に低下させます(オプションでガンマも低下させます)。

夜間の移行中にガンマが増加するように定義されることに注意してください。たとえば、目の疲れを軽減するために、レッドガンマは日中は1.0、夜間は1.2と定義できます。青色のガンマは、日中は1.0、夜間は0.8と定義されるため、代わりに減少します。

リソースを削減するために、目が離せない人は日没から日の出までの全期間を眠ります。あなたが住んでいる場所と一年の季節に応じて、平均睡眠は12時間になります。

Eyesome Setup-メインメニュー

アイサムを設定するために、メインメニューが提供されます。

eyesome main menu.png

構成の編集-一般タブ

メインメニューからEditボタンをクリックすると、以下に示すように、編集設定の一般タブが最初に表示されます。

eyesome configuration general tab.png

国/都市名が自動的に表示されます。必要に応じてオーバーライドできます。

構成の編集-モニター1タブ

上記の「モニター1」タブをクリックすると、私の構成でこのパネルが表示されます(実際とは異なる場合があります)。

eyesome-edit-configuration-monitor-1.png

これらの設定は、ほとんどの場合目を覚ます人によって自動的に取得されるため、気にしないでください。ただし、昼間と夜間の明るさ/レベルを設定する必要があります。

設定の編集-モニター3タブ

[モニター3]タブをクリックすると、私の構成でこのパネルが表示されます(実際とは異なる場合があります)。

モニター2タブは、適応型の明るさとスマートOSを備えた新しいテレビであるため表示されません。 Eyesomeによるオーバーライドは必要ありません。

enter image description here

Eyesomeをインストールした後、システムに別のモニターを接続する場合、xrandrモニター名を入力する必要があります。

Eyesome Setup-5秒のテスト

メインメニューから、DaytimeおよびNighttimeボタン。 [構成の編集]-[全般]タブから、テストの期間を5秒から20秒まで変更できます。

5秒間の夜間テストは次のようになります。

eyesome nighttime test.gif

異常なイベント処理

仕事の前の朝で、画面が完全に暗くなったときにラップトップをサスペンドするとします。仕事が終わった後、太陽が空の上にあるときに家に戻り、ラップトップを開きます。画面は非常に薄暗いため、読むことができません。

このシナリオに対処するために、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を呼び出して夜間の表示用に明るさをリセットし、日没の遷移までスリープします。

    サスペンド/リッドクローズ/テスト輝度/電源オフ/ホットプラグ

概要

この回答は、質問が投稿された翌日からほぼ2年です。 2017年2月に削除されたこの回答の初期バージョンがありましたが、私は削除を取り消して修正しました。

Eyesomeは次からダウンロードできます: https://github.com/WinEunuuchs2Unix/eyesome

このプログラムは2018年9月にリリースされたばかりなので、問題を発見したり、改善の提案がある場合はお知らせください。

ドキュメント作成フェーズが始まったばかりなので、遠慮なくご質問ください。あなたの質問がドキュメントの改善につながることさえあります。

1