The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Как при помощи одного единственного скрипта и запустить термина"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на рабочей станции (Консоль / Linux)
Изначальное сообщение [ Отслеживать ]

"Как при помощи одного единственного скрипта и запустить термина"  +/
Сообщение от ITicDigger (ok), 13-Фев-20, 13:50 
Пользуюсь своими скриптами для повседневных нужд и некоторые удобно запускать в заданном размере окна, для этого приходится пользоваться таким вот корявым решением: писать второй скрипт-лаунчер, который откроет терминал, задаст размер окна и укажет какой скрипт в нём выполнить в итоге на один скрипт уходит 2 файла. Муторно и некрасиво. Можно как-то это всё в одном скрипте писать, чтобы он и терминал открывал и скрипт в себе содержал. Но важно чтобы читабельность скрипта не страдала и не приходилось всё это в одну строчку писать, или там все кавычки экранировать.

Пользуюсь терминалом xfce4-terminal. Если потребуется перейти на другой - перейду.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "Как при помощи одного единственного скрипта и запустить термина"  +/
Сообщение от Аноним84701 (ok), 13-Фев-20, 16:40 
> Можно как-то это всё в одном скрипте писать, чтобы он и терминал открывал и скрипт в себе содержал.


echo -e "\033]2;Уникальное имя\007" # меняем заголовок окна
wmctrl -r "Уникальное имя" -e 0,xpos,ypos,width,height # меняем размер/позицию
# (-1 == оставить "как есть", т.е.  -e 0,-1,-1,50,-1 изменит только ширину)
# или
xdotool search --name "имя" windowsize %@ 100 100

Ответить | Правка | Наверх | Cообщить модератору

2. "Как при помощи одного единственного скрипта и запустить термина"  +/
Сообщение от Аноним (2), 13-Фев-20, 19:33 
Размер окна rxvt-unicode можно поменять так:
printf '\033[8;25;80t'
, где 25 — кол-во строк, 80 — кол-во столбцов.

Там ещё много всего полезного, man 7 urxvt.

Ответить | Правка | Наверх | Cообщить модератору

3. "Как при помощи одного единственного скрипта и запустить термина"  +/
Сообщение от Аноним84701 (ok), 13-Фев-20, 20:09 
> Размер окна rxvt-unicode можно поменять так:
> printf '\033[8;25;80t'
> , где 25 — кол-во строк, 80 — кол-во столбцов.

Можно, но не везде (st, konsole - не хотят ;)).
А вообще, после повторного прочтения, сдается мне, что ТСу нужно решение (типа "sentinel") для запуска самого скрипта в отдельном/новом окне терминала, а не изменение размеров текущего окна.

Ответить | Правка | Наверх | Cообщить модератору

4. "Как при помощи одного единственного скрипта и запустить термина"  +/
Сообщение от ITicDigger (ok), 14-Фев-20, 11:15 
> А вообще, после повторного прочтения, сдается мне, что ТСу нужно решение (типа
> "sentinel") для запуска самого скрипта в отдельном/новом окне терминала, а не
> изменение размеров текущего окна.

Нет нет, зменение текущего окна вполне годится.

Ответить | Правка | Наверх | Cообщить модератору

6. "Как при помощи одного единственного скрипта и запустить термина"  +/
Сообщение от ITicDigger (ok), 14-Фев-20, 11:34 
> Размер окна rxvt-unicode можно поменять так:
> printf '\033[8;25;80t'
> , где 25 — кол-во строк, 80 — кол-во столбцов.
> Там ещё много всего полезного, man 7 urxvt.

нет мана по urxvt
Но вообще это вроде то что надо, спасибо.
А как ещё позицию задать таким методом? ато чёт гуглится всё нето. Что это вообще за технология, по каким ключевым словам по ней хелп в нете искать?

Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

7. "Как при помощи одного единственного скрипта и запустить термина"  +/
Сообщение от Аноним (2), 14-Фев-20, 20:37 
> нет мана по urxvt

Так его надо установить, не пробовали?

> А как ещё позицию задать таким методом?

