web-dev-qa-db-ja.com

Ubuntuにxbacklightなしで画面の輝度レベルを記憶させる

問題は、再起動するたびにUbuntuが常に輝度レベルを最大にリセットすることです。 xbacklightユーティリティをインストールしましたが、xbacklight -getxbacklight -set XXなどのコマンドが機能しません。出力として何も得られません。

実際、Ubuntuに最後に使用した明るさのレベルを記憶させたいと思います。どうすればそれができますか?ここにいくつかの情報があります:

ls -l /sys/class/backlight/
total 0
lrwxrwxrwx 1 root root 0 Feb 27 09:43 radeon_bl0 -> ../../devices/pci0000:00/0000:00:01.0/drm/card0/card0-LVDS-1/radeon_bl0


ls -l /sys/class/backlight/radeon_bl0/
total 0
-r--r--r-- 1 root root 4096 Feb 27 09:54 actual_brightness
-rw-r--r-- 1 root root 4096 Feb 27 09:54 bl_power
-rw-r--r-- 1 root root 4096 Feb 27 09:47 brightness
lrwxrwxrwx 1 root root    0 Feb 27 09:54 device -> ../../card0-LVDS-1
-r--r--r-- 1 root root 4096 Feb 27 09:43 max_brightness
drwxr-xr-x 2 root root    0 Feb 27 09:54 power
lrwxrwxrwx 1 root root    0 Feb 27 09:54 subsystem -> ../../../../../../../class/backlight
-r--r--r-- 1 root root 4096 Feb 27 09:43 type
-rw-r--r-- 1 root root 4096 Feb 27 09:42 uevent

uname -r
4.2.0-30-generic
5
misha

実際、Ubuntuに最後に使用した明るさのレベルを記憶させたいと思います。どうすればそれができますか?ここにいくつかの情報があります:

紹介

以下のスクリプトは、最後に使用された画面の明るさを保存および復元するOPのニーズに対応しています。 the lightdm greeterと連携して動作し、lightdmによってアクティブになります。 lightdmを使用する必要はありません。したがって、cronジョブを使用する場合は、使用できます。

基本的な考え方:

  1. スクリプトをどこかに保存します(ここで取得するか、githubを使用して)。
  2. Sudo特権を使用して/etc/lightdm/lightdm.confを作成します。
  3. ファイルに[SeatDefaults]display-setup-script、およびdisplay-stopped scriptの3行があることを確認してください。詳細については以下をご覧ください。スクリプトヘッダーも概要を示します。

スクリプトソース

#!/usr/bin/env bash
#
###########################################################
# Author: Serg Kolo , contact: [email protected] 
# Date: March 7th, 2016
# Purpose: Script that will remember screen brightness
#          Must be used in conjunction with lightdm
#          Place the following 5 lines into /etc/lightdm/lightdm.conf
#
#           [SeatDefaults]
#           #display-setup-script = Script to run when starting a greeter session (runs as root)
#           display-setup-script = /home/USER/bin/sergrep/brightness.sh restore
#           #display-stopped-script = Script to run after stopping the display server (runs as root)
#           display-stopped-script = /home/USER/bin/sergrep/brightness.sh store
#
#           Basic idea is that you must give full path and either store or restore as an option 
# Written for: http://askubuntu.com/q/739654/295286
# Tested on:  Ubuntu 14.04 LTS
# Version: 1.2 , added brightness limit, file creation
###########################################################
# Copyright: Serg Kolo , 2016
#    
#     Permission to use, copy, modify, and distribute this software is hereby granted
#     without fee, provided that  the copyright notice above and this permission statement
#     appear in all copies.
#
#     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
#     THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
#     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
#     DEALINGS IN THE SOFTWARE.
ARGV0=$0
ARGC=$#



store()
{
   cat "$SYSDIR"/*/actual_brightness > "$1"
}
#----------

# This function restores brightness. We avoid 
# setting brightness to complete 0, hence
# minimum is 10% that can be restored.

restore()
{
  MAX=$(cat "$SYSDIR"/*/max_brightness  )
  LIMIT=$((MAX/10)) # get approx 10 percent value
  VAL=$(cat "$1" )
  if [ "$VAL" -lt "$LIMIT"  ] ;
  then
       # avoid going bellow 10% of brightness
       # we don't want user's screen to be completely dark
       echo "$LIMIT" > "$SYSDIR"/*/brightness
  else
       echo "$VAL" > "$SYSDIR"/*/brightness
  fi
}
#------------

# This function works for initial run of the script; the script cannot set
# brightness unless datafile exists first, so here we create the file
# Initial value there will be whatever the current brightness on first
# reboot was

