Для полноты картины, хотя очевидным решением в этом случае является добавление флага g
, в некоторых случаях вам может понадобиться запустить командуs/string1/string2/
(илиs/string1/string2/g
)несколько раз.
Например, если вместо string2
у вас есть str
, на входе типа:
string1ing1
s/string1/str/g
приведет к:
string1
Если бы вы хотели вместо этого str
, вам понадобился бы другой s/string1/str/g
. С sed
есть идиоматический способ запуска подстановки, если она успешна, с помощью команды t
:
sed '
/string3/{
:1
s/string1/string2/
t1
}'
t
переходит к метке :1
только в случае успешного выполнения команды s
.
Чтобы это хоть как-то работало с ddcutil
, мне пришлось сначала найти эту страницу , а затем расшифровать эти рекомендации. Поскольку я не мог толком понять первый совет (, не смог найти файл, на который он ссылался ), я попробовал второй:
Я поместил options nvidia NVreg_RegistryDwords=RMUseSwI2c=0x01;RMI2cSpeed=100
в собственный.conf в /etc/modprobe.d и перезагрузился.
В результате получается ddcutil, который работает в 50 % случаев:
$ sudo ddcutil capabilities | grep Brightness
Feature: 10 (Brightness)
:~$ sudo ddcutil getvcp 10
VCP code 0x10 (Brightness ): current value = 0, max value = 100
:~$ sudo ddcutil getvcp 10
VCP code 0x10 (Brightness ): current value = 9, max value = 100
:~$ sudo ddcutil setvcp 10 100
Setting value failed for feature 10. rc=EIO(-5): Input/output error
:~$ sudo ddcutil setvcp 10 10
:~$ sudo ddcutil setvcp 10 99
Verification failed for feature 10
:~$ sudo ddcutil setvcp 10 50
:~$ sudo ddcutil setvcp 10 75
:~$ sudo ddcutil setvcp 10 80
Setting value failed for feature 10. rc=EIO(-5): Input/output error
:~$ sudo ddcutil setvcp 10 90
Setting value failed for feature 10. rc=EIO(-5): Input/output error
:~$ sudo ddcutil setvcp 10 95
Setting value failed for feature 10. rc=EIO(-5): Input/output error
:~$ sudo ddcutil setvcp 10 99
Display not found
:~$ sudo ddcutil setvcp 10 10
Verification failed for feature 10
:~$ sudo ddcutil setvcp 10 100
Display not found
:~$ sudo ddcutil setvcp 10 100
:~$ sudo ddcutil setvcp 10 0
Display not found
:~$ sudo ddcutil setvcp 10 0
Фактическая яркость менялась примерно в половине попыток. Сбои не всегда совпадали с выводом ошибки в терминал.
Я поместил это в ответ, так как это может быть хорошим решением для других, но я все еще ищу что-то более надежное.
Обновление:На самом деле этот ответ привел к зависанию в разрешении 640x480 после перезагрузки, поэтому мне пришлось изменить его.
Причина проблемы неизвестна. Это могло быть совпадением. Проблема с низким разрешением возникает даже после комментирования единственной строки текста внутри файла, представленного в этом ответе.
Я разработчик ddcutil .
Похоже, у вас есть монитор с маргинальной реализацией I2C. Параметры Nvidia заставляют драйвер использовать самую низкую скорость шины, определенную в спецификации I2C, 100 кбит/с. К сожалению, нет способа сказать водителю использовать еще более низкую скорость автобуса.
Используйте параметр --ddc
для просмотра ошибок данных DDC, а параметр --stats
для кумулятивного подсчета ошибок и количества попыток ddcutil
повторных операций.
Есть несколько ddcutil
вариантов, которые могут помочь. Если вы видите много сбоев в выводе --stats
, показывающем превышение максимального количества повторных попыток, вы можете попробовать увеличить количество повторных попыток, используя параметр --maxtries
. Во-вторых, протокол DDC/CI требует, чтобы приложение выжидало определенное время (, обычно 50 мс ), между моментом, когда оно отправляет запрос на монитор, и временем, когда оно считывает ответ. Это необходимо для того, чтобы монитор мог выполнить операцию и/или собрать ответ. Опция --sleep-multiplier
увеличивает время ожидания ddcutil
. Например, --sleep-multiplier 2
заставляет ddcutil
ждать 100 мс, когда спецификация предписывает ожидание 50 мс. (И наоборот,Я видел некоторые хорошо работающие реализации видеокарты/монитора, которые работают со значением множителя сна -всего лишь .1
, т. е. ожидают всего 5 мс, когда спецификация требует 50.)
Наконец, приношу свои извинения за трудности с поиском файла 90-nvidia_i2c.conf
. Документация к файлу на веб-сайте не была обновлена для текущего местоположения.