#import "@docs/bmstu:1.0.0":*
#import "@preview/tablex:0.0.8": tablex, rowspanx, colspanx, cellx
#show: student_work.with(
  caf_name: "Компьютерные системы и сети",
  faculty_name: "Информатика и системы управления",
  work_type: "лабораторной работе",  
  work_num: 3,
  study_field: "09.03.01 Информатика и вычислительная техника",
  discipline_name: "Операционные системы",
  theme: "Исследование среды управления и методов защиты",
  author: (group: "ИУ6-52Б", nwa: "<NAME>"),
  adviser: (nwa: "<NAME>"),
  city: "Москва",
  table_of_contents: true,
)

= Введение
== Цель работы
Исследование среды управления Linux и методов защиты.
== Общая информация
В данной работе на проработку выносится следующее:
- Окружения рабочего стола (DE) Linux (GNOME, KDE,Xfce,LXDE);
- Настройка Openbox;
- Установка и настройка панелей;
- Настройка autostart;
- Настройка рабочего стола;
- Отображение иконок;
- Установка и настройка conky;
- Управление с помощью консоли;
- Основные команды и утилиты;
- Основные утилиты;
- Объединение команд;
- Более сложные утилиты;
- top, ps, pstree;
- ping, netstat, ip;
- Написание скриптов на bash.
= Выполнение
== Установка X Window System и Openbox
X Window System представляет собой оконную систему, определяющую
стандартные интерфейсы и протоколы для работы с графическим
интерфейсом пользователя. В данной ЛР будет использована открытая
реализация X.Org. Для установки X.Org нужно выполнить следующую
команду:
```sh apt-get install xorg```.
#img(image("img/1.png", width:80%), [```sh apt-get install xorg```])
#img(image("img/2.png", width:80%), [```sh apt-get install xorg```])

После установки оконной системы требуется установить Openbox. Для
этого нужно выполнить команду:
```sh apt-get install openbox dbus-x11```

#img(image("img/4.png", width:80%), [```sh apt-get install openbox dbus-x11```])
#img(image("img/5.png", width:80%), [```sh apt-get install openbox dbus-x11```])

Чтобы активировать графический интерфейс, необходимо запустить xсервер: ```sh startx```.

#img(image("img/6.png", width:90%), [```sh startx```])
#img(image("img/7.png", width:90%), [Рабочий стол и меню])

== Эмулятор терминала в графическом режиме
Выберем из меню «Terminal emulator». Открывается окно `uxterm`. В
этом окне мы будем вводить команды так же, как в текстовом режиме в мы
вводили команды в `bash`.
#img(image("img/8.png", width:90%), [Окно `uxterm`])

Выполним команду: ```sh pstree```
#img(image("img/9.png", width:90%), [```sh pstree```])

Тут `bash` работает, просто вывод текста осуществляется
посредством `xterm` (`uxterm`).
Установим другой эмулятор терминала командой:
```sh apt-get install kitty```

В этом терминале есть полоса прокрутки, выделение и копирование
текста в буфер обмена.

#img(image("img/10.png", width:90%), [```sh apt-get install kitty```])
#img(image("img/11.png", width:90%), [```sh apt-get install kitty```])
#img(image("img/12.png", width:90%), [Откроем ```sh kitty```])
#img(image("img/13.png", width:90%), [Интерфейс ```sh kitty```])

== Подменю «Debian»
В меню нет пункта «Debian», это значит что отсутствуют некоторые
необходимые пакеты. Откроем терминал и дадим команды:
```sh apt-get install menu```
```sh apt-get install menu-xdg```

#img(image("img/16.png", width:90%), [```sh apt-get install menu``` ```sh apt-get install menu-xdg```])

Далее выполним следующие комманды:

#img(image("img/17.png", width:90%), [```sh mkdir ~/.config```\
```sh mkdir ~/.config/openbox```\
```sh cp /etc/xdg/openbox/rc.xml ~/.config/openbox/```\
```sh cp /etc/xdg/openbox/menu.xml ~/.config/openbox/```\
```sh cp /etc/xdg/openbox/autostart ~/.config/openbox/```])

Первые две команды создадут для пользователя `root`
папку `./config/openbox`, остальные три скопируют туда настройки из общей
папки настроек `Openbox` в папку настроек конкретного пользователя.

== Текстовый браузер w3m в Openbox.

В консоли `kitty` браузер `w3m` способен загружать изображения. Для
этого необходимо поставить пакет `w3m-img`:\
```sh apt-get install w3m-img```\

#img(image("img/19.png", width:90%), [```sh apt-get install w3m-img```])

После успешной установки запустим браузер.

