Запустите приложение OpenGL прямо от Терминала Linux без окон

Через их наушники.:)

11
задан brianreavis 13 October 2009 в 22:59
поделиться

4 ответа

Ваша задача состоит из нескольких частей. Имейте в виду, что некоторые из них могут быть очень специфичными для дистрибутива; но поскольку вы сказали Ubuntu, мы поговорим об Ubuntu!

Также вы отметили этот вопрос C, однако я начинаю с общего шаблона Linux: нативное приложение с оболочкой сценария оболочки Bash. Возможно, как только вы добьетесь хорошей работы, вы сможете при необходимости вложить эту функциональность в C.

Определение того, работает ли X

Право root может очень помочь. Некоторые вещи, которые работают.

  1. pgrep Xorg
  2. Проверьте, существует ли /var/lib/gdm/:0.Xauth . Это будет там, даже если никто не вошел в систему, но GDM работает.
  3. ls -l /home/*/.Xauthority (Даже если вы не root, вы можете по крайней мере подтвердить, вы работают под управлением X.

Совмещение существующего X-сеанса

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

] Вы должны правильно указать переменные среды DISPLAY и XAUTHORITY , и как только вы это сделаете, вы можете использовать существующий дисплей X.

Для DISPLAY вы можете просто предположите : 0 или вы можете найти существующую программу X ( x-session-manager является стандартом GNOME) и прочитать ее среду из / proc / PID / Environment. Переменные имеют формат "ключ = значение" и разделены нулевым байтом. Например, если его PID 12345:

cat /proc/12345/environ \
  | ruby -ne 'puts $_.split("\0").select {|e| e.starts_with? "DISPLAY=" }'

Для XAUTHORITY вы можете получить его таким же образом. Или, если вы предпочитаете угадывать, почти всегда это / home / whoever /. Xauthority

Когда у вас есть эти две переменные, запускать X-код очень просто, например:

env DISPLAY=:0 XAUTHORITY=/home/brian/.Xauthority ./visualdiagnostics

Остановка X

Это легко, если вы root: /etc/init.d/gdm stop . killall Xorg тоже будет работать.

Если вы пользователь, убейте свой собственный процесс Xorg или x-session-manager . (Я хотел бы получить информацию от других о каноническом способе сделать это. Может быть, какое-нибудь сообщение dbus-send?)

Запуск X

Я бы порекомендовал xinit , чья цель в жизни - запустить X и запустить ровно одну программу.

Например: xinit ./visualdiagnostics

Вы также можете указать xinit, с каким разрешением запускать X, что может быть важно или не важно для вас. (Это становится важным в полноэкранном разделе ниже. )

Проблема в том, что у вас не будет оконного менеджера - кнопок развертывания и свертывания. Это не просто косметика. Обычно приложение бесполезно, потому что всплывающее окно нельзя переместить или вы не можете сфокусироваться на правом поле ввода. Однако, если у вас есть специальное приложение, этого может быть достаточно (см. Полноэкранный режим ниже).

Следующим шагом будет мой ответ на все: еще одна оболочка сценария оболочки ! Что-то простое, запускающее оконный менеджер, а затем превращающееся в вашу программу, должно работать.

#!/bin/bash
#
# Start visualdiagnostics once xinit calls me.

/usr/bin/metacity& # Or ratpoison, or fluxbox, or compiz, etc.
exec ./visualdiagnostics

Важно, чтобы exec (стала) главной программой, потому что как только эта первая программа завершится, X отключится.

Запуск полноэкранного режима

Я работаю не уверен на 100% в этом. Некоторые идеи:

  • Попробуйте стандартные параметры X -geometry , чтобы установить 0,0 в качестве верхнего левого угла и + x + y для горизонтального и вертикального размера. Как узнать размер? Либо вы жестко запрограммировали его при запуске xinit , либо можете запросить X-сервер. xwininfo -root сообщит вам, и есть вызов API xlib, который тоже сделает это - я думаю, проверьте источник xwininfo.
  • Само приложение может запрашивать максимизацию и / или изменение размера для заполнения экрана. Я не знаком, но это определенно есть в X API.
  • Некоторые из более настраиваемых оконных менеджеров могут быть предварительно сконфигурированы так, чтобы вы их уже развернули. Вероятно, это то, что я лично проверю в первую очередь. Ваш сценарий оболочки может создать $ HOME / .fluxboxrc , просто повторив некоторые жестко запрограммированные конфигурации> файла.

Резюме

Остальные правы. X не является строго обязательным, поскольку OpenGL может работать с фреймбуфером.

12
ответ дан 3 December 2019 в 08:04
поделиться

Well I am clearly not sure my answer might help you out.

Long ago when I was student, I manage to do so (launching an openGL app from a terminal only linux installation) by installing frame buffer. As long as I remember I needed to recompile my kernel (as framebuffer was/is a kernel module).

This was maybe 5 years ago on a debian distrib, and I don't know how does it work now for up-to-date debian distrib as Ubuntu. Maybe framebuffer is compiled statically in the binary kernel provided by default with Ubuntu. May be not. Maybe framebuffer is irrelevant now... Or I may be totally wrong and not remembering every details of my own adventure 5 years ago now ..

Have a look on Google ! ;-)

Hope it will help...

**

Update:

**
What is frame buffer ?
How to install it? Here or there

2
ответ дан 3 December 2019 в 08:04
поделиться

As yves pointed out, you can avoid running the X server if you use the framebuffer. Actually, the framebuffer modules are often yet available (for example, they are used to have the tux logo during the kernel start or a text terminal with fancy images in the background), this anyway depends on the distribution and the settings you are using.

The kernel side is quite primitive so I'd suggest to use some higher level library such as DirectFB. The framebuffer is usable without problems but don't expect the same maturity level than a full blown X server.

1
ответ дан 3 December 2019 в 08:04
поделиться

Are you trying to have the video be on the monitor connected directly to the computer?

Is X running on the server?

If X is running, you can do

  export DISPLAY=:0.0

which tells X apps to connect to the X server at localhost, rather than where' you're coming from.

If you're actually logging in locally (from a direct terminal) ... yes, you need X installed and running.

0
ответ дан 3 December 2019 в 08:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: