Автор Тема: Создание "неубиваемого" ученического профиля  (Прочитано 295 раз)

Оффлайн gadfly7

  • Участник
  • *
  • Сообщений: 23
Готовое решение для тех, кто устал от того, что ученики постоянно "ломают" настройки компьютеров

Короткое втупление

Честно говоря, не знаю, подходит ли вообще эта статья под формат данного форума. И не ошибся ли я с разделом. С одной стороны это "Линукс в образовании", с другой - вроде бы "Поиск подходов к решению задач". Модераторы разберутся.

Я хочу предложить школьным учителям информатики набор моих простых решений. Как я организовал работу у себя.
ИМХО, им нужны именно готовые решения, не требующие курения мануалов и плясок с бубнами. И потому постараюсь каждый шаг прям "разжевывать".

Нужно ли здесь такое? Если да, то у меня есть ещё.

К слову. Я вообще-то пенсионер (мне за это скидка), работаю лаборантом в школе, образования нет (ещё скидка). А до пенсии поезда водил и с компьютерами дела имел только в игры играть. Поэтому знаний имею не особо много, а значит, наверняка делаю что-то не так и вообще неправильно.

Сегодня сделаем самое нужное - "заморозим" профиль ученика.

Что получим в итоге:
  • На компьютерах появятся два пользователя: 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 dos2unix
3. Запустите обработку скрипта:
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 - и система назначит все остальные группы по дефолту. А вот если в списке будет отсутствующая группа - может не создаться пользователь. Но саму возможность  прописать свой набор групп я оставил.
« Последнее редактирование: 26.03.2026 12:23:59 от gadfly7 »

Оффлайн kessys

  • Участник
  • *
  • Сообщений: 1 010
Кажется для всего этого есть киоск
О подпись)
Жизнь с kde не так плоха, Но без ssd, это жестоко грустно.

Оффлайн RoPP

  • Участник
  • *
  • Сообщений: 122
Готовое решение
спасибо. я попробую.
только где им хранить свои созданные файлы?
еще - у меня от 7 до 11 профилей на каждом компе, школа маленькая, практически на каждого ученика свой профиль.
как тут быть?

Оффлайн YYY

  • Мастер
  • ***
  • Сообщений: 6 105
Готовое решение
спасибо. я попробую.
только где им хранить свои созданные файлы?
еще - у меня от 7 до 11 профилей на каждом компе, школа маленькая, практически на каждого ученика свой профиль.
как тут быть?

создайте каталог /home/file
дайте возможность туда писать всем и пусть там разводят помойку :)))

Оффлайн Nicom

  • Участник
  • *
  • Сообщений: 1 257
только где им хранить свои созданные файлы?
На файловом сервере, но ресурс получится только общий для всех. То есть любой сможет удалить все файлы разом.

Или создавать пользователей по уникальным идентификаторам, что не совместимо с кириллическими ФИО. Придётся искать идентификаторы из латиницы, например, FIO-год_рождения-уникальная_цифра.

Оффлайн gadfly7

  • Участник
  • *
  • Сообщений: 23
только где им хранить свои созданные файлы?
На флешке?
Всё это делалось как раз для того, чтобы никто не хранил свои файлы на публичном компьютере. Хотя бы потому, что эти файлы потом никто удалять и не подумает - они так и останутся на компьютере валяться.
А вообще для подобных надобностей у меня настроены сетевые папки. Если есть интерес - могу и это решение здесь выложить. Я все свои наработки сводил к готовым скриптам. Есть скрипт, создающий и настраивающий сетевые папки учителя и скрипт, монтирующий эти папки ученику.
от 7 до 11 профилей на каждом компе, школа маленькая, практически на каждого ученика свой профиль.
как тут быть?
Ну можно выбрать два варианта. Можно оставить всё как есть и постоянно выступать в качестве мусорщика на этих компьютерах. Или приучить к тому, что компьютеры - публичные и нужно заботиться о сохранности своих файлов. Если они не многогигабайтные файлы сохраняют, то заведите им сетевую папку на своём компьютере - и пусть туда файлы сбрасывают. Облака заведите на каком-нибудь Яндексе в конце концов.
« Последнее редактирование: 28.02.2026 02:01:34 от gadfly7 »

Оффлайн gadfly7

  • Участник
  • *
  • Сообщений: 23
Кажется для всего этого есть киоск
У киоска совсем другая цель. Ограничить пользователя сверх обычного, разрешив ему только определённые действия. Здесь наоборот: ученик волен на компьютере делать всё что угодно в рамках прав обычного пользователя. Он может экспериментировать с личными настройками и настройками программ. Просто после того, как он закончит работу - всё вернётся к первоначальному виду.

Оффлайн rits

  • Участник
  • *
  • Сообщений: 1 445
  • ITS
до загрузки графики запустить
# rsync -a --delete /home/standard /home/student && chown -R student:student /home/student
Будет достаточно, я думаю.

#!/bin/bash
USERS="user1 user2 user3 student pupil"
STANDARD="/home/standard"

for user in $USERS; do
    echo "Синхронизация /home/$user"
    rsync -a --delete "$STANDARD" "/home/$user"
    chown -R "$user:$user" "/home/$user"
done
« Последнее редактирование: 28.02.2026 12:25:25 от rits »

Оффлайн yaleks

  • Мастер
  • ***
  • Сообщений: 6 561
Сколько подобных велосипедов создано...
Но более-менее законченный на сегодня это https://0x1.tv/Система_управления_компьютерным_классом_для_МОС_(Петр_Леляев,_OSEDUCONF-2024)

Оффлайн gadfly7

  • Участник
  • *
  • Сообщений: 23
Будет достаточно
Не достаточно. Многие программы при первом запуске прописывают в своих настройках абсолютные пути. Скажем, Pascal ABCNet. Будут два сценария. Первый - если профиль скопировать до первого запуска, у конечного юзера прога создаст свои конфиги и всё будет работать. Проблема в том, что конфиги будут создаваться при каждой перезагрузке и нельзя будет заранее настроить программу. Второй - если ты всё-таки зашел в программу для настроек. Конфиг создался - и в нём жёстко прописана прямая ссылка (не относиельная, абсолютная). И у целевого юзера программа будет пыжиться залезть в папки standard. И таких бяк будет куча. Скажем, ссылки боковой панели Thunar тоже укажут "не туда". Поэтому-то я переписываю пути (возможно даже что-то упускаю). И я ведь неспроста удаляю пару файлов из конфигов Хромиума и Я Браузера. Эти су нехорошие создают привязки при первом запуске. К профилю привязываются и к компьютеру.

Оффлайн Kirikekeks

  • Полу-попутчик, полу-мудрец, полу-невежда, полу-подлец...
  • Участник
  • *
  • Сообщений: 318
Отличная идея, особенно учитывая вводные.
Смущает меня флешка, но тут кто к чему привык. Возможно, вариант размещения этого архива в разархивированном виде на gitflic || gitverse и создание задания в crontab ученических машин
@reboot git reset --hard standart.git && git clean -fd standart.gitПозволило бы избавиться от флешки, сократить время развёртывания на порядок, и количество внимания к вопросу сократить до ноля. Ну, 400 машин возможно следует разбить по 5ти репозиториям, если они включаются одновременно.
Плюсом, для достойных учеников, можно было бы разрешить сохранять-скачивать свои конфигурации, после загрузки стандарта в ветках репозитория misha, masha, sasha и вести долговременную работу не теряя наработки.А возможно даже и объединяя результаты :-)).
В самом репозитории standart.git сделать кнопку ahtung приводящие машины в отчётно-идеальное состояние для проверки. За секунды.
Ламер

Оффлайн gosts 87

  • Участник
  • *
  • Сообщений: 3 779
  • Дмитрий/Dmitry/德米特里/दिमित्री