В том же разделе мана:
           Ps = 3      ESC [ 3 ; X ; Y t Move window to (X|Y)
           Ps = 4      ESC [ 4 ; H ; W t Resize to WxH pixels

> Что это вообще за технология, по каким ключевым словам по ней
> хелп в нете искать?

Escape sequences, у каждого терминала они могут быть свои.

Ответить | Правка | Наверх | Cообщить модератору

8. "Как при помощи одного единственного скрипта и запустить термина"  +/
Сообщение от ITicDigger (ok), 21-Фев-20, 11:13 
> В том же разделе мана:
>            Ps
> = 3      ESC [ 3 ;
> X ; Y t Move window to (X|Y)
>            Ps
> = 4      ESC [ 4 ;
> H ; W t Resize to WxH pixels

поробовал вот так:
echo -e "\033[3;0;0t"
- не работает

Ответить | Правка | Наверх | Cообщить модератору

5. "Как при помощи одного единственного скрипта и запустить термина"  +/
Сообщение от ITicDigger (ok), 14-Фев-20, 11:19 
> echo -e "\033]2;Уникальное имя\007" # меняем заголовок окна
> wmctrl -r "Уникальное имя" -e 0,xpos,ypos,width,height # меняем размер/позицию
> # (-1 == оставить "как есть", т.е.  -e 0,-1,-1,50,-1 изменит только
> ширину)

Блин и всё бы классно, но вот проблема, для второго запущенного окна с таким же именем этот трюк уже не сработает. Придётся в каждом скрипте городить какой то механизм для генерации уникального элемента имени окна. Ещё есть один значительный минус - размеры окна приходится вводить в формате координат пикселей экрана, а не в размерах строк и столбцов терминала. Просто Эти размеры - фиг его знает откуда брать, а размер в строках и столбцах узнаётся на раз-два - ПКМ по заголовку окна, изменить размер - и вот они.
> # или
> xdotool search --name "имя" windowsize %@ 100 100

а тут не пойму как имя текущего окна получить

Ответить | Правка | К родителю #1 | Наверх | Cообщить модератору

9. "Как при помощи одного единственного скрипта и запустить термина"  +/
Сообщение от And (??), 23-Мрт-20, 09:04 
> а тут не пойму как имя текущего окна получить

Делал бы в скрипте через process id:


shift
nohup xterm 2>/dev/null 1>/dev/null &
term_process_id="$!"
придумать-как-найти-окно-по-процессу "$term_process_id"

По term_process_id найти процесс, выгуглить, как из процесса вынуть название окна. Подозреваю, утилиты из этого треда даже, может быть, умеют это.

Могут помочь какие-то трюки типа:


read proc_id cmd <<< $(ps aux | awk '{print $2 " " $11}' | egrep "^1[[:space:]]" )
echo $proc_id
echo "$cmd"

Вместо xterm пишешь "${@}"
Прямо вот так с кавычками - "${@}" - это передаст все параметры твоего скрипта в nohup. Т.е. запуск типа, например:


мой-скрипт-обёртка xterm -e 'echo "Hello, World"'

Делаешь desktop файлы типа /usr/share/applications/xterm-in-tray.desktop

Вот содержимое:


[Desktop Entry]
Name=XTerm in tray у часов
Exec=alltray --large_icons --sticky --icon "/usr/share/icons/document-save.svg" мой-скрипт-обёртка xterm -e 'echo "Hello, World"'
Icon=gtk-save
Terminal=false
X-MultipleArgs=false
Type=Application
StartupNotify=true
Categories=GNOME;GTK;System;
Comment=Терминал в трее у часов

'desktop' файлы появятся в меню запуска программ. Скорее всего этот будет в папке "Системные", т.к. "System;".

Примерно так бы делал. Имена, тексты взяты из реальных конфигураций, это работает, может только здесь где-то опечатки. Очевидно, нужно всё подогнать друг к другу, склеить вместе. Примеры desktop в избытке в /usr/share/applications/

Получается один скрипт обёрка + по одному desktop файлу на каждое приложение. Дубликации кода нет, безумных километровых oneliner'ов тоже нет. Норм.

Можно паковать в deb пакет и побликовать на Гит-хабчике. ))))

Ответить | Правка | Наверх | Cообщить модератору

10. "Как при помощи одного единственного скрипта и запустить термина"  +/
Сообщение от ITicDigger (ok), 23-Мрт-20, 19:34 
> Получается один скрипт обёрка + по одному desktop файлу на каждое приложение.
> Дубликации кода нет, безумных километровых oneliner'ов тоже нет. Норм.

Ооой нет. Я категорически решил отказаться от схем где на скрипт нужна обёртка или desktop-файл. Решил всё-таки юзать способ "подсаливанием" заголовка окна случайным числом:
#!/bin/bash
id=$RANDOM
title="СКРИПТ для великих дел ID: $id"
w=133
h=40
x=0
y=0
echo -e "\033]2;$title\007" # меняем заголовок окна
wmctrl -r "$title" -e 0,$x,$y,-1,-1 # задать позицию (через два последних аргумента можно задать размеры в пикселях, "-1" значит - не менять). Этот способ почему-то работает только 1 раз за запуск.
echo -e "\033[8;$h;$w;t" # задаём размер окна (в строках и столбцах)
#здесь делаем свои великие дела.