#img(image("img/20.png", width:90%), [```sh w3m google.com```])

== Установка текстового редактора «mousepad»

Соберем `mousepad` из исходников. Для этого перейдем на сайт `deb.debian.org/debian`.

#img(image("img/21.png", width:90%), [```sh w3m deb.debian.org/debian```])

А затем последовательно перейдем по ссылкам пути к директории `pool/main/m/`
Далее с помошью поиска (`/`) найдем `mousepad`.

#img(image("img/27.png", width:90%), [Поиск `/mousepad`])
#img(image("img/28.png", width:90%), [Поиск `/mousepad`])
Попадаем в директорию и ищем архив с исходниками.
#img(image("img/31.png", width:90%), [Архив с исходниками])

Нажимаем Enter и скачиваем файл. 
#img(image("img/32.png", width:90%), [Загрузка завершена])
После выходим из браузера. При помощи комманды ```sh ls``` видим, что файл загружен и находится в домашней директории. 

#img(image("img/33.png", width:90%), [Загруженный файл])

Распакуем архив при помощи утилиты ```sh tar```.

#img(image("img/34.png", width:90%), [```sh tar -xf mousepad_0.5.10.orig.tar.bz2```])

Теперь установим компилятор и стандартные библеотеки:\ ```sh apt-get install build-essential``` ```sh apt-get install intltool libgtk2.0-dev```\ ```sh apt-get install intltool gtk```

#img(image("img/35.png", width:80%), [```sh apt-get install build-essential```])
#img(image("img/36.png", width:80%), [```sh apt-get install build-essential```])
#img(image("img/37.png", width:70%), [```sh apt-get install intltool libgtk2.0-dev```])
#img(image("img/38.png", width:70%), [```sh apt-get install intltool libgtk2.0-dev```])
#img(image("img/41.png", width:70%), [```sh apt-get install intltool gtk```])
#img(image("img/42.png", width:70%), [```sh apt-get install intltool gtk```])
#img(image("img/44.png", width:70%), [```sh apt-get install intltool gtksourceview```])
#img(image("img/45.png", width:70%), [```sh apt-get install intltool gtksourceview```])


Переходим в распакованный каталог, собираем и устанавливаем:\
```sh cd mousepad_0.5.10```\
```sh ./configure```\
```sh make```\
```sh make install-strip```

#img(image("img/46.png", width:70%), [```sh ./configure```])
#img(image("img/48.png", width:70%), [```sh make```])
#img(image("img/50.png", width:70%), [```sh make install-strip```])
#img(image("img/51.png", width:70%), [```sh make install-strip```])

Итак, мы установили `mousepad`. Теперь перезагрузим терминал и зайдем в лог `xorg`.

#img(image("img/58.png", width:70%), [Лог `xorg`])

Далее в лабораторных работах я буду использовать `neovim` так как для меня этот редактор удобнее. Установил я его коммандой ```sh apt-get install neovim```. Конфигурацию тоже написал я, ее исходники лежат по адресу `github.com/pluttan/dotfiles/nvim`.


== Установка и настройка панелей
По умолчанию Openbox предоставляет пользователю лишь рабочий стол
с контекстным меню. Для получения более привычного способа управления
нужно установить панели. Среди самых популярных панелей для Openbox
можно выделить `xfce4-panel`, `lxpanel` и `tint2`. Первые две входят в состав `Xfce`
и `LXDE` соответственно.
Для установки `xfce4-panel` необходимо выполнить команду:
```sh apt-get install dbus-x11 xfce4-panel```

#img(image("img/61.png", width:70%), [```sh apt-get install dbus-x11 xfce4-panel```])
Для запуска панели необходимо набрать в терминале:
```sh xfce4-panel```
После этого будет показан диалог первого запуска, необходимо выбрать
«Использовать настройки по умолчанию».
#img(image("img/62.png", width:70%), [```sh xfce4-panel```])
#img(image("img/63.png", width:70%), [```sh xfce4-panel```])
#img(image("img/64.png", width:70%), [```sh xfce4-panel```])

Однако при закрытии окна консоли панель пропадёт. Она пропала из-за
того, что родителем процесса панели являлся процесс окна консоли. Этот
недостаток может быть исправлен запуском параллельных процессов. 

#img(image("img/65.png", width:70%), [```sh kitty||xfce4-panel```])

Настроим верхнюю панель. Для этого нужно щёлкнуть правой клавишей
мыши по панели, после чего появится меню. В этом меню нужно выбрать пункт «Параметры панели», после чего вокруг панели появится выделение и откроется окно настроек.

#img(image("img/67.png", width:70%), [Меню])
#img(image("img/68.png", width:70%), [Настройки])

