Как вызвать командную строку в Microsoft Windows? Элементарно! Достаточно запустить "cmd.exe", или если посерьёзнее "powershell.exe", первое есть практически в любой Windows, и хватает для абсолютного большинства бытовых задач, второе доступно начиная с Windows 7, и имеет функционал побольше.
Так или иначе, в среде Windows есть только два "терминала", старый вездесущий CMD, и более современный PowerShell, пользователю не нужно обладать сверх естественными способностями, чтобы запустить командную строку через собственноручно созданный ярлык или bat файл.
Но как дела обстоят в Linux?
Для начала обратим внимание на тот факт, что в линуксах терминал называют "эмулятором терминала", что порой может вводить в заблуждение пользователей, но это так, мелочи, главная проблема в отсутствии терминала как такового, хотя казалось бы, гордость любого линукса...
Да, терминал можно запустить заранее подготовленными ярлыками в дистрибутивах, в некоторых можно обнаружить сразу четыре терминала! Но что если пользователь захочет вызвать терминал собственноручно, например создать ярлык, вписать туда "terminal" и запустить? Правильно, ничего не выйдет, ибо в Linux целая помойка терминалов, а разработчики дистрибутивов клали болт на пользователей с высокой колокольни, потому не выйдет запустить терминал очевидной командой:
Кстати, в Ubuntu 22.04 у меня вообще терминал поломался, и больше не открывается никак, спасибо разработчикам дистрибутива за принудительные автоматические обновления, благодаря которым всё поломалось, ибо я не хотел ждать пока дистрибутив принудительно насосёт гигабайты обновлений и установит, а ещё приверженцы Linux свои рты открывают на центр обновлений Windows:
В общем фронт работ понятен, нужно сделать костыль, благодаря которому пользователь сможет вызывать терминал максимально очевидной и логичной командой "terminal", ведь в дальнейшем мои скрипты будут использовать именно эту команду.
Я не собираюсь распыляться на перебор терминалов в системе пользователя, пытаясь найти "тот самый", что действительно работает, и плевать я хотел на мнение линуксоидов по этому поводу, в моём дистрибутиве будет команда "terminal", и точка.
Вообще проблему отсутствия терминала можно решить одной командой, делаем символическую ссылку в папке /bin, и на этом всё, команда будет работать:
Но есть ряд проблем:
1) Нужно знать какое заклинание колдовать, чтобы сделать символическую ссылку, для высокомерных адептов Linux это не проблема, но для нормальных людей может быть проще просто установить Windows.
2) Нужно знать название исполняемого файла терминала, в разных дистрибутивах разный набор терминалов бывает.
3) Терминальное колдовство не терпит ошибок, а люди часто ошибаются.
4) В моём дистрибутиве будет заранее прописана команда "terminal", остальным придётся вручную прописывать ссылку на "terminal", да и пользователи моего дистрибутива могут захотеть что-то другое установить по умолчанию вместо xfce4-terminal...
Потому нужно написать скрипт, который поможет создать или изменить команду "terminal", да и кто знает, в каких дистрибутивах будут использовать мои скрипты в будущем:
( https://github.com/Shedou/Chimbalix )
Так как я хочу охватить все основные терминалы, неплохо бы поискать информацию про них, хотя на самом деле в Wikipedia далеко не всё перечислено:
Да и в Linux, как всегда, всё через одно место, и похоже для каждого терминала придётся вручную искать команду запуска, ведь в Wikipedia никто не удосужился прописать команды вызова для каждого терминала, да и в интернете инструкции рассказывают в первую очередь про корявые сочетания клавиатуры, пришлось немного потанцевать с бубном над поисковиком, чтобы наконец найти злополучную команду "gnome-terminal":
Это называется "отличная документация", когда нужно извращаться, чтобы найти нужную информацию, наверное поисковая система неправильная, руки у пользователя не из того места растут и тому подобное :)
Пожалуй на этом подготовка завершена, настало время разработки:
Итого получился небольшой скрипт, который значительно упрощает смену стандартного терминала в системе, осталось всё протестировать и доработать некоторые мелочи:
Некоторое время скрипт улучшался, дорабатывался, была добавлена небольшая справка по использованию, и теперь в принципе работает как надо:
А потом перенёс скрипт в Debian 12.2 KDE для тестирования, но я забыл свой "root" пароль...
Ущербные линуксы принуждают пользователей устанавливать пароль учётной записи, а некоторые особо неадекватные предъявляют серьёзные требования к паролю (да пошли бы они к хрену со своей "заботой"), и в итоге я некоторое время занимался перебором простейшего забытого пароля учётной записи, пытаясь угадать, к какому минимальному количеству символов в пароле меня принудили при установке Debian:
К слову, мой дистрибутив Chimbalix не принуждает устанавливать пароль учётной записи, и не предъявляет особые требования, так что после моего дистрибутива другими пользоваться становиться довольно проблематично.
Наконец пароль подобран, скрипт проверен, меня устраивает работа:
Вообще можно было переписать скрипт, так сказать сделать более приятным на вид, но кого волнует исходный код? В первую очередь важно чтобы работало, а как оно работает - дело десятое:
Философия "изучи пару команд для терминала, тупой вендузятник" в реальности не работает, и практически нулевая популярность Linux тому яркое доказательство, а значит и мой скрипт будет бесполезен, ибо нужно пользоваться терминалом, всплыла очень неприятная проблема...
А как использовать скрипт, если для этого нужно запустить терминал и вручную ввести путь к файлу для исполнения? Линуксы ведь не доросли до стандартной команды для запуска терминала, потому воспользуюсь особенностью XDG, просто создам ярлык установив галочку "запустить в терминале":
Да, эти ярлыки не будут работать в дистрибутивах Linux, где нет XDG или он поломан, но это уже не моя проблема, в первую очередь я поддерживаю свой дистрибутив, остальные уже по остаточному принципу, так что извольте:
Так гораздо лучше, теперь достаточно запустить ярлык, и дело сделано, или не сделано, если пользователь попытается выбрать исполняемый файл который не удалось найти:
Чтобы не создавать путаницу было решено переименовать скрипт в terminalix, а всё второстепенное переместил в отдельную папку, чтобы визуально не перегружать пространство вокруг файла скрипта:
Осталось загрузить в репозиторий:
( https://github.com/Shedou/Chimbalix )
Так одной проблемой стало меньше, теперь мне не нужно вручную прописывать символическую ссылку для команды "terminal", если надо сменить xfce4-terminal на что-то другое, достаточно запустить скрипт и прописать имя желаемого терминала который нужно задать по умолчанию в системе:
Зачем оно надо? Повторюсь для тех, кто не удосужился прочитать статью, при дальнейшей работе над дистрибутивом я буду использовать именно команду "terminal" для вызова терминала, это логично и очевидно, не хочу распыляться на перебор доступных в системе терминалов.
Проще говоря, я создал для себя "основу", которая сэкономит довольно много ресурсов в будущем, и поделился наработкой со всеми, кому она может быть полезной.
На этом пока всё.
Благодарю за внимание, больше интересных статей в блоге Hard-Workshop.