create_datafile()
{
  cat "$SYSDIR"/*/actual_brightness > "$1" 
}

puke(){
    printf "%s\n" "$@" > /dev/stderr
    exit 1
}

main()
{
  local DATAFILE="/opt/.last_brightness"
  local SYSDIR="/sys/class/backlight" # sysfs location of all the data

  # Check pre-conditions for running the script
  if [ "$ARGC" -ne 1  ];then
     puke "Script requires 1 argument"
  fi

  if [ $(id -u) -ne 0 ]   ; then
     puke "Script has to run as root"
  fi

  # ensure datafile exists
  [ -f "$DATAFILE"  ] || create_datafile "$DATAFILE"

  # perform storing or restoring function
  case "$1" in
     'restore') restore  $DATAFILE ;;
     'store') store $DATAFILE ;;
     *) puke "Unknown argument";;
  esac

}

main "$@"

スクリプトの取得と設定

スクリプトを直接コピーするか、コマンドラインから次の手順を実行します(コマンドラインを開くには、 CtrlAltT )

Sudo apt-get install git
cd /opt
Sudo git clone https://github.com/SergKolo/sergrep.git

スクリプトは/opt/sergrep/brightness.shにあるため、次のことを行います。

Sudo chmod +x /opt/sergrep/brightness.sh

実行可能にします。次に、lightdmで動作するように設定する必要があります。 /etc/lightdm/lightdm.confファイルを作成するには、コマンドラインnanoテキストエディター(コマンドはSudo nano /etc/lightdm/lightdm.conf)またはグラフィカルなgeditpkexec gedit /etc/lightdm/lightdm.conf)で開きます。

そのファイルに次の行を書き込みます。

[SeatDefaults]
#display-setup-script = Script to run when starting a greeter session (runs as root)
display-setup-script = /opt/sergrep/brightness.sh restore
#display-stopped-script = Script to run after stopping the display server (runs as root)
display-stopped-script = /opt/sergrep/brightness.sh store

保存して終了

詳細な概要

/sys/class/backlight/*/brightnessファイルに直接書き込むことができることは既にわかっています。また、これらの値を読み込むこともできます。問題は、/sysが仮想ファイルシステムであるため、再起動すると、そのファイルシステム内のすべてのファイルが消えることです。

したがって、再起動するたびに/sys/class/backlight/*/actual_brightnessの値を永続ファイルに保存できます。問題は、cronジョブ経由、lightdm経由、またはその他の手段経由です。個人的に、lightdmルートを選択しました。

基本的に、lightdmの機能を利用します。グリーターが開始する前とセッションが終了した後にスクリプトを実行できます。輝度は/opt/.last_brightnessファイルに記録され、スクリプトが開始されるたびに読み取られます。異なる引数を渡すだけで、基本的に同じスクリプトで2つのアクションを実行しています。

6

これを試しましたか:

  1. Sudo nano /etc/rc.local
  2. この行をファイルに追加します(Xを希望の明るさで置き換えます):

    echo X > /sys/class/backlight/intel_backlight/brightness
    
1
Jay T.

コマンドで明るさを設定できる場合、起動時に明るさレベルを特定の値に変更するのは簡単です。以下をせよ:

  • Super/Windowsキーを押してダッシュを開きます
  • 「スタートアップアプリケーション」と入力し、Enterキーを押します
  • 「追加」をクリックします
  • 名前(無関係)とコマンドを入力します
  • 「追加」をクリックします

これにより、起動時にそのコマンドが実行されます。以前の明るさを記憶させる方法がわかりませんが、これが役立つことを願っています。

0
Rahul Mukherji

わかった。将来の参考のために、自分の質問に答えます。私の場合、/etc/rc.localの前にexit 0に次の行を追加します(理由とその操作を思い出させるためのコメントが1行だけになっています)。

# The following line should solve the problem of Ubuntu resetting
# the brightness level back to maximum after every reboot.

echo 50 > /sys/class/backlight/radeon_bl0/brightness

これは、ファイル全体が今どのように見えるかです:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# The following line should solve the problem of Ubuntu resetting
# the brightness level back to maximum after every reboot.
echo 50 > /sys/class/backlight/radeon_bl0/brightness

exit 0

これが最善の方法であるかどうかは100%確信はありませんが、今ではすべてがうまく機能しているようです。

0
misha

代わりにライトを使用してください...それ以外の場合は、特にインテルとnvidiaのグラフィックスを一緒に使用している場合、それを修正するのは面倒です。

これはUbuntu 16.04で動作し、Alienware M14XR2でテストされています

チェックアウト-> https://github.com/haikarainen/light

0
Rohith Saradhy