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
- https://qiita.com/yubais/items/c976c2ecdf5fa71bd473
- https://linuxfan.info/ubuntu-17-10-switch-wayland-xorg
- https://blog.amedama.jp/entry/2018/08/04/230601
- https://wiki.archlinux.jp/index.php/Systemd/ユーザー
- https://shimi-dai.com/check-x11-forwarding/
- https://github.com/PowerShell/Win32-OpenSSH/issues/1181
- https://www49.atwiki.jp/ntemacs/pages/69.html
- https://server-setting.info/centos/ssh_x11fowarding_remotedesktop.html