Над вкладками находится переключатель панелей (раскрывающийся
список) и кнопки добавления/удаления панелей.

Вкладка «Экран» позволяет настроить такие опции, как ширину панели,
возможность перетаскивать панель, ширину панели, автоматическое скрытие
и т.д.

Вкладка «Внешний вид» содержит всего одну опцию, позволяющую
выбрать стиль панели: системный, цвет или изображение.
Вкладка «Элементы» содержит список элементов, размещённых на
панели. Их можно перемещать (клавиши с зелёными стрелками),
настраивать, удалять и добавлять.

Настроим нижнюю панель следующим образом: постоянная ширина,
возможность перетаскивания по экрану, автоскрытие.

Для настройки нижней панели нужно выбрать «Панель 2» в
переключателе панелей. На вкладке «Экран» уберем отметку с пункта
«Закрепить панель» и поставить в «Автоматически показывать и скрывать
панель», ширину установить 45пикселов и длину 25%. 

#img(image("img/68.png", width:70%), [«Экран»])

На вкладке
«Элементы» убрать все элементы, кроме «Показать рабочий стол»,
разделитель и «Каталог». Разделитель настроить следующим образом: стиль
– прозрачный, установить отметку в пункте «Расширять». После закрытия
окна настройки панель скроется, при наведении на неё курсора она
развернётся. Теперь панель можно перетаскивать по всему экрану (захватив
курсором одно из мест по краю панели, отмеченных точками)

#img(image("img/69.png", width:60%), [«Элементы»])

#img(image("img/70.png", width:70%), [Результат])

== Настройка autostart

Как было отмечено, панель закрывается при закрытии окна терминала,
из которого она была вызвана. Это можно исправить с помощью настроек
автозапуска.

В этом пункте работы будет использоваться системный
скрипт autostart. Openbox может быть настроен для каждого пользователя
отдельно, тогда файлы autostart, environment, rc.xml и menu.xml должны
содержаться в домашнем каталоге каждого пользователя
(`~/.config/openbox/`). При отсутствии этих файлов Openbox обращается к
системным, хранящимся в папке `/etc/xdg/openbox/`. Эти файлы лучше
оставлять неизменными или исправлять очень аккуратно, так как ошибка в
них может вызвать негативные последствия. Особенно этот факт
должны иметь в виду системные администраторы, многие программы
работают по такому принципу.
Добавим автозапуск панели и терминала для всех пользователей.
Откроем в `neovim` файл `autostart`:
```sh nvim /etc/xdg/openbox/autostart```

#img(image("img/73.png", width:70%), [```sh nvim /etc/xdg/openbox/autostart```])
#img(image("img/74.png", width:70%), [Исправленный файл `autostart`])
#pagebreak()
== Файловый менеджер
Установим PCManFM:
```sh apt-get install pcmanfm```

#img(image("img/77.png", width:70%), [```sh apt-get install pcmanfm```])

Файловый менеджер вызывается командой ```sh pcmanfm```. 

#img(image("img/99.png", width:70%), [```sh pcmanfm```])

Я буду пользоваться файловым менеджером `yazi`.

#img(image("img/81.png", width:70%), [```sh yazi```])

== Настройка рабочего стола

Для организации привычного пользователю Windows окружения не
хватает, как минимум, одного важного элемента: иконок на рабочем столе.
Для отображения иконок могут использоваться отдельные программы. В
данной ЛР предлагается использовать `idesk`. Вторым элементом, который
будет добавлен на рабочий стол, будет менеджер системных ресурсов `conky`.
Для отображения иконок рабочего стола нужно установить `idesk`:
```sh apt-get install idesk```
#img(image("img/83.png", width:70%), [```sh apt-get install idesk```])

При попытке вызова будет выдана ошибка. Она объясняется
отсутствием необходимой папки, её можно создать следующей командой:

```sh mkdir ~/.idesktop```
#img(image("img/84.png", width:70%), [```sh mkdir ~/.idesktop```])

Результат повторного запуска `idesk`:

#img(image("img/85.png", width:70%), [```sh idesk```])

Необходимо исправить скрипт `autostart`. Теперь он будет
выглядеть так:

#img(image("img/86.png", width:70%), [`autostart`])

Теперь необходимо попробовать создать ярлык на рабочем столе.
Ярлыки в idesk хранятся в виде файлов lnk. Для создания ярлыка (и открытия
его для редактирования) для mousepad нужно выполнить следующую команду:

```sh nvim ~/.idesktop/leafpad.lnk```

В данной команде используется особенность большинства редакторов в
UNIX-системах: если файл существует, он открывается, если нет – он
создаётся.

