The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Как при помощи одного единственного скрипта и запустить термина, !*! ITicDigger, 13-Фев-20, 13:50  [смотреть все]
Пользуюсь своими скриптами для повседневных нужд и некоторые удобно запускать в заданном размере окна, для этого приходится пользоваться таким вот корявым решением: писать второй скрипт-лаунчер, который откроет терминал, задаст размер окна и укажет какой скрипт в нём выполнить в итоге на один скрипт уходит 2 файла. Муторно и некрасиво. Можно как-то это всё в одном скрипте писать, чтобы он и терминал открывал и скрипт в себе содержал. Но важно чтобы читабельность скрипта не страдала и не приходилось всё это в одну строчку писать, или там все кавычки экранировать.

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

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


    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

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

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

    • Как при помощи одного единственного скрипта и запустить термина, !*! ITicDigger, 11:19 , 14-Фев-20 (5)
      > 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

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

      • Как при помощи одного единственного скрипта и запустить термина, !*! And, 09:04 , 23-Мрт-20 (9)
        > а тут не пойму как имя текущего окна получить

        Делал бы в скрипте через 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 пакет и побликовать на Гит-хабчике. ))))

        • Как при помощи одного единственного скрипта и запустить термина, !*! ITicDigger, 19:34 , 23-Мрт-20 (10)
          > Получается один скрипт обёрка + по одному 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 сперва поставить.

          • Как при помощи одного единственного скрипта и запустить термина, !*! And, 10:03 , 25-Мрт-20 (12)
            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 кнопка Старт, но отлично работает в самостоятельном режиме как отдельное приложение).

        • Как при помощи одного единственного скрипта и запустить термина, !*! Аноним84701, 12:42 , 24-Мрт-20 (11)
          >> а тут не пойму как имя текущего окна получить
          > Делал бы в скрипте через 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





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

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