setpci - Создание сценария для ручного изменения яркости

Простой ответ, "они не скопировали и вставка". Не в пути Вы понимаете это, так или иначе.

Очень самые ранние системы Unix использовали телетайпы или простые терминалы для интерактивного использования. Эти устройства не имели мощных терминальных наборов команд который сделанными более поздними инновациями (!) как vi возможный. (Да, когда-то давно, vi была высокая технология.) У Вас поэтому не было способа визуально отметить текст, который будет скопирован или сокращен.

При недостатке в умных терминалах ранние системы Unix предложили названный строчный редактор ed. Самая близкая вещь необходимо вырезать и вставить с ed t команда, с которой можно указать строки числом, которое будет передано (скопированные) в другое местоположение в файле.

Перфорированные карты и перфолента были все еще важными медиа ввода-вывода в это время. Один способ "отредактировать" перфоленту состоит в том, чтобы пропустить свои данные через что-то как sed, непосредственно от читателя перфоленты, поскольку это считывает данные в. Сегодня sed привыкает для других вещей, но это было намного более важно в первые годы Unix.

3
15.05.2011, 13:37
4 ответа

Я закончил тем, что делал несколько сценариев для решения моей проблемы.

  • Я связал следующие три сценария с удобными ключами (CTRL+ALT+PGUP для яркости, CTRL+ALT+PGDN для brigthtness вниз и CTRL+ALT+HOME для восстановления яркости к значению по умолчанию).
  • Сценарии требуют sudoless setpci (можно, вероятно, играть с некоторым chmods после рассмотрения ошибок, которые Вы получаете путем выполнения setpci, чтобы не редактировать sudoers) через строку как:

    androith ВСЕ = (ВЕСЬ) NOPASSWD:/usr/bin/setpci

  • Наконец, необходимо будет держать "файл состояния" в чем-то сродни/home/androith/.scripts/brightness/state, содержащему только состояние (BF для начала в порядке).

яркость-up.sh

#!/bin/bash

# Get the stored state from file
exec < /home/androith/.scripts/brightness/state # stdin replaced by this file
read state # first line of file goes to state variable

# Increase the state, up to FF
new_state=$(echo "$[0x$state+0x10]") # in decimal
if [ "$new_state" -gt 255 ] # 255 = FF in hex
then
    echo "Already at maximal brightness."
else
    state=$(echo "obase=16; $new_state" | bc) # put into hex
    echo "Setting brightness to $state and storing state..."
    sudo setpci -s 00:02.0 F4.B=$state # passwordless sudo
    echo $state > /home/androith/.scripts/brightness/state
fi

яркость-down.sh

#!/bin/bash

# Get the stored state from file
exec < /home/androith/.scripts/brightness/state # stdin replaced by this file
read state # first line of file goes to state variable

# Decrease the state, down to FF
new_state=$(echo "$[0x$state-0x10]") # in decimal
if [ "$new_state" -lt 15 ] # 15 = 0F in hex
then
    echo "Already at minimal brightness."
else
    state=$(echo "obase=16; $new_state" | bc) # update and put into hex
    echo "Setting brightness to $state and storing state..."
    sudo setpci -s 00:02.0 F4.B=$state # passwordless sudo
    echo $state > /home/androith/.scripts/brightness/state
fi

яркость-default.sh

#!/bin/bash

# Set brightness to default value
state=AF
sudo setpci -s 00:02.0 F4.B=$state # passwordless sudo
echo $state > /home/androith/.scripts/brightness/state
2
27.01.2020, 21:17

Существует немного программы, названной xbacklight. Это может получить и установить яркость Вашего экрана. Если у Вас есть веб-камера, можно даже позволить ей установить яркость автоматически путем деления снимка, получения средней яркости и установки яркости экрана соответственно.

image='/home/kim/brightness.jpeg'
streamer -c /dev/video0 -b 16 -o $image >/dev/null 2>/dev/null && \
meanline=`convert $image -colorspace gray -verbose info: | grep '^\s*mean: '`
if [[ $meanline =~ \((.*)\) ]]; then
    brightness="${BASH_REMATCH[1]}"
    brightness=`echo "$brightness * 200" | bc`
    echo $brightness
    xbacklight -set $brightness
    xbacklight
fi
rm -f "$image"
1
27.01.2020, 21:17
  • 1
    Две жалобы: 1) мне не нравится автоматизация яркости; и что еще более важно 2) xbacklight не будет работать на меня. Поэтому я должен взаимодействовать через setpci непосредственно. –  MarkovCh1 15.05.2011, 20:27
  • 2
    , если xbacklight не работает на Вас, почему не регистрируют ошибку? –  Kim 16.05.2011, 07:05
  • 3
    Это происходит из-за настроек ядра, я думаю... –  MarkovCh1 16.05.2011, 10:24

Я знаю, что это не очень безопасный способ сделать его.. но это работает.

#!/bin/bash

password="your_password_here"

set_value_to=$(zenity --title="Brightness control" --scale --text="Adjust the     brightness value" --min-value=5 --max-value=95 --value=50)

echo $password | sudo -S setpci -s 00:02.0 f4.b=$set_value_to
0
27.01.2020, 21:17

Xbacklight не работает над моим нетбуком; подсветка не видима к подсистеме ACPI. Я взломал эти два сценария оболочки вместе, хотя:

brightup.sh:

#!/bin/bash
var1=`sudo setpci -s 00:02.0 f4.b | tr [:lower:] [:upper:]`;
var2=$(echo "obase=16;ibase=16;${var1} + 8" |bc)
sudo setpci -s 00:02.0 f4.b=$var2

brightdown.sh:

#!/bin/bash
var1=`sudo setpci -s 00:02.0 f4.b | tr [:lower:] [:upper:]`;
var2=$(echo "obase=16;ibase=16;${var1} - 8" |bc)
sudo setpci -s 00:02.0 f4.b=$var2

Проблема, которую я имею, состоит в том, что это требует sudo. Конечная цель этого должна установить эти два сценария оболочки для выполнения как сочетания клавиш, таким образом, я должен выяснить, как установить setpci, чтобы смочь работать без пароля с sudo. Я знаю, это, вероятно, небезопасно, и клудж, но я не вижу никаких других опций в этой точке.

также, я приношу извинения за некролуг этот поток, но это два сценария, которые я искал в межсетях с тех пор, как я переключился назад на использование Linux ежедневно.

2
27.01.2020, 21:17

Теги

Похожие вопросы