Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
 Аватар для peter_irich
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,389

Привязаться к другому xterm

19.07.2018, 21:17. Показов 2720. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Если программа запускается из терминала, то она в него же и выводит.
Но программа может быть и без терминала, а требуется из неё запустить xterm, чтобы она выводила в него,
как если бы она была из него запущена. Я только сейчас с этим столкнулся и ещё не нашёл,
как назначить себе терминал. Т.е. из программы xterm запускается, имеет фокус ввода,
но программа в него не выводит, хотя к другому не привязана.
Как это делается?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.07.2018, 21:17
Ответы с готовыми решениями:

Как на время привязаться к другому внешнему айпи-адресу?
Добрый день. Вопрос, возможно, и бредовый, но меня очень интересует, возможно ли на время привязаться к другому внешнему ip-адресу? Т.е....

Xterm
Работаю недавно в Linux Mint Nadya. Хочу сделать окно и шрифты в xterm большими! Удаётся, нажав кнопку ctr+мышиные кнопки, только для...

Настроить XTerm
Доброго времени суток форумчане. Поставил себе OpenSuse Leap. До этого было неудачное знакомство с 13.2 - через пару часов оно...

24
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
19.07.2018, 22:05
peter_irich, вы захотели необычного.
Терминальное устройство представлено в виде файла. Граф. терминалы чаще всего связываются с программами через устройства /dev/pts/0-1-2... Текстовые псевдо-терминалы - /dev/tty0-1-2.... Реальные терминалы подключаются обычно к сериал-порту /dev/ttyS0-1-2...
Чтобы вывести информацию на нужный терминал, достаточно записать ее в соответствующий файл и наоборот.
Имейте в виду, что после запуска терминальной программы обычно в этом терминале сразу запускается оболочка (шелл). Вам, судя по всему, вместо нее придется запустить другую программу (ключ -e), наверное, какую-то свою.
0
 Аватар для peter_irich
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,389
19.07.2018, 22:21  [ТС]
gng, благодарю за внимание. Моя программа - графическая, на Qt. Я запускаю из неё xterm
и мне требуется, чтобы система посылала ему события, имитирующие нажатия и отпускания клавиш.
Т.е. у меня есть написанный мною модуль ядра, я из программы с помощью своей ioctl() посылаю ему
код клавиши, а модуль вызывает input_event() с этим кодом. Так система посылает эти коды либо в тот
терминал, из которого запущена основная программа, эта или тестовая, или непонятно куда, если
такого терминала нет. Я надеялся, что система будет посылать события этому xterm, т.к. он имеет
фокус ввода, но нет, ей надо, чтоб это был терминал, из которого программа запущена,
поэтому и такой вопрос.
0
 Аватар для peter_irich
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,389
24.07.2018, 20:29  [ТС]
Точнее, системе надо, чтобы у программы был управляющий терминал, куда она могла бы посылать её вывод.
Я пытаюсь его назначить, как это описано в книге Робачевского, в 3-ем издании это страницы 200, 201,
но пока не получается. Т.е. программа на Qt запускается не из терминала, а просто запускается исполнимый
файл, когда надо, она запускает xterm, он оказывается поверх окна программы и я пытаюсь включить программу
в его группу, но пока, по-видимому, делаю это неправильно.
Кроме того, с правами root'a можно включиться и в любую группу, не только своего сеанса,
но этого я ещё не пробовал.
0
 Аватар для peter_irich
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,389
25.07.2018, 21:29  [ТС]
Сейчас есть x-session-manager, у него есть родитель, а pid, gid и sid одинаковы, есть xterm и моя программа,
у них родителем является x-session-manager и у них у каждого тоже pid, gid и sid совпадают.
Тут важно, что у всех них разные sid, а есть желание сделать этот xterm управляющим терминалом
для моей программы, т.е. нужны права root, т.к. для него нет ограничения на принадлежность программ
к одному сеансу. Пока не пробовал.
Кстати, книга Робачевского - 2-е издание, я ошибся.
0
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
10.08.2018, 17:31
peter_irich, а сам Qt не убивает stdin, stdout, если не консольное приложение?
Попробуй, может быть
C
1
 freopen("/dev/tty", "w", stdout);