#img(image("img/87.png", width:70%), [Файл создан])

В файле необходимо набрать следующее:

```sh
table Icon
  Caption: Mousepad
  Command: /usr/bin/mousepad
  Icon: /usr/share/icons/gnome/32x32/apps/accessories-texteditor.png
  Width: 32
  Height: 32
  X: 100
  Y: 100
end
```

#img(image("img/88.png", width:70%), [Добалена конфигурация ярлыка])

Это вызовет ошибку связанную с неустановленным `GNOME` поэтому я установил весь `GNOME`, а после отключил его функционал.

#img(image("img/91.png", width:70%), [Ошибка])

Перезагрузить `idesk` можно введя сделующие комманды: ```sh killall idesk``` ```sh idesk```


#img(image("img/89.png", width:70%), [```sh killall idesk``` ```sh idesk```])

#img(image("img/92.png", width:70%), [Иконка создана])

Преимуществом хранения ярлыков в таком формате является гибкая
настройка. Возможно настроить не только размер и положение, но и
реакцию на отдельные кнопки мыши. Так, `Command[0]` отвечает за реакцию
на двойное нажатие левой кнопки мыши, `Command[1]` – за двойное
нажатие правой. Поменяем название ярлыка на `TextEditor` и сделаем так,
чтобы при двойном щелчке левой клавишей мыши открывался `Mousepad`, при
двойном щелчке правой – `neovim` в новом окне `kitty`.

#img(image("img/94.png", width:70%), [Исправленная конфигурация])

Теперь необходимо настроить отображение иконок в `PCManFM`. Он
использует библиотеку `GTK`, следующая команда скачает и установит
иконки, которые будут использоваться всеми `GTK`-приложениями:
```sh apt-get install tango-icon-theme```
Для того, чтобы именно эти иконки использовались в GTKприложениях, необходимо создать для них конфигурационный файл:
```sh nvim ~/.gtkrc-2.0```
В этом файле необходимо прописать следующую строчку:
```sh gtk-icon-theme-name="Tango"```

#img(image("img/97.png", width:70%), [Исправленная конфигурация])

#img(image("img/118.png", width:70%), [Новые иконки])

== Установка и настройка `conky`

`conky` представляет собой монитор системных ресурсов. Это гибкая
утилита, позволяющая отслеживать такие параметры, как использование ОЗУ
и диска, нагрузку на ЦП. Однако conky может отображать даже новости и
погоду.
Для установки `conky` надо выполнить:
```sh apt-get install conky```(```sh apt-get install conky-all```)

#img(image("img/100.png", width:70%), [```sh apt-get install conky-all```])

Для настройки `conky` необходимо отредактировать его
конфигурационный файл:
```sh nvim /etc/conky/conky.conf```

#img(image("img/101.png", width:70%), [```sh nvim /etc/conky/conky.conf```])

Как и в случае с настройкой `Openbox`, это общий файл.
Пользовательские файлы настроек conky должны лежать по адресу
`~/.conkyrc`.
Необходим изменить положение `conky`. Для этого замените строку
`alignment top_left`
на
`alignment top_right`
В секции `conky.text` задается текст, выводимый на панель `conky`.
Следующая строка добавит в conky отображение имени пользователя в
системе:
```sh ${color grey} Current user: $USER```

#img(image("img/102.png", width:70%), [```sh nvim /etc/conky/conky.conf```])

Перезапустим `conky` и увидим результат:

#img(image("img/104.png", width:70%), [`conky`])

Наконец, необходимо отредактировать скрипт автозапуска, добавив в
него `conky`, теперь скрипт должен выглядеть следующим образом:

#img(image("img/105.png", width:70%), [`autostart`])

== Настройка фона рабочего стола

Скачаем большую коллекцию фонов для рабочего стола: `https://github.com/D3Ext/aesthetic-wallpapers`.

#img(image("img/106.png", width:70%), [`aesthetic-wallpapers`])

Откроем текстовым редактором файл `/root/.ideskrc`, и зададим полный
путь к файлу фоновой картинки в параметре `Backgroung.file`. Убедитесь,
что после имени файла нет пробела. Перезапустим `idesk`.

#img(image("img/107.png", width:70%), [`/root/.ideskrc`])
#img(image("img/119.png", width:70%), [`/root/.ideskrc`])

#img(image("img/108.png", width:70%), [Результат])

== Настройка расширения экрана

Отредактируем `xorg.conf` так:
#img(image("img/113.png", width:70%), [`xorg.conf`])
Перезапустим `xorg` и получим финальный результат:
#img(image("img/117.png", width:100%), [финальный результат])