Паковать в дебку и распространять правда я бы такое не стал, так как тут говорили, что это довольно не кросс-терминальное решение и например в Konsole скореее всего не взлетит. Но лично для меня сойдёт. Мне же никто не мешает поставить себе xfce4-terminal.

Ну а чтобы не городить desktop -файлы для запуска у меня сделана всего одна кнопка на панели, которая запускает всего один Gui-лаунчер направленный на каталог со скриптами, где остаётся только 2 раза кликнуть по нужному скрипту и готово.
Вот нехитрый код ланчера:
#!/bin/sh
filename=`zenity --filename=/путь_к_твоему_скриптохранилищу/ --file-selection --title="чего запустим?"`
case $? in
0)  xfce4-terminal -e "$filename" ;;
esac

Только нужно пакет zenity сперва поставить.

Ответить | Правка | Наверх | Cообщить модератору

12. "Как при помощи одного единственного скрипта и запустить термина"  +/
Сообщение от And (??), 25-Мрт-20, 10:03 
Linux way, это такой путь, который у каждого свой собственный.

> как тут говорили, что это довольно не кросс-терминальное решение

Так понимаю, предложенное мною не зависит от выбора конечной программы. Хоть к Libre Office можно применить. Один пробел: нет описания, как по pid найти нужный заголовок (когда-то городил удалённые столы и есть ощущение о воспоминаниях, что есть нужные утилиты: по pid получить исчерпывающую инфу о свойствах графического окна).

> решил отказаться от схем где на скрипт нужна обёртка

Смотря по какой причине. Обёртка оправдана, если
- это программный код (а это простенькая программка на языке Shell; в посте выше код для Баш из-за конструкции <<< ),
- этот код можно переиспользовать много раз (можно переиспользовать для любых программ).

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

Тем самым, обёртка - инженерно признанный способ: целая утилита запуска.

Desktop файлы - стандарт создания ланчеров. Независимо от типа DE (Kde, Lxde, Xfce), независимо от панели задач, дистрибутива Вы получаете пакет ланчеров на годы вперёд. В некоторых DE описанное desktop файлами можно вытаскивать мышкой на панель запуска.

Однотипные файлы можно генерировать скриптом сразу в /usr/share/applications или, была вроде, в домашнем каталоге аналогичная папка под desktop файлы (если не вру), например. А можно генерировать вообще в своих папках, а в /usr/... кидать симлинки на свои папки.

> для запуска у меня сделана
> всего одна кнопка на панели, которая запускает всего один Gui-лаунчер направленный
> на каталог со скриптами, где остаётся только 2 раза кликнуть по
> нужному скрипту и готово.

Можно ещё меньше действий: подвёл мышку к краю монитора и один клик для запуска (вторая панель с кнопкой запуска обёртки).

Вы описали кнопку Старт в панели задач. :)
Графический ланчер (кнопка) с меню из нескольких пунктов (скриптов).
Разница в способе хранения конфигурации: свои файлы или общесистемные desktop.

Вы так или иначе создаёте файлы. Если в Вашей системе программный код организован по best practice, конфигурации созданы в рамках соглашений использованного дистрибутива, то Ваш труд легче портировать, легче поддерживать. Вы интегрируетесь в сообщество, где взаимный труд и обмен наработками.

P.S. Desktop файлы доступны в поиске у xfce4-appfinder (XFCE кнопка Старт, но отлично работает в самостоятельном режиме как отдельное приложение).

Ответить | Правка | Наверх | Cообщить модератору

11. "Как при помощи одного единственного скрипта и запустить термина"  +/
Сообщение от Аноним84701 (ok), 24-Мрт-20, 12:42 
>> а тут не пойму как имя текущего окна получить
> Делал бы в скрипте через process id:
>
 
> shift
> nohup xterm 2>/dev/null 1>/dev/null &
> term_process_id="$!"
> придумать-как-найти-окно-по-процессу "$term_process_id"
>

> По term_process_id найти процесс, выгуглить, как из процесса вынуть название окна. Подозреваю,
> утилиты из этого треда даже, может быть, умеют это.

Мудрёно.


#!/bin/sh
if [ -z "$SENTINEL" ] ; then
    export SENTINEL=1
    xfce4-terminal --geometry 300x400 -x "$0" "$@"
    exit 0
fi

echo "сдесь мы делаем свои великие дела" $1 $2 $8


Ответить | Правка | К родителю #9 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру