Я нахожусь на Ubuntu 18.04 64bit, я пытаюсь сохранить разрешение своих 2 экранов, таким образом, я пытаюсь поместить сценарий, кто использует xrandr для установки его (если я выполняю сценарий от терминала, это работает), таким образом, я поместил его в crontab (при помощи этого синтаксиса: sudo crontab - e
и путем добавления как последняя строка этого кода: @reboot /avvio/; ./screen.sh
) но это ничего не делает, работ сценария, и я уверен, что это выполняется, потому что я пытался добавить другие вещи к сценарию, и они работают, если я запускаю его от терминала, это также устанавливает разрешение, но это не устанавливает его при запуске. Код screen.sh
#!/bin/bash
xrandr --newmode "1680x1050_60.00" 146.25 1680 1784 1960 2240 1050 1053 1059 1089 -hsync +vsync
xrandr --addmode VGA-1 "1680x1050_60.00"
xrandr --output VGA-1 --mode 1680x1050_60.00 --pos 1920x0 --output HDMI-1 --primary --pos 0x0
xrandr
не требует sudo
полномочия, таким образом, можно поместить сценарий в Приложения Запуска. Обычно только используйте cron
сценарии начальной загрузки для требования заданий sudo
полномочия.
Исходный ответ был ссылкой. Этот новый ответ использует ссылку и вынимает ненужный код. Затем Код операции добавляется к нижней части нового ответа.
Использовать sudo -H gedit /etc/cron.d/start_screen
и вставьте эти строки:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot root /usr/local/bin/screen.sh
Сохраните файл. Нет никакой потребности отметить его как исполняемый файл.
Примечание: PATH
команда очень важна как cron
ограничил знание ПУТИ и может не найти команды таким как /usr/bin/who
или /usr/bin/awk
.
/usr/local/bin/screen.sh
#! /bin/bash
# NAME: screen.sh
# PATH: /usr/local/bin
# DESC: Set screen to brightness .5 to confirm it can be done.
# Ask Ubuntu question: https://askubuntu.com/questions/1102389/xrandr-not-working-on-crontab/1102436?noredirect=1#comment1817209_1102436
# CALL: called from `/etc/cron.d/start-screen`
# DATE: Created December 17, 2018.
#!/bin/bash
export DISPLAY=:0 # For xrandr commands to work.
# wait until user signs on to get .Xauthority file settings.
UserName=""
while [[ $UserName == "" ]]; do
sleep 2
logger "screen.sh slept 2 seconds waiting for login"
UserName="$(who -u | grep -F '(:0)' | head -n 1 | awk '{print $1}')"
done
sleep 30
logger "screen.sh slept 30 seconds waiting for other xrandr tasks to finish"
xhost local:root
export XAUTHORITY="/home/$UserName/.Xauthority"
xrandr --output eDP-1-1 --brightness .5
Я протестировал это на своей машине, и она работает отлично. Вы захотите внести следующие изменения:
/usr/local/bin/
кому: /avvio/
sleep 30
. Мне нужен он, потому что я имею существующий eyesome.sh
задание крона, которое устанавливает яркость на основе Интернета ежедневный восход солнца и времена заката для моего города.xrandr
строка с Вашими тремя xrandr
строки кодаСуществуют logger
команды в сценарии. Это позволит Вам видеть, что это работает при помощи:
$ journalctl -b -xe | grep screen.sh
Dec 17 14:25:56 alien CRON[1170]: (root) CMD ( /usr/local/bin/screen.sh)
Dec 17 14:25:58 alien root[1728]: screen.sh slept 2 seconds waiting for login
Dec 17 14:26:00 alien root[1790]: screen.sh slept 2 seconds waiting for login
Dec 17 14:26:02 alien root[1973]: screen.sh slept 2 seconds waiting for login
Dec 17 14:26:04 alien root[2070]: screen.sh slept 2 seconds waiting for login
Dec 17 14:26:06 alien root[2300]: screen.sh slept 2 seconds waiting for login
Dec 17 14:26:36 alien root[5355]: screen.sh slept 30 seconds waiting for other xrandr tasks to finish
Крон @reboot
выполнения опции вскоре после машины загружаются и прежде чем пользователь будет зарегистрирован. xrandr
команды не будут работать, пока пользователь не будет зарегистрирован. Можно использовать этот код от привлекательного и адаптироваться к целям:
export DISPLAY=:0 # For xrandr commands to work.
SpamOn=0 # > 0 = number of times to spam in loop.
SpamCount=5 # How many times we will spam (perform short sleep)
SpamLength=2 # How long spam lasts (how many seconds to sleep)
SpamContext="" # Why are we spamming? (Login, Suspend or Lid Event)
# Future use: "DPMS Change" ie Monitor on or off.
WaitForSignOn () {
# eyesome daemon is loaded during boot. The user name is required
# for xrandr external monitor brightness and gamma control. We must
# wait until user signs on to get .Xauthority file settings.
SpamOn=10 # Causes 10 iterations of 2 second sleep
SpamContext="Login"
TotalWait=0
[[ ! -f "$CurrentBrightnessFilename" ]] && rm -f \
"$CurrentBrightnessFilename"
# Wait for user to sign on then get Xserver access for xrandr calls
UserName=""
while [[ $UserName == "" ]]; do
sleep "$SpamLength"
TotalWait=$(( TotalWait + SpamLength ))
# Find UserName currently logged in.
UserName="$(who -u | grep -F '(:0)' | head -n 1 | awk '{print $1}')"
done
log "Waited $TotalWait seconds for $UserName to login."
xhost local:root
export XAUTHORITY="/home/$UserName/.Xauthority"
if [[ "$fUseDbusMonitor" == true ]] ; then
echo "$UserName" > "$EyesomeUser"
sync -d "$EyesomeUser" # Flush buffer immediately
fi
} # WaitForSignOn