Вопрос Запустить скрипт .bash_profile при входе в систему.


Я работаю над пакетом deb, который позволяет администратору создавать другую учетную запись и автоматически запускать эту учетную запись в режиме киоска. Я создал пользователя, указал короткий ключ и поместил его в скрытый файл и создал сценарий .bash_profile в учетной записи администратора, который я копирую в домашнюю папку нового пользователя.

Это сценарий, который я запускаю, чтобы создать файлы и указать shortkey:

#!/bin/bash
basis="Primary + Alt + "
shortkey=`zenity --entry --text "Your shortkey will be a combination of <Primary> + <Alt> + a letter\n\n Specify your letter!"`

while [[ $shortkey = *[^A-Z]* ]];
        do
                zenity --warning --text "Input incorrect\n\nTry again"
                shortkey=`zenity --entry --text "Your shortkey will be a combination of <Primary> + <Alt> + a letter\n\n Specify your letter!"`

done
        basis="$basis$shortkey"
zenity --info --text "$basis" --title="Your shortkey"

touch kiosk/kiosk-0.1/.mykey
echo "gsettings set org.gnome.desktop.wm.keybindings close [$basis]" > kiosk/kiosk-0.1/.mykey

user=$(cat kiosk/kiosk-0.1/.username)
keys=$(cat kiosk/kiosk-0.1/keys)
content=$(cat kiosk/kiosk-0.1/.mykey)

touch kiosk/kiosk-0.1/.bash_profile
echo "#!/bin/bash" >> .bash_profile
echo "" >> .bash_profile
echo $keys >> .bash_profile
echo $content >> .bash_profile
chmod +x .bash_profile
chown $user .bash_profile
mv '.bash_profile' /home/$user

Содержимое, которое копируется в .bash_profile, содержит код для отключения всех ключей от интерфейса, например:

gsettings set org.gnome.desktop.wm.keybindings begin-move []

Теперь я добавил только строку, чтобы запустить браузер Chrome на правильном веб-сайте

/usr/bin/chromium-browser www.google.be --kiosk --no-default-browser-check --disable-translate

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

Теперь, когда я вхожу в систему с новым пользователем, этот скрипт ничего не делает. Может ли кто-нибудь увидеть, где я ошибаюсь, чтобы помочь мне найти решение?


2
2018-03-12 16:16


происхождения




ответы:


Главная проблема здесь в том, что .bash_profile не читается, когда вы выполняете графический вход в систему. Это файл, специфичный для bash, он читается при запуске оболочки входа, и я очень сомневаюсь, что это когда-нибудь будет прочитано на графическом входе в систему.

У вас будет больше шансов использовать ~/.profile вместо этого это i) читается большинством системных таблиц, а не только bash, поэтому вы не ограничиваете своего пользователя конкретной оболочкой и ii) гораздо более читаете графический логин.

Я просто проверил это и .profile действительно читается на Ubuntu 13.04 при входе в систему графически. Однако вы не можете предположить, что это всегда будет так. Для получения дополнительной информации см. Отличный ответ Гиллеса Вот,

Теперь несколько второстепенных моментов. Нет необходимости в touch, echo "foo" >> bar создаст файл bar если он не существует и добавляется к нему, если он это делает. Кроме того, нет необходимости в .bash_profile чтобы быть исполняемым, файл был получен, а не запущен. Я не знаю, вызвало бы это проблемы, но может.

Наконец, группа файлов будет root, а не пользователем. Опять же, не уверен, что это проблема, но вы можете добавить это в свой скрипт:

chown $user:$user .profile

Обратите внимание, что .profile  игнорируется bash если файл называется ~/.bash_profile существует. Это не должно влиять на графические логины, но может привести к неожиданному поведению при входе в систему из командной строки.


2
2018-03-12 16:33



Я использую файл ~ / .profile, но можно ли вызвать исполняемый скрипт в этом файле? Я пытаюсь запустить мой скрипт bash с помощью «bash disable.sh &», но логин все равно происходит, как обычно - Gijs
@Gijs зависит от многих вещей. Если это заставляет загружать Firefox, задайте новый вопрос о следующем выпуске. Обязательно покажите, что disable.sh является. Кроме того, убедитесь, что вы вызываете скрипт с полным путем. например /home/foo/scripts/disable.sh, - terdon♦