Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 3 years have passed since last update.

【XWindowSystem】GUI【OpenGL】

Last updated at Posted at 2019-06-08

OpenGL環境の用意

sudo apt install -y freeglut3 freeglut3-dev

animation.cの用意

#include <GL/glut.h>

/* 正方形のサイズを指定 */
GLdouble s = 0.2;

/* 再描写時に実行される関数*/
void display(void) {
    /* 画面全体を指定した色で塗りつぶす */
    glClear(GL_COLOR_BUFFER_BIT);

    /* 線の色を指定: 赤 */
    glColor3d(1.0, 0.0, 0.0);

    /* 描写 */
    glBegin(GL_LINE_LOOP);

    /* 図形の頂点を指定 */
    glVertex2d(-s,-s);
    glVertex2d(-s, s);
    glVertex2d( s, s);
    glVertex2d( s,-s);

    glEnd();

    /* まだ実行されていない命令をすべて実行 */
    glFlush();
}

/* 100ミリ秒ごとに実行される関数 */
void timer(int value) {
    /* 正方形のサイズを増加 */
    s += 0.01;
    /* 画面を再描写 */
    glutPostRedisplay();
    /* 100ミリ秒後に再実行 */
    glutTimerFunc(100, timer, 0);
}

int main(int argc, char **argv){
    glutInit(&argc, argv);

    /* ウィンドウの位置とサイズを指定 */
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(400, 400);

    /* ウィンドウを生成 */
    glutCreateWindow("test");

    /* 背景色を指定: 白 */
    glutInitDisplayMode(GLUT_RGBA);
    glClearColor(1.0, 1.0, 1.0, 1.0);

    /* 画面を再描写するときに実行される関数を指定 
       (初期化、ウィンドウサイズ変更時など) */ 
    glutDisplayFunc(display);

    /* 100ミリ秒後に timer() を実行 */
    glutTimerFunc(100, timer, 0);

    /* ウィンドウが閉じられるまでループ */
    glutMainLoop();
    return 0;
}

コンパイル

gcc animation.c -lglut -lGLU -lGL -lm

DISPLAY環境変数の設定

SSHせずに行う。

echo $DISPLAY

:0以外の場合は次のコマンドを実行する。

export DISPLAY=:0

実行

SSHせずに行う。

./a.out

以下のエラーが出る場合はexport LIBGL_ALWAYS_INDIRECT=1をしてから実行する

libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast

XWindowSystemが有効か確認

SSHせずに行う。

echo $XDG_SESSION_TYPE

x11と出力されればXWindowSystemが有効になっている。
それ以外が出力された場合は次の方法で有効かする。

XWindowSystemを有効にする

sudo apt install -y xserver-xorg

そして、ログイン画面の設定から有効化する。

/etc/X11/Xwrapper.config の編集

sudo vim /etc/X11/Xwrapper.config
#allowed_users=console
allowed_users=anybody
needs_root_rights=yes

/etc/ssh/sshd_config の編集

sudo vim /etc/ssh/sshd_config
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost no
sudo systemctl restart sshd

VcXsrvの導入

ここからVcxsrvをインストールし、実行しておく。

DISPLAYの設定

export DISPLAY=localhost:0.0

注意) DISPLAYは:0.0でも実行できてしまうがポートフォワーディングを行う時はlocalhost:0.0でなければいけません

SSH

ssh miyagaw61@192.168.56.102 -X

Xオプションが必要。

DISPLAYの確認

echo $DISPLAY

私の環境ではubuntu18gui:10.0と出力された。
ubuntu18guiはホストネーム。

GUIアプリの実行

./a.out

うまくホストのXWindowServerで描画されれば成功。

参考URL

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?