0
 Аватар для peter_irich
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,389
10.08.2018, 19:50  [ТС]
Вованя, вот самому открывать /dev/tty не приходило в голову, да и freopen() никогда не использовал.
Благодарю за совет, но попробовать именно в той программе смогу не раньше четверга.
Вообще я надеялся, что система будет посылать вывод input_event() в окно, имеющее фокус ввода,
но нет, она хочет посылать его в управляющий терминал. А то я запускаю из программы xterm,
он появляется поверх всего и имеет фокус ввода, но вывод в него не идёт.
Кроме того, если после его запуска запустить из программы же небольшой скрипт, в котором среди прочего
есть вызов ps, то этот ps не показывает в свём выводе запущенный из программы xterm.
0
 Аватар для peter_irich
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,389
18.03.2019, 21:28  [ТС]
Вованя, Я нашёл, как добиться желаемого с помощью xdotool. Есть модуль, есть тестовая програмmа на C,
есть xterm и есть fly-terminal, из которого я запускаю скрипт из нескольких команд, из таких:
C
1
2
3
4
xdotool search --class "xterm" windowactivate
sleep 1
 
./ch_my_event.elf // это тестовая программа
её вывод появляется в xterm.
А можно ли как-книбудь узнать идентификатор окна, о котором говорится в "man xdotool"?
Идентификатор окна, показываемый среди "wmctrl -l" - это не то.
0
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
19.03.2019, 08:25
Цитата Сообщение от peter_irich Посмотреть сообщение
Идентификатор окна, показываемый среди "wmctrl -l" - это не то.
Почему?
Bash
1
2
3
4
$ printf "%d\n" $(wmctrl -l|grep "C Linux"|cut -d" " -f1) && xdotool search --name ".*C Linux.*"
65011729
65011729
$
0
 Аватар для peter_irich
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,389
19.03.2019, 10:50  [ТС]
Это то, что в "man xdotool" называется "WINDOW_STACK", в команде
C
1
xdotool windowfocus [options] window=%n
Если я в качестве этого идентификатора из стека окон указываю то, что возврващает "wmctrl -l",
то он не не работает или я неправильно указываю.
Мне хотелось бы использовать не "search", а выбор по номеру.
0
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
19.03.2019, 11:12
Цитата Сообщение от peter_irich Посмотреть сообщение
Это то, что в "man xdotool" называется "WINDOW_STACK", в команде
Нет. Прочтите внимательно ман.
Если у команды указано в параметрах [window] то, она может брать идентификатор окна только из стэка (в который само-собой этот идентификатор надо сначала "положить"). Если же команда воспринимает параметр --window, то там вы можете задать идентификатор напрямую.
windowfocus умеет брать значение только из стэка.т.е. ей _обязательно_ должна предшествовать команда помещающая в стэк хотя бы один идентификатор окна.
0
 Аватар для peter_irich
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,389
19.03.2019, 15:41  [ТС]
Я всё равно не понял, что надо xdotool. Например, если я пишу
C
1
xdotool click 1
то это работает, а если
C
1
xdotool click 1 --window $id
где $id - это идентификатор окна, то работает, но "--window" не воспринимается,пишет,
что это неизвестная команда. Чего-то я в синтаксисе xdotool не понимаю.
0
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
19.03.2019, 16:15
Цитата Сообщение от peter_irich Посмотреть сообщение
что это неизвестная команда. Чего-то я в синтаксисе xdotool не понимаю.
Bash
1
2
3
4
5
6
7
8
9
10
11
12
$ xdotool click --help
Usage: click [options] <button>
--clearmodifiers       - reset active modifiers (alt, etc) while typing
--window WINDOW        - specify a window to send click to
--repeat REPEATS       - number of times times to click. Default is 1
--delay MILLISECONDS   - delay in milliseconds between clicks.
    This has no effect if you do not use --repeat.
    Default is 100ms
 
