Автоматическое открытие вкладок в окне файлового менеджера Thunar.

30. мая 2020 Linux 0

В заметке рассматривается вариант открытия вкладок в окне Thunar с помощью терминала и bash-скрипта, что позволит автоматически открыть окна с желаемыми вкладками и путями до каталогов. Это может оказаться полезным, если для работы нужно регулярно держать открытыми определённый набор каталогов, сгруппированных в виде вкладок в окне файлового менеджера, и не хочется тратить время на открытие каждого вручную после перезагрузки сессии. Такой вариант особенно актуален, если по какой-то причине нежелательно сохранять сессию через штатные средства Linux-дистрибутива.

 

Введение.

Основным действующим лицом в решении поставленной задачи будет скрипт с набором bash-команд. Да, описанный ниже скрипт можно составить на любом другом интерпретируемом языке (все основные языки идут из коробки в Linux-дистрибутивах), но в виду того, что будет необходимо обращаться к другим Linux-утилитам, bash для такой задачи несколько удобнее и проще.

Справка:

man bash

Довольно неплохое руководство по синтаксису bash-команд:

https://github.com/denysdovhan/bash-handbook

 

Данная заметка опирается на англоязычную статью по открытию вкладок через терминал с помощью bash: https://forums.linuxmint.com/viewtopic.php?t=244076

В ней представлен продвинутый вариант, требующий установки дополнительных пакетов, а в данном варианте рассмотрен простейший и примитивный, но рабочий вариант.

 

Код скрипта.

Тоже самое для удобства копирования:

#!/bin/bash

IFS=$’\n’

thunar

for dir in $(cat /home/$USER/thunar-tab-list1); do

if [[ $i -eq 0 ]]; then

xdotool key ctrl+l && xdotool type «$dir» && xdotool key Return

i=$(( $i + 1 ))

elif [[ $i -ge 1 ]]; then

xdotool key ctrl+t ctrl+l && xdotool type «$dir» && xdotool key Return

else

echo «Something is wrong!»

fi

done

exit 0

 

Скрипт примитивный и очень простой, но работает.

 

Пояснения.

Строка 5.

Переменная IFS — Input Field Separator — разделитель полей, служит для определения границ командных слов. В скрипте применяется для случаев, если в путях до каталогов есть пробелы. В данном случае командная оболочка не будет разделять пути до каталогов по пробелам на отдельные части. При IFS=$’\n’ интерпретатор разделит строки только по переносу строки, что и требуется, так как пути до директорий будут в виде списка и отделены друг друга переносом строки (содержимое списка рассмотрено ниже). Подробнее с IFS можно ознакомиться здесь:

https://www.opennet.ru/docs/RUS/bash_scripting_guide/c3270.html#IFSREF

Примечание: Специалисты отмечают, что применение IFS=$’\n’ для последующей обработки вывода от прочих утилит, является хаком и считается неправильным в плане безопасного поведения кода. В данном случае оно работает удовлетворительно, поэтому этим и ограничимся.

 

Строка 10.

/home/$USER/thunar-tab-list1 — это текстовый файл, в котором перечислены пути до каталогов, которые нужно открыть в виде вкладок.

Пример содержимого списка:

/home/$USER/Downloads/
/home/$USER/Documents/
/home/$USER/Pictures/

Пути отделены друг от друга переносом строки.

Лучше указывать абсолютные пути.

 

Строка 14.

xdotool — утилита имитирует ручной ввод комбинаций клавиш и нажатий кнопок мыши, а так же позволяет осуществлять ряд манипуляций с окнами и рабочим столом.

В виду того, что в Thunar не реализовано удобное выполнение действий через терминал, приходится имитировать нажатие клавиш, с чем отлично справляется xdotool.

Имитируется нажатие клавиш Ctrl + L, это активирует выделение содержимого поля адресной строки в файловом менеджере, следующим шагом туда вставляется путь из переменной dir, а затем имитируется нажатие клавиши Return (Enter), что выполняет переход по подставленному адресу.

Переменная «$dir» взята в кавычки, чтобы её значение для интерпретатора точно было строкой.


 

Если всё сделано правильно, то результат выполнения будет таким:

Несколько окон с вкладками.

По аналогии можно открыть несколько окон, где у каждого будет собственный набор вкладок. Пример реализации для открытия четырёх окон:

Тоже самое для удобства копирования:

#!/bin/bash

IFS=$’\n’

thunar

for dir in $(cat /home/$USER/thunar-tab-list1); do

if [[ $i -eq 0 ]]; then

xdotool key ctrl+l && xdotool type «$dir» && xdotool key Return

i=$(( $i + 1 ))

elif [[ $i -ge 1 ]]; then

xdotool key ctrl+t ctrl+l && xdotool type «$dir» && xdotool key Return

else

echo «Something is wrong!»

fi

done

 

i=0

 

thunar

for dir in $(cat /home/$USER/thunar-tab-list2); do

if [[ $i -eq 0 ]]; then

xdotool key ctrl+l && xdotool type «$dir» && xdotool key Return

i=$(( $i + 1 ))

elif [[ $i -ge 1 ]]; then

xdotool key ctrl+t ctrl+l && xdotool type «$dir» && xdotool key Return

else

echo «Something is wrong!»

fi

done

 

i=0

 

thunar

for dir in $(cat /home/$USER/thunar-tab-list3); do

if [[ $i -eq 0 ]]; then

xdotool key ctrl+l && xdotool type «$dir» && xdotool key Return

i=$(( $i + 1 ))

elif [[ $i -ge 1 ]]; then

xdotool key ctrl+t ctrl+l && xdotool type «$dir» && xdotool key Return

else

echo «Something is wrong!»

fi

done

 

i=0

 

thunar

for dir in $(cat /home/$USER/thunar-tab-list4); do

if [[ $i -eq 0 ]]; then

xdotool key ctrl+l && xdotool type «$dir» && xdotool key Return

i=$(( $i + 1 ))

elif [[ $i -ge 1 ]]; then

xdotool key ctrl+t ctrl+l && xdotool type «$dir» && xdotool key Return

else

echo «Something is wrong!»

fi

done

 

exit 0

 

Рекомендую для каждого окна с набором вкладок сделать отдельные списки. Это сильно упрощает скрипт и улучшает контроль. В данном примере списки называются так:

/home/$USER/thunar-tab-list1

/home/$USER/thunar-tab-list2

/home/$USER/thunar-tab-list3

/home/$USER/thunar-tab-list4

 

 

Использование и безопасность.

Самым простым вариантом будет размещение файла скрипта в /home/$USER/.local/bin/. Это специальный каталог для скриптов пользователя. Для его использования не требуются права суперпользователя. Размещение скрипта в этом каталоге позволит выполнять его через терминал быстрым вводом имени скрипта без указания пути, так как каталог является стандартным для хранения исполняемых файлов. В данном примере файл скрипта называется так: /home/$USER/.local/bin/thunar-tab.sh 

В целях безопасности стоит выставить следующих уровень прав:

sudo chmod 500 ~/.local/bin/thunar-tab.sh

Разрешить пользователю чтение и выполнение, всё прочее запретить; его группе — запретить всё; остальным — запретить всё. Тем самым для редактирования файла потребуются права суперпользователя, но выполнять его можно с правами обычного пользователя, которому принадлежит файл.


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *