Хорошо, я нашел решение моей первоначальной проблемы. Это грязный, хотя.
Прежде всего, использование ~/.bash_profile
, ~/.bash_login
, ~/.profile
или даже /etc/profile.d/
должно быть предпочтительным методом (здесь хорошее чтение по теме). Не знаю, почему это не работает для меня; возможно, это как-то связано с обходом моего автоматического диспетчера дисплеев, просто предположение.
Другим решением было бы добавление ярлыков скриптов в глобальный файл, который выполняется при запуске, например /etc/rc.local
.
Поскольку мой сценарий требует входа в систему xserver и пользователя, я создал файл initfile, который ожидает после загрузки входа в систему для xserver и пользователя, а затем выполняет сценарий:
#! /bin/bash
### BEGIN INIT INFO
# Provides: script_file.sh startup at boot
# Required-Start: $all
# Required-Stop:
# X-Start-Before:
# Default-Start: 2 3 4 5
# Default-Stop:
# Description: runs '/usr/local/bin/script_file.sh --optional --flags' at startup, when xserver has started and YOURUSERNAME is logged on.
### END INIT INFO
case "$1" in
start)
# Wait until X is running and required user logged in:
count=0
until [[ "$(tty)" != "\/dev\/tty1" ]] && [[ "$(who | cut -d' ' -f1 | sort | uniq)" == "YOURUSERNAME" ]]; do
sleep 5
let count=$count+1
if [[ "$count" == "10" ]]; then
echo "Xserver hasn't started or other error occurred. Abort"; exit 1
fi
done
# Run the script as YOURUSERNAME instead of root:
su - YOURUSERNAME -c '/usr/local/bin/script_file.sh --optional --flags'
;;
stop)
:
;;
esac
exit 0
Это решение предполагает автоматическую настройку входа в систему. Как уже упоминалось, это действительно не способ сделать это, но пока работает.