Button is a button number. Generally, left = 1, middle = 2, 
right = 3, wheel up = 4, wheel down = 5
$
вроде все стандартно: команда [опциональные парметры] <обязательные параметры> т.е. xdotool click --window $id 1
0
 Аватар для peter_irich
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,389
19.03.2019, 16:15  [ТС]
Я попробовал написать
C
1
xdotool click --window $id 1
но это тоже ошибка.
0
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
19.03.2019, 16:30
Цитата Сообщение от peter_irich Посмотреть сообщение
но это тоже ошибка.
Не знаю
Bash
1
id=$(xdotool selectwindow);xdotool click --window $id 3
Навожу мышку на это окно браузера, мелькает контекстное меню, ошибок не показывает. работает.
0
 Аватар для peter_irich
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,389
19.03.2019, 17:05  [ТС]
prik, Так мне обязательно получать id из командной строки.
Если я получаю id из вывода "wmctrl -l" и подставляю его в
C
1
xdotool click --window $id 1
то --window не воспринимается.
0
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
19.03.2019, 17:35
Цитата Сообщение от peter_irich Посмотреть сообщение
Так мне обязательно получать id из командной строки.
Так у меня в показном однострочнике он откуда берется???
Цитата Сообщение от peter_irich Посмотреть сообщение
Если я получаю id из вывода "wmctrl -l" и подставляю его в
Покажи выхлоп полной команды вместе с приглашением шелла, а то у меня уже всякие подозрения нехорошие...
0
 Аватар для peter_irich
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,389
19.03.2019, 18:23  [ТС]
prik, Вот только что запущенный вариант
Bash
1
2
3
4
5
6
7
8
9
10
#!/bin/bash
 
nms=`wmctrl -l`
echo "$nms" > get_id_xterm.log
xtrm=`echo "$nms" |grep mainoper`
id=`echo "$xtrm" | cut -d " " -f 1`
echo "id="$id >> get_id_xterm.log
xdotool click --window $id 1
sleep 1
./ch_my_event.elf
Вот вывод wmctrl:

0x01600024 0 mainoper operator0@mainoper: ~
0x01000008 0 N/A fly-term

0x01600024 - это xterm. Сообщения об ошибке нет, но команда с "click" не работает.
Работает вариант с "search --class "xterm"
Кстати, у меня в xdtool нет слова "selectwindow".
0
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
19.03.2019, 18:35
Цитата Сообщение от peter_irich Посмотреть сообщение
0x01600024
xdotool hex не понимает, переведи в десятичную
Цитата Сообщение от peter_irich Посмотреть сообщение
Кстати, у меня в xdtool нет слова "selectwindow".
Bash
1
2
3
4
5
$ xdotool -v
xdotool version 3.20150503.1
$ xdotool --help|grep select
  selectwindow
$
0
 Аватар для peter_irich
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,389
19.03.2019, 21:23  [ТС]
prik, В Ubuntu-18.04 в xdotool selectwindow есть, а сегодня я запускал в Astra Linux 1.4, ядро 3.16.
И что же, переводить в строку из десятичных символов?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.03.2019, 21:23
Помогаю со студенческими работами здесь

Можно ли привязаться к железу?
Интересно, а можно ли из 1С привязаться к железу, для некой идентфикации ПК при старте конфигурации. Скажем к материнке или еще чему.

Сокеты. Как привязаться к ip сервера
Написал клиент и сервер. Запускаю сервер на свойм компе. Запускаю клиент тоже на своём. Коннекчусь к себе. public Client() { ...

Как привязаться к системному времени?
Как привязаться к системному времени в Windows Forms? Смысл в том, что есть приложение-планировщик дел со своей БД, в котором можно...

Как привязаться из ItemTemplate к свойству DataContext
Возможно нубский вопрос, но поиск увы не помог. Например, DataContext котрола установлен на объект cо свойством string Header и...

В ubuntu есть терминал xterm, как вы его используете?
Или хоть как можно его пофапать, польза есть какая , или какая его основная функция?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru