Готовое решение для тех, кто устал от того, что ученики постоянно "ломают" настройки компьютеровКороткое втуплениеЧестно говоря, не знаю, подходит ли вообще эта статья под формат данного форума. И не ошибся ли я с разделом. С одной стороны это "Линукс в образовании", с другой - вроде бы "Поиск подходов к решению задач". Модераторы разберутся.
Я хочу предложить школьным учителям информатики набор моих простых решений. Как я организовал работу у себя.
ИМХО, им нужны именно готовые решения, не требующие курения мануалов и плясок с бубнами. И потому постараюсь каждый шаг прям "разжевывать".
Нужно ли здесь такое? Если да, то у меня есть ещё.
К слову. Я вообще-то пенсионер (мне за это скидка), работаю лаборантом в школе, образования нет (ещё скидка). А до пенсии поезда водил и с компьютерами дела имел только в игры играть. Поэтому знаний имею не особо много, а значит, наверняка делаю что-то не так и вообще неправильно.
Сегодня сделаем самое нужное -
"заморозим" профиль ученика.
Что получим в итоге:- На компьютерах появятся два пользователя: standard (эталон, скрыт с экрана входа) и student (рабочий ученический)
- Ученик может менять что угодно - рабочий стол, настройки программ, браузеров...
гадить, мусорить и ругаться матом.
- После перезагрузки всё возвращается в исходное состояние, будто ничего и не было
- Один раз настроили эталон - и разнесли на все компьютеры класса за десять минут
Ранее я уже тут предлагал подобное решение основанное на гостевых сеансах. Оно исправно работало на предыдущих версиях. И я видел, что и другие люди здесь что-то подобное через "гостя" делали. Однако, в 11 версии Альт Образование гостевой сеанс работает с ошибками - оставляет после себя мусор, папки не удаляет, в общем, бардак устраивает. Поэтому решил сделать иначе.
Что понадобится1.
Флешка (можно даже самую маленькую, главное - чтобы на неё влез архив с профилем, обычно хватает 1-2 ГБ)
2.
Один компьютер, на котором мы создадим эталонный профиль (можно свой рабочий или любой ученический, который возьмём за образец)
3.
Компьютеры учеников, на которые будем разносить настройку
Всё делалось в
Альт Образование 11 XFCE (у меня такое). На других версиях скорее всего тоже будет исправно работать, но проверять не буду, нет желания.
Шаг 0. Готовим флешкуНа флешке у нас будут два скрипта и архив с эталонным профилем. Скрипты я дам прямо в статье - вам нужно будет просто скопировать их.
Шаг 1. Создаём эталонный профиль (пользователь standard)Это можно сделать на любом компьютере в классе, главное чтобы на нём имелся весь набор нужных программ.
1. Заходим в систему под администратором.
2. Открываем
Центр управления системой (acc) - "Локальные пользователи".
3. Создаём нового пользователя с именем
standard. Права администратора ему не нужны. Вряд ли это отразится на результате, но я всегда делаю без админских прав.
- Пароль можно поставить любой.
- Остальные настройки можно оставить по умолчанию.
4.
Выходим из системы (важно!) и заходим под пользователем
standard.
5. Теперь настраиваем рабочий стол так, как хотим видеть у учеников:
- Раскладываем иконки на рабочем столе.
- Настраиваем панель (если нужно)
- Открываем браузеры, настраиваем, добавляем закладки
- Удаляем свои пароли и куки (чтобы ученики не зашли на какие-нибудь госуслуги под вашим аккаунтом).
- Запускаем все программы, которые могут понадобиться на уроках - чтобы они создали свои папки с настройками. Линукс настройки программ хранит в пользовательском профиле.
6.
Ещё раз проверяем - точно ли всё настроено так, как надо? Именно этот профиль будут видеть ученики после каждой перезагрузки.
Важно! Убедитесь, что в профиле не осталось ваших личных данных - паролей от соцсетей, почты и т.п. Профиль будет клонироваться на все компьютеры класса, поэтому он должен быть "стерильным".
7. Выходим из пользователя
standard и заходим обратно под администратором.
Шаг 2. Создаём архив эталонного профиляТеперь нам нужно упаковать наш настроенный профиль в архив, чтобы потом раздавать на другие компьютеры.
Для этого создадим небольшой скрипт. Он сделает всё сам:
- проверит, что пользователь
standard не залогинен (иначе архив может получиться кривым);
- упакует его домашнюю папку в архив;
- скопирует архив на флешку;
- спросит, удалять ли временный файл с компьютера.
Как создать скрипт1. На флешке создайте новый текстовый файл
archive_profile.sh.
Важно! Если вы создаёте файл в Windows (в Блокноте), потом придётся конвертировать окончания строк. Но мы об этом поговорим позже. Пока просто создайте файл.
2. Откройте этот файл в текстовом редакторе (в Linux можно использовать Mousepad, в Windows - Notepad++ или даже Блокнот) и вставьте туда вот этот код:
#!/bin/bash
# ПАРАМЕТРЫ
# Профиль для архивирования
SOURCE_USER="standard"
# Название архива. Менять нежелательно - второй скрипт ищет именно такой файл
ARCHIVE_NAME="standard_profile.tar.gz"
# Определяем папку, где лежит скрипт (на флешке)
SCRIPT_DIR=$(dirname "$(readlink -f "$0")")
# Определяем реального пользователя (админа)
REAL_USER=$(logname)
REAL_USER_HOME=$(eval echo "~$REAL_USER")
TEMP_ARCHIVE_PATH="$REAL_USER_HOME/$ARCHIVE_NAME"
DEST_PATH="$SCRIPT_DIR/$ARCHIVE_NAME"
echo "--- Мастер создания эталонного архива ---"
# Проверка на root
if [ "$(id -u)" -ne 0 ]; then
echo "❌ ОШИБКА: Этот скрипт нужно запускать от root (через su -)"
exit 1
fi
# 1. Проверка сеанса
if who | grep -q "^$SOURCE_USER "; then
echo "❌ ОШИБКА: Пользователь '$SOURCE_USER' все еще в системе!"
echo "Пожалуйста, завершите его сеанс через 'Выход' в меню."
exit 1
fi
# 2. Создание архива в домашней папке админа
echo "📦 Шаг 1: Упаковываю профиль в $REAL_USER_HOME..."
tar -cvzf "$TEMP_ARCHIVE_PATH" -C /home "$SOURCE_USER"
chown "$REAL_USER:$REAL_USER" "$TEMP_ARCHIVE_PATH"
if [ $? -ne 0 ]; then
echo "❌ Ошибка при создании архива."
exit 1
fi
# 3. Проверка существования старого файла на флешке
if [ -f "$DEST_PATH" ]; then
echo "⚠️ На флешке уже есть файл $ARCHIVE_NAME."
read -p "❓ Перезаписать старый архив новым? [y/N]: " overwrite
overwrite=${overwrite:-N}
if [[ ! "$overwrite" =~ ^[YyДд]$ ]]; then
echo "⛔ Копирование отменено. Новый архив сохранен в $TEMP_ARCHIVE_PATH"
exit 0
fi
fi
# 4. Проверка места на флешке (чтобы не получилось, что архив не влез)
ARCHIVE_SIZE=$(stat -c%s "$TEMP_ARCHIVE_PATH")
FREE_SPACE=$(df -B1 "$SCRIPT_DIR" | awk 'NR==2 {print $4}')
# Если файл уже есть, место под него на флешке освободится при перезаписи
if [ -f "$DEST_PATH" ]; then
OLD_SIZE=$(stat -c%s "$DEST_PATH")
FREE_SPACE=$((FREE_SPACE + OLD_SIZE))
fi
if [ "$ARCHIVE_SIZE" -gt "$FREE_SPACE" ]; then
echo "❌ ОШИБКА: На флешке недостаточно места даже с учетом замены файла!"
echo "Файл оставлен в $REAL_USER_HOME."
exit 1
fi
# 5. Копирование
echo "🚀 Копирую на флешку..."
cp "$TEMP_ARCHIVE_PATH" "$DEST_PATH"
chown "$REAL_USER:$REAL_USER" "$DEST_PATH"
echo "✅ Успешно сохранено."
# 6. Очистка временного файла
echo "------------------------------------------------"
read -p "🗑️ Удалить промежуточный файл из $REAL_USER_HOME? [y/N]: " cleanup
cleanup=${cleanup:-N}
if [[ "$cleanup" =~ ^[YyДд]$ ]]; then
rm -f "$TEMP_ARCHIVE_PATH"
echo "🧹 Файл удален. Осталась только копия на флешке."
else
echo "📁 Файл сохранен в вашей папке как резерв."
fi
echo "--- Работа завершена ---"3. Сохраните файл.
Запускаем этот скрипт1. Вставьте флешку в компьютер (тот, где у нас настроен нужный профиль).
2. Откройте терминал.
3. Перейдите в режим root:
su - Введите пароль администратора (символы при вводе не отображаются).
4. Теперь нам нужно перейти в папку с флешкой. Флешки обычно монтируются в
/run/media/ваш_логин/имя_флешки. Чтобы не искать и не вбивать длинные пути вручную, используем автодополнение клавишей Tab:
- Введите команду
# cd /run/media/ Enter пока не нажимаем - Нажмите
Tab один раз - терминал сам подставит ваше имя пользователя (например,
/run/media/ivan/)
- Нажмите
Tab ещё раз - подставится имя флешки (например,
/run/media/ivan/MYFLASH/)
- Нажмите
Enter - ЕСТЬ, - вы в папке флешки, там где лежит наш скрипт.
Эта "магия" работает если подключена одна флешка. Если подключить сразу несколько - вместо автоподстановки выдаст список.
ВАЖНОЕ ОТСТУПЛЕНИЕ ПРО ОКОНЧАНИЯ СТРОКЕсли вы создавали файлы скриптов в Windows (в Блокноте), то при запуске в Linux они скорее всего выдадут ошибку. Это потому, что Windows и Linux по-разному обозначают конец строки. Из-за этого bash в файле, созданном в Windows, увидит лишние символы. Посему такой файл требует исправления "под Линукс". Вот как раз в этот момент, когда вы от root зашли на флешку, удобнее всего сначала исправить файл скрипта, если это требуется, а потом уже запустить его.
Как исправить до запуска. Способ 1 - через терминал с помощью утилиты:Рекомендую иметь на компьютере простенькую утилиту dos2unix. Она есть в репозиториях.
1. Подключите флешку, зайдите в неё через терминал (как учились выше).
2. Установите утилиту
dos2unix (однократно):
# apt-get update
# apt-get install dos2unix3. Запустите обработку скрипта:
dos2unix deploy.shСпособ 2 - в редакторе:1. Откройте файл
deploy.sh в редакторе Mousepad (есть в системе по умолчанию, в Главном меню назывется "Текстовый редактор").
2. В верхнем меню выберите "Документ" - "Завершение строк" - "Unix (LF)".
3. Сохраните файл.
После этого скрипт будет работать без ошибок.
5. Запустите скрипт:
# sh archive_profile.shСкрипт спросит про перезапись (если архив уже был), упакует профиль и скопирует на флешку. В конце предложит удалить временный файл с компьютера - можете согласиться, чтобы не захламлять систему.
Всё, эталон готов! На флешке теперь лежит файл
standard_profile.tar.gz.
Шаг 3. Создаём скрипт развёртыванияНа той же флешке создаём ещё файл - назовём его
deploy.sh. В него вставляем вот такой код:
#!/bin/bash
# =====================================================================
# Проверен на Альт Образование 11.1 XFCE
# Предназначен для создания защищенного рабочего места ученика.
#
# ЧТО ДЕЛАЕТ ЭТОТ СКРИПТ:
# 1. Создает эталонного пользователя (standard) и ученика (student).
# 2. Разворачивает заранее настроенный профиль из архива.
# 3. Устанавливает службу автоматического сброса профиля при каждой загрузке.
# 4. Исправляет специфические ошибки Chromium и Яндекс.Браузера,
# возникающие при копировании профиля (ошибки MANIFEST и Singleton).
# =======================================================
# Проверка прав суперпользователя (root)
if [ "$EUID" -ne 0 ]; then
echo "Ошибка: Для настройки системы нужны права root (команда: su -)"
exit 1
fi
# Определяем папку, где лежит сам скрипт (чтобы найти архив профиля рядом)
SCRIPT_DIR=$(dirname "$(readlink -f "$0")")
echo "--- 1. СОЗДАНИЕ ГРУПП И ПОЛЬЗОВАТЕЛЕЙ ---"
# Стандартный набор групп обычного пользователя
USER_GROUPS="users"
# Создание эталона (standard) - из него будет браться "чистый" образ
getent group standard >/dev/null || groupadd standard
useradd -m -g standard -G "$USER_GROUPS" -s /bin/bash standard 2>/dev/null
echo "standard:123" | chpasswd
# Создание рабочего аккаунта (student) - он будет сбрасываться
getent group student >/dev/null || groupadd student
useradd -m -g student -G "$USER_GROUPS" -s /bin/bash student 2>/dev/null
echo "student:123" | chpasswd
# Скрываем 'standard' из меню выбора пользователей на экране входа
mkdir -p /var/lib/AccountsService/users
echo -e "[User]\nSystemAccount=true" > /var/lib/AccountsService/users/standard
echo "--- 2. РАЗВЕРТЫВАНИЕ ЭТАЛОННОГО ПРОФИЛЯ ---"
# Ищем архив с настроенным профилем
if [ -f "$SCRIPT_DIR/standard_profile.tar.gz" ]; then
rm -rf /home/standard
# Распаковка (ожидается, что внутри архива папка 'standard')
tar -xzf "$SCRIPT_DIR/standard_profile.tar.gz" -C /home/
chown -R standard:standard /home/standard
echo "Эталонный профиль успешно развернут."
else
echo "ОШИБКА: Файл standard_profile.tar.gz не найден в папке со скриптом!"
exit 1
fi
echo "--- 3. СОЗДАНИЕ СКРИПТА АВТОМАТИЧЕСКОГО СБРОСА ---"
# Создаем исполняемый файл, который будет запускаться системой при старте
cat <<'EOF' > /usr/local/bin/reset_student.sh
#!/bin/bash
# Скрипт восстановления профиля ученика из эталона
SOURCE="/home/standard"
DEST="/home/student"
# 1. Завершаем процессы, если они вдруг остались (бывает)
pkill -u student 2>/dev/null
sleep 1
# 2. Полная очистка текущего профиля ученика
if [ -d "$SOURCE" ]; then
# Здесь удаляются все файлы, включая скрытые (те, что начинаются с точки)
rm -rf $DEST/* && rm -rf $DEST/.[!.]*
# 3. Копирование эталона
cp -a $SOURCE/. $DEST/
# 4. Исправление путей внутри файлов (замена /home/standard на /home/student)
# Это нужно для корректной работы ярлыков и настроек приложений
find $DEST/.config -type f -exec sed -i "s|/home/standard|/home/student|g" {} +
find $DEST/.local -type f -exec sed -i "s|/home/standard|/home/student|g" {} +
find $DEST/Desktop -type f -name "*.desktop" -exec sed -i "s|/home/standard|/home/student|g" {} +
# 5. ТОЧЕЧНОЕ ЛЕЧЕНИЕ БРАУЗЕРОВ (Chromium и Яндекс)
# Убираем только то, что мешает запуску, сохраняя ваши настройки
for BROWSER in ".config/chromium" ".config/yandex-browser"; do
B_PATH="$DEST/$BROWSER"
if [ -d "$B_PATH" ]; then
# Удаляем "замки" сессии (решает проблему запуска при переименовании ПК)
find "$B_PATH" -name "Singleton*" -delete 2>/dev/null
find "$B_PATH" -name "Lock" -delete 2>/dev/null
# Удаляем только базу индексов синхронизации (решает ошибку MANIFEST)
# Это не удаляет закладки или пароли
find "$B_PATH" -type d -name "Sync Data" -exec rm -rf {} + 2>/dev/null
# Исправляем статус завершения в Preferences (чтобы не было окна "Восстановить?")
find "$B_PATH" -name "Preferences" -type f | while read -r PREF; do
sed -i 's/"exit_type":"[^"]*"/"exit_type":"Normal"/' "$PREF"
sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' "$PREF"
done
fi
done
# 6. Сброс прав доступа (владелец должен быть student)
chown -R student:student $DEST
echo "Профиль student сброшен: $(date)" >> /var/log/student_reset.log
fi
EOF
chmod +x /usr/local/bin/reset_student.sh
echo "--- 4. РЕГИСТРАЦИЯ СЛУЖБЫ В СИСТЕМЕ (SYSTEMD) ---"
# Настройка службы, которая сработает ПЕРЕД запуском графического входа
cat <<EOF > /etc/systemd/system/student-reset.service
[Unit]
Description=Сброс профиля ученика до запуска графики
DefaultDependencies=no
After=local-fs.target
Before=display-manager.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/reset_student.sh
RemainAfterExit=no
[Install]
WantedBy=graphical.target
EOF
# Включение службы в автозагрузку
systemctl daemon-reload
systemctl enable student-reset.service
echo "-------------------------------------------------------"
echo "УСТАНОВКА ЗАВЕРШЕНА УСПЕШНО!"
echo "-------------------------------------------------------"
echo "ИНСТРУКЦИЯ ДЛЯ АДМИНИСТРАТОРА: последний штрих (по желанию)"
echo "1. В Центре управления системой (acc) включите 'Автоматический вход'"
echo " для пользователя 'student'."
echo "2. Теперь при каждой перезагрузке профиль будет возвращаться"
echo " к предварительно настроенному состоянию."
echo "-------------------------------------------------------"Сохраните файл.
Теперь на флешке:- archive_profile.sh - скрипт создания эталонного профиля (пригодится, если захотите обновить эталон)
- deploy.sh - скрипт для настройки ученических компьютеров
- standard_profile.tar.gz - сам архив с эталонным профилем
Шаг 4. Развёртываем на целевом компьютере
1. Вставляем нашу флешку.
2. Открываем терминал.
3. Переходим в root:
su -4. Переходим в папку флешки (используем Tab, как учились выше).
5. Если не сделали этого раньше - правим "под линукс" окончания строк (см. выше) и при необходимости запускаем dos2unix deploy.sh.
6. Запускаем скрипт:
# sh deploy.sh
Скрипт отработает и покажет сообщение об успешном завершении. В процессе он создаст пользователей standard и student (пароль у обоих 123)
Шаг 5. Последний штрих - автоматический вход
Чтобы ученики сразу попадали в свой профиль, не выбирая пользователя, можно включить автовход:
1. Откройте Центр управления системой (acc).
2. Перейдите в раздел «Локальные пользователи».
3. Выберите пользователя student.
4. Включите ему опцию "Автоматический вход в систему".
Теперь при включении компьютера система сама зайдет под учеником. Если вдруг понадобится войти в standard - на экране входа есть пункт "Другие", там можно ввести логин вручную.
Проверяем
1. Перезагрузите компьютер.
2. Войдите от student (если включили ему Автоматический вход - он сам войдёт).
3. Посмотрите рабочий стол - он должен быть точно таким, как вы настроили в эталоне. Если мониторы с одинаковым разрешением.
4. Теперь наведите там бардак (создайте папку на рабочем столе, поменяйте обои, откройте браузер и настройте что-нибудь). Да, специально поломайте, чтобы проверить!
5. Перезагрузите компьютер ещё раз.
6. После входа всё должно вернуться к исходному состоянию. Если да - всё работает!
Как это устроено (кратко, для понимания)
- При загрузке компьютера, ещё до появления экрана входа, срабатывает служба student-reset.service.
- Она запускает скрипт /usr/local/bin/reset_student.sh, который:
1. Полностью очищает домашнюю папку ученика (/home/student).
2. Копирует туда содержимое папки эталона (/home/standard).
3. Заменяет в настройках пути с /home/standard на /home/student (чтобы ярлыки и программы знали, где искать файлы).
4. Подчищает за браузерами их "замки" и ошибочные файлы.
5. Ставит правильного владельца на все файлы (ученика).
- После этого запускается графическая оболочка, и ученик видит "свежий" профиль. Разумеется, загрузка при этом займёт немного больше времени.
Пользователь standard не участвует в работе - он просто хранит эталон. На экране входа его не видно, но в него всегда можно войти введя логин вручную, если нужно поправить что-то в эталоне.
Скрипт уже включает лечение для Chromium и Яндекс.Браузера (тех болячек, с которыми я столкнулся). Если используете Firefox - он обычно ведёт себя лучше, но если возникнут проблемы... Я не пользуюсь Firefox, поэтому разбираться вам придётся самим.
Кстати. Я не советую для "замороженного" профиля использовать дополнения в браузерах, особенно часто обновляемые. Они хранятся в профиле пользователя и значит, при каждой перезагрузке будут возвращаться к исходному состоянию. Если появится новая версия дополнения - она начнёт скачиваться и обновляться при каждой перезагрузке. Вообще нежелательно иметь у student что-то самообновляемое.
Пароли пользователей
По умолчанию пароли у обоих 123. Можете сменить их, например, через Центр управления (acc).
Как откатить всё в зад обратно
Если по какой-то причине нужно отключить сброс профиля и вернуть обычную работу:
1. Отключите службу:
# systemctl disable student-reset.service (можно сделать и через Центр управления системой ).
2. Удалите скрипт сброса (необязательно):
# rm /usr/local/bin/reset_student.sh
Сами пользователи standard и student останутся. Если хотите удалить и их - можно через Центр управления (acc).
Теперь на флешке лежит готовый набор инструментов:
- archive_profile.sh - чтобы создать эталон (если понадобится перенастроить)
- deploy.sh - чтобы развернуть систему на любом компьютере класса
- standard_profile.tar.gz - сам эталонный профиль
Эту флешку можно носить с собой и за 5 минут превратить любой компьютер в "неубиваемое" ученическое место. Просто вставляете флешку, запускаете deploy.sh от root - и готово. А если понадобится внести изменения на всех компьютерах - на одном входите от standard, правите что нужно. Потом скриптом archive_profile.sh сохраняете уже исправленный профиль на флешку - и опять же разносите его по классу.
UPD: Исправил скрипт. Я по привычке "тащил" в него весь набор групп обычного пользователя. В этом нет смысла, достаточно только группы users - и система назначит все остальные группы по дефолту. А вот если в списке будет отсутствующая группа - может не создаться пользователь. Но саму возможность прописать свой набор групп я оставил.