Полезные команды Linux: различия между версиями

мНет описания правки
м Фикс категории
 
(не показано 70 промежуточных версий этого же участника)
Строка 1: Строка 1:
[[Категория: Руководства]]
В данном руководстве перечислен список команд к различным Linux приложениям. Некоторые из этих команд могут быть применены и к Windows версиям программ.
В данном руководстве перечислен список команд к различным Linux приложениям. Некоторые из этих команд могут быть применены и к Windows версиям программ.


== Базовые команды ==
== Файловые операции ==
<code>setxkbmap -layout us,ru -option grp:alt_shift_toggle</code>
=== Базовые команды ===
 
Включение возможности изменения раскладки клавиатуры через Alt + Shift.
 
<code>xrandr --output eDP1 --dpi 135.09</code>
 
Установить DPI для подключенного дисплея/монитора ([https://www.sven.de/dpi/ Подсчитать DPI можно тут]).


<code>DISPLAY=:0 anydesk</code>
Создать символическую ссылку


Удаленно запустить приложение на основном дисплее (X11).
<code>ln -s /original/path/to/file /path/to/symlink</code>


== Файловые операции ==
=== Общие команды ===
=== Общие команды ===
<code>find . -type d -exec sh -c 'cd -P -- "{}" && pwd -P' \;</code>


Запустить команду pwd -P в текущем каталоге и в поддиректориях.
Запустить команду pwd -P в текущем каталоге и в поддиректориях.


<code>find -mindepth 1 -exec sh -c 'mv "$1" "$(echo "$1" | iconv -f cp1252 -t cp850 | iconv -f cp866 )"' sh {} \;</code>
<code>find . -type d -exec sh -c 'cd -P -- "{}" && pwd -P' \;</code>


Переименовать кириллические файлы в каталоге
Переименовать кириллические файлы в каталоге
<pre>find -mindepth 1 -exec sh -c 'mv "$1" "$(echo "$1" | iconv -f cp1252 -t cp850 | iconv -f cp866 )"' sh {} \;</pre>


=== Права доступа ===
=== Права доступа ===
Изменить владельца и группу для файла.


<code>chown username:usergroup file.txt</code>
<code>chown username:usergroup file.txt</code>


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


<code>stat -c %a file.txt</code>
<code>stat -c %a file.txt</code>


Показать режима доступа файла или папки в восьмеричной системе счисления Октал.  
=== Оценка использования пространства накопителя ===
Общий отчёт об использовании пространства файловой системы.


=== Оценка использования пространства накопителя ===
<code>df -h /</code>
<code>df -h /</code>


Общий отчёт об использовании пространства файловой системы.
Информация об использовании файлами и директориями пространства файловой системы.


<code>du -h file.bin</code>
<code>du -h file.bin</code>


Информация об использовании файлами и директориями пространства файловой системы.
Поиск 10 наибольших файлов и директорий с сортировкой по убыванию их размера.


<code>du -ahx . | sort -rh | head -10</code>
<code>du -ahx . | sort -rh | head -10</code>
Поиск 10 наибольших файлов и директорий с сортировкой по убыванию их размера.


=== Форматирование накопителя ===
=== Форматирование накопителя ===
<code>sudo dd if=/dev/zero of=/dev/sdb bs=1M</code>
Низкоуровневое форматирование накопителя.
Низкоуровневое форматирование накопителя.


<code>sudo partprobe</code>
<code>sudo dd if=/dev/zero of=/dev/sdb bs=1M status=progress</code>


Принудительно обновить таблицу разделов.
Принудительно обновить таблицу разделов.
<code>sudo partprobe</code>


=== Архивы ===
=== Архивы ===
==== Создание ====
Создать tar архив.
<code>tar -cf archive.tar file1 file2</code>
Создать tar архив и исключить добавление отдельного файла.
<code>tar --exclude='file3' -cf archive.tar file1 file2</code>
Создать tar архив директории без сохранении информации о полном пути файлов. Обратите внимание что перед site стоит пробел. Это позволяет при распаковке получить корневую директорию site со всем содержимым.
<code>tar -cf site1.tar -C /var/www/ site</code>
Создать tar архив с Gzip сжатием.
<code>tar -czf archive.tar.gz file1 file2</code>
Создать tar архив с Bz2 сжатием.
<code>tar -cjf archive.tar.bz2 file1 file2</code>
==== Просмотр содержимого ====
Посмотреть содержимое tar архива.
<code>tar -tf archive.tar</code>
Посмотреть содержимое Zip архива
<code>unzip -l archive.zip</code>
Если архив был случайно распакован не в ту папку и нужно удалить новые файлы, то можно воспользоваться списком файлов архива
<code>unzip -Z1 archive.zip | xargs -I {} rm -v "{}"</code>
Посмотреть содержимое Zip архива с кириллическими именами в названии файлов.
<code>unzip -l Архив.zip | grep -aEv '^Archive:' | iconv -f iso8859-1 -t cp850 | iconv -f cp866</code>
<code>unzip -l Архив.zip | grep -aEv '^Archive:' | iconv -f iso8859-1 -t cp850 | iconv -f cp866</code>


Посмотреть содержимое архива с кириллическими именами в названии файлов.
==== Распаковка ====
Распаковать tar архив в текущую директорию.
 
<code>tar -xf archive.tar</code>
 
Распаковать tar архив в требуемую директорию.
 
<code>tar -xf archive.tar -C ~/folder</code>
 
Другие возможные tar команды собраны здесь:
 
https://linuxize.com/post/how-to-create-and-extract-archives-using-the-tar-command-in-linux/
 
Распаковать zip архив в требуемую директорию.
 
<code>unzip archive.zip -d ~/folder</code>
 
==== Модификация архива ====
 
Добавить новый файл в tar архив.
 
<code>tar -rvf archive.tar newfile</code>
 
Удалить файл из tar архива.
 
<code>tar --delete -f archive.tar file1</code>


=== Portable Document Format (PDF) ===
=== Portable Document Format (PDF) ===
Склеить несколько pdf файлов в один.


<code>pdftk A=1.pdf B=2.pdf cat A1 B2-4 output Result.pdf</code>
<code>pdftk A=1.pdf B=2.pdf cat A1 B2-4 output Result.pdf</code>


Склеить несколько pdf файлов в один.
Разрезать pdf по листам.


<code>pdftoppm Input.pdf outputname -png</code>
<code>pdftoppm Input.pdf outputname -png</code>
Разрезать pdf по листам.


=== Изображения ===
=== Изображения ===
==== ExifTool ====
==== ExifTool ====
Прочитать EXIF атрибуты.


<code>exiftool 1.jpg</code>
<code>exiftool 1.jpg</code>


Прочитать EXIF атрибуты.
Удалить все EXIF атрибуты.


<code>exiftool -all= 2.jpg</code>
<code>exiftool -all= 2.jpg</code>


Удалить все EXIF атрибуты.
==== ImageMagick ====
Изменить размер изображения


==== ImageMagick ====
<code>convert 3.jpg -resize 128x128 1.png</code>
<code>convert 3.jpg -resize 128x128 1.png</code>


Изменить размер изображения
Перевернуть изображение


<code>convert 4.jpg -rotate 90 2.jpg</code>
<code>convert 4.jpg -rotate 90 2.jpg</code>


Перевернуть изображение
Конвертировать изображение в pdf файл


<code>convert 5.jpg Result.pdf</code>
<code>convert 5.jpg Result.pdf</code>


Конвертировать изображение в pdf файл
Конвертировать изображение в pdf файл с параметрами формата листа и заполнения заднего фона.


<code>convert 6.jpg -background white -page a4 Output.pdf</code>
<code>convert 6.jpg -background white -page a4 Output.pdf</code>


Конвертировать изображение в pdf файл с параметрами формата листа и заполнения заднего фона.
==== SANE ====
==== SANE ====
Получить изображение со сканера или МФУ.
<code>scanimage --format=png --output-file test.png --progress</code>
<code>scanimage --format=png --output-file test.png --progress</code>
Получить изображение со сканера или МФУ.


=== Видео ===
=== Видео ===
==== FFmpeg ====
==== FFmpeg ====
<code>ffmpeg -i "Made_in_Abyss_Retsujitsu_no_Ougonkyou_[02]_[AniLibria_TV]_[WEBRip_1080p].mkv" -vf subtitles="02.ass" -c:v libx264 -crf 23 -c:a aac -b:a 192k output-02.mp4</code>
Конвертировать аудиодорожку видео в формат MP3.
 
<code>ffmpeg -i filename.mp4 filename.mp3</code>
 
Сделать копию видео в формате mp4.
 
<code>ffmpeg -i example.mkv -c copy example.mp4</code>


Кодировать видео с наложением субтитров (Создание хардсаба).
Кодировать видео с наложением субтитров (Создание хардсаба).


<code>ffmpeg -i "Made_in_Abyss_Retsujitsu_no_Ougonkyou_[03]_[AniLibria_TV]_[WEBRip_1080p].mkv" -vf subtitles="03.ass" -map 0:0 -map 0:2 -c:v libx264 -crf 23 -c:a:2 aac -b:a 192k output-03.mp4</code>
<pre>ffmpeg -i "Made_in_Abyss_Retsujitsu_no_Ougonkyou_[02]_[AniLibria_TV]_[WEBRip_1080p].mkv" -vf subtitles="02.ass" -c:v libx264 -crf 23 -c:a aac -b:a 192k output-02.mp4</pre>


Кодировать видео с наложением субтитров и сделать 2-ую аудио-дорожку основной.
Кодировать видео с наложением субтитров и сделать 2-ую аудио-дорожку основной.
<pre>ffmpeg -i "Made_in_Abyss_Retsujitsu_no_Ougonkyou_[03]_[AniLibria_TV]_[WEBRip_1080p].mkv" -vf subtitles="03.ass" -map 0:0 -map 0:2 -c:v libx264 -crf 23 -c:a:2 aac -b:a 192k output-03.mp4</pre>
Вырезать отрезок видео в выбранном диапазоне времени.
<code>ffmpeg -ss 00:01:00 -to 00:02:00 -i input.mp4 -c copy output.mp4</code>


==== MKVToolNix ====
==== MKVToolNix ====
<code>mkvextract tracks Made_in_Abyss_Retsujitsu_no_Ougonkyou_\[03\]_\[AniLibria_TV\]_\[WEBRip_1080p\].mkv 4:AniLibria_TV-03.ass</code>
Извлечь 4-ую дорожку (счёт ведётся с нуля) содержащую встроенные субтитры.
 
<pre>mkvextract tracks Made_in_Abyss_Retsujitsu_no_Ougonkyou_\[03\]_\[AniLibria_TV\]_\[WEBRip_1080p\].mkv 4:AniLibria_TV-03.ass</pre>
 
==== yt-dlp ====
 
Cкачать плейлист YT с названием плейлиста в качестве имени папки


Извлечь 4-ую дорожку (счёт ведётся с нуля) содержащую встроенные субтитры.
<pre>yt-dlp -f "bestvideo[height<=1080]+bestaudio/best[height<=1080]" --yes-playlist --write-auto-subs --embed-subs --embed-chapters --embed-thumbnail -o /"path/%(playlist_title)s/%(playlist_index)s - %(title)s.%(ext)s" --embed-chapters https://youtube.com/playlist?list=xyz</pre>


== Сетевые команды ==
== Сетевые команды ==
<code>netstat -na</code>
Отобразить информацию о сетевых соединениях.
Отобразить информацию о сетевых соединениях.


<code>nmcli connection import type openvpn file ~/VPNs/name.ovpn</code>
<code>netstat -na</code>


Импорт OpenVPN профиля в NetworkManager.
Импорт OpenVPN профиля в NetworkManager.


<code>wol 00:00:00:00:00:00 -h example.com -p 9</code>
<code>nmcli connection import type openvpn file ~/VPNs/name.ovpn</code>


Послать Wake-on-LAN пакет на удаленную машину.
Послать Wake-on-LAN пакет на удаленную машину.


<code>ssh -X comminux@example.com -c chacha20-poly1305@openssh.com -C</code>
<code>wol 00:00:00:00:00:00 -h example.com -p 9</code>


Оптимизированная передача изображения с удаленного X сервера.
Оптимизированная передача изображения с удаленного X сервера.


<code>sudo grep -r '"-" "-"' /var/log/nginx</code>
<code>ssh -X comminux@example.com -c chacha20-poly1305@openssh.com -C</code>


Найти GET запросы в директории логов сервера Nginx, которые характерны DoS-атакам.
Найти GET запросы в директории логов сервера Nginx, которые характерны DoS-атакам.


<code>wget -r -k -l 2 -p -E -nc http://site.com/</code>
<code>sudo grep -r '"-" "-"' /var/log/nginx</code>


Загрузить копию веб-сайта и другие страницы посредством рекурсивного прохода по найденным веб-ссылкам.
Загрузить копию веб-сайта и другие страницы посредством рекурсивного прохода по найденным веб-ссылкам.


Полное описание параметров команды: https://pingvinus.ru/note/wget-download-sites
Полное описание параметров команды: https://pingvinus.ru/note/wget-download-sites
<code>wget -r -k -l 2 -p -E -nc http://site.com/</code>
=== Настройка файрвола ===
=== Настройка файрвола ===
==== UFW - Uncomplicated Firewall ====
==== UFW - Uncomplicated Firewall ====
Используется по умолчанию в Ubuntu.
Используется по умолчанию в Ubuntu.
Отобразить список активных правил в файрволе UFW.


<code>sudo ufw status numbered</code>
<code>sudo ufw status numbered</code>


Отобразить список активных правил в файрволе UFW.
Удалить 7-е правило.


<code>sudo ufw delete 7</code>
<code>sudo ufw delete 7</code>


Удалить 7-е правило.
Создать новое правило блокировки IP и поместить его в начало списка. Если не соблюдать порядок блокирующих (DENY) и разрешающих правил (ALLOW), то добавленные правила могут не исполняться.


<code>sudo ufw insert 1 deny from 52.185.71.28 to any</code>
<code>sudo ufw insert 1 deny from 52.185.71.28 to any</code>


Создать новое правило блокировки IP и поместить его в начало списка. Если не соблюдать порядок блокирующих (DENY) и разрешающих правил (ALLOW), то добавленные правила могут не исполняться.
== Базы данных ==
 
==== MariaDB ====
Подключиться к серверу MariaDB.
 
<code>mariadb -u root -p</code>
 
Проверка подключения к базе данных.
 
<code>mariadb -u db_user -p -D db_name</code>
 
Экспортировать базу данных.
 
<code>mariadb-dump -u db_user -p db_name > backup.sql</code>
 
Импортировать базу данных из резервной копии. Необходимо, чтобы база данных была [[Конфигурации приложений#MariaDB|создана перед импортом]].
 
<code>mariadb -u db_user -p new_db < backup.sql</code>
 
{{Примечание|Если при импорте будет возникать ошибка ERROR at line 1: Unknown command '\-'., то требуется дополнительное действие: https://habr.com/ru/articles/824490/}}
 
==== PostgreSQL ====
Дамп всех баз данных в один файл
 
<code>postgres pg_dumpall > postgres_databases.sql</code>
 
== Виртуализация ==
== Виртуализация ==
=== Контейнеры ===
=== Контейнеры ===
==== Docker ====
==== Docker ====
Собрать новый образ из Dockerfile, расположенного в текущей директории.
<code>sudo docker buildx build --platform=linux/amd64 .</code>
<code>sudo docker buildx build --platform=linux/amd64 .</code>


Собрать новый образ из Dockerfile, расположенного в текущей директории.
Создать новый контейнер в фоне и дать ему определенное имя.
 
<code>sudo docker run -d --name godot-ci-4.5-beta1 lourensrich/godot-ci-4.5-beta1</code>
 
Отобразить список всех контейнеров.


<code>sudo docker ps -a</code>
<code>sudo docker ps -a</code>


Отобразить список всех контейнеров.
Отобразить список загруженных или собранных образов.


<code>sudo docker images</code>
<code>sudo docker images</code>


Отобразить список загруженных или собранных образов.
Открыть bash сессию в запущенном контейнере


<code>sudo docker exec -it container_id bash</code>
<code>sudo docker exec -it container_id bash</code>


Открыть bash сессию в запущенном контейнере
Создать контейнер и запустить в нём bash-сессию. Параметр image_id является хэш указателем или тэгом уникального образа.


<code>sudo docker run -it image_id bash</code>
<code>sudo docker run -it image_id bash</code>


Создать контейнер и запустить в нём bash-сессию. Параметр image_id является хэш указателем или тэгом уникального образа.
Удалить контейнер с данными.


<code>sudo docker container rm container_id</code>
<code>sudo docker container rm container_id</code>


Удалить контейнер с данными.
Удалить контейнеры с данными по наименованию образа, от которого они были созданы.
 
<code>sudo docker container rm $(docker ps -a -q --filter "ancestor=containrrr/watchtower")</code>
 
Удалить образ.


<code>sudo docker rmi image_id</code>
<code>sudo docker rmi image_id</code>


Удалить образ.
Удалить все неактивные образы из системы.
 
<code>sudo docker rmi $(docker images -q)</code>
 
Показать пути к файловым системам используемых контейнеров.
 
<code>sudo docker inspect $(sudo docker ps -qa) |  jq -r 'map([.Name, .GraphDriver.Data.MergedDir]) | .[] | "\(.[0])\t\(.[1])"'</code>
 
Удалить неиспользуемые элементы файловых систем неиспользуемых контейнеров.
 
<code>sudo docker system prune -a -f</code>
 
Автоматическое обновление требуемого образа каждые 12 часов при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower].
 
<pre>docker run -d --name watchtower-openwebui --restart=always -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower open-webui --interval 43200</pre>
 
Ручное обновление требуемого образа при помощи [http://watchtower.nickfedor.com/ nickfedor/watchtower] в режиме отладки.
 
<pre>docker run -v /var/run/docker.sock:/var/run/docker.sock nickfedor/watchtower --run-once open-webui --debug</pre>
 
Создание контейнера с перенаправлением портов, постоянным хранением данных и установкой требуемой переменной окружения.
 
<pre>docker run -d -p 3000:8080 -v open-webui:/app/backend/data -e ENV=dev --name open-webui ghcr.io/open-webui/open-webui:main</pre>
 
Изменить политику перезапуска для существующего контейнера.
 
<code>docker update --restart unless-stopped open-webui</code>
 
== Обслуживание компьютера ==
=== Очистка кэша ===
 
<code>ccache -C</code>
 
Очистить ccache кэш.
 
<code>trizen -Scc</code>
 
Очистить trizen кэш.
 
== Пакетные менеджеры ==
=== Composer ===
Создать новый проект.
 
<code>composer create-project laravel/laravel example-site</code>
 
Установить необходимые зависимости в существующий проект.
 
<code>composer install</code>
 
Запустить скрипт dev, определенный в composer.json проекта.
Данный скрипт запускает локальный веб-сервер для проверки Laravel приложения.
 
<code>composer run dev</code>
 
=== pacman  ===
<code>pacman -q</code>
 
Отобразить пакеты установленные вручную, которые не были найдены в базе данных синхронизации. К примеру из AUR.
 
<code>rm /var/lib/pacman/db.lck</code>
 
Удалить файл блокировки базы данных pacman.
 
== Системы сборки ==
=== Scons ===
 
<code>scons -c</code>
 
Очистить scons кэш.
 
== Android ==
== Android ==
=== Android Debug Bridge (adb) ===
=== Android Debug Bridge (adb) ===
Создать резервную копию данных выбранного приложения. После ввода команды потребуется выполнить подтверждение операции на самом устройстве. Некоторые приложения могут иметь флаг запрещающий создание подобных резервных копий.
<code>adb backup -noapk com.unciv.app -f unciv-data.ab</code>
<code>adb backup -noapk com.unciv.app -f unciv-data.ab</code>


Создать резервную копию данных выбранного приложения. После ввода команды потребуется выполнить подтверждение операции на самом устройстве. Некоторые приложения могут иметь флаг запрещающий создание подобных резервных копий.
Получить список приложений, которые могут читать последний элемент в буфере обмена.
 
<code>adb shell cmd appops query-op READ_CLIPBOARD allow</code>
 
Запретить доступ к буферу обмена.
 
<code>adb shell cmd appops set com.octopod.russianpost.client.android READ_CLIPBOARD ignore</code>
 
== Bash ==
=== Служебные символы ===
Запуск скрипта через эквивалент команды <code>source</code>. Экспортированные переменные устанавливаемые данным способом сохраняются в текущем процессе, то есть их можно использовать через <code>echo</code> и регулярные выражения ($).
 
<code>. environment.sh</code>
 
== EFI - менеджер загрузки ==
=== efibootmgr ===
==== Восстановление загрузочной записи ====
Обычно восстановление загрузочной записи загрузчика '''systemd-boot''' требуется после обновления прошивки (BIOS) материнской платы.
 
<code>efibootmgr -c -d /dev/sdX -p Y -l "\EFI\systemd\systemd-bootx64.efi" -L "Linux Boot Manager"</code>
 
==== Очистка и сортировка загрузочных записей ====
Отобразить очередь загрузки.
 
<code>efibootmgr</code>
 
Удалить 4-ую запись из очереди загрузки.
 
<code>efibootmgr -b 4 -B</code>
 
Изменить порядок загрузки.
 
<code>efibootmgr -o 0,1,2</code>
 
== Git ==
=== Работа с репозиториями ===
Инициализировать структуру Git репозитория.
 
<code>git init</code>
 
Добавить файл README.md в индекс существующего репозитория.
 
<code>git add README.md</code>
 
Осуществить коммит изменений с выбранным заголовком.
 
<code>git commit -m 'Initial commit'</code>
 
Добавить удаленный репозиторий.
 
<code>git remote add origin <GIT_URL_HERE></code>
 
Отправить код на удаленный репозиторий и сделать main ветку основной при отправке.
 
<code>git push -u origin main</code>
 
Показать адреса удаленных репозиториев.
 
<code>git remote -v</code>
 
Изменить адрес удаленного репозитория.
 
<code>git remote set-url origin <NEW_GIT_URL_HERE></code>
 
=== Ветвление ===
Создать новую ветку.
 
<code>git branch branch_name</code>
 
Переключиться на требуемую ветвь.
 
<code>git checkout branch_name</code>
 
Создать новую ветвь и переключиться на неё в одной команде.
 
<code>git checkout -b branch_name</code>
 
Удалить локальную ветку.
 
<code>git branch -d branch_name</code>
 
Удалить удаленную ветку.
 
<code>git push -d origin branch_name</code>
 
Загрузить удаленную ветку в новую для этого локальную ветвь.
 
<code>git fetch gitea master:fork</code>
 
Выгрузка локальной ветки может осуществляться в другую удаленную ветвь.
 
<code>git push gitea fork:master</code>
 
Для GitHub имеется возможность загрузить запрос на слияние в новую локальную ветвь для тестирования нового функционала или исправления ошибки.
 
<pre>git fetch origin pull/103781/head:pr-103781
git checkout pr-103781</pre>
 
Удалить все ветви, которых больше нет на удалённом репозитории.
 
<code>git fetch --prune</code>
 
=== Подмодули ===
Инициализация, получение и извлечение всех существующих вложенных подмодулей.
 
<code>git submodule update --init --recursive</code>
 
=== Bare репозиторий ===
Bare репозиторий — это репозиторий, который не содержащий рабочего каталога. Явным признаком bare репозитория является наличие следующего содержимого в корневой директории:
 
<pre>branches  config  description  FETCH_HEAD  HEAD  hooks  info  objects  packed-refs  refs</pre>
 
Для конвертации bare репозитория в "нормальное" состояние, требуется выполнить следующие действия:
 
<pre>git config core.bare false
mkdir .git
mv * .git/
git reset --hard</pre>
 
=== SOPS ===
SOPS - простой и удобный инструмент для управления секретами.
 
Зашифровать файл.
 
<pre>sops --encrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP "public key: \K(.*)") --in-place ./secret.yaml</pre>
 
Расшифровать файл.
 
<pre>sops --decrypt --age $(cat $SOPS_AGE_KEY_FILE |grep -oP "public key: \K(.*)") --in-place ./secret.yaml</pre>
 
== systemd ==
=== journalctl ===
<code>sudo journalctl -u act_runner.service</code>
 
Показать все сообщения для определенного сервиса.
 
== X11-сервер ==
Включение возможности изменения раскладки клавиатуры через Alt + Shift.
 
<code>setxkbmap -layout us,ru -option grp:alt_shift_toggle</code>
 
Установить DPI для подключенного дисплея/монитора ([https://www.sven.de/dpi/ Подсчитать DPI можно тут]).
 
<code>xrandr --output eDP1 --dpi 135.09</code>
 
Удаленно запустить приложение на основном дисплее.
 
<code>DISPLAY=:0 anydesk</code>
 
[[Категория:Руководства]]