#!/bin/bash # # 2024.03.06 Version 1.1 # # Copyright: 2023 Concurrent Real Time Inc. # # This software may be used and distributed according to the terms of # the GNU General Public License (GPL), version 2, or at your option # any later version. #WindowSize=1920x1080 WindowSize=1024x768 # if [ ! -f /etc/X11/headless.conf ] then BUSID=`nvidia-xconfig --query-gpu-info|grep BusID|awk '{print $4}'` nvidia-xconfig -a --allow-empty-initial-configuration --use-display-device=None --virtual=$WindowSize --busid $BUSID -o /etc/X11/headless.conf cat >> /etc/X11/headless.conf << EOL # # The following definitions are mandatory for Headless VNC connections # do not delete # Section "InputClass" Identifier "Ignore libinput" Driver "libinput" Option "Ignore" "True" EndSection # EOL fi TARGET=$1 USER_SESSION=$2 # func_signal() { kill -0 $2 > /dev/null 2>&1 if [ $? -eq 0 ] then kill -$1 $2 return $? fi return 1 } # trap ' if [ -n $XSERVER ] then func_signal TERM $XSERVER echo -e "\nTRAP Xorg $XSERVER exited!" fi ' 2 3 15 # export GDM_LANG=$LANG #XLOG=/tmp/Xorg.$TARGET.log XLOG=/dev/null #VLOG=/tmp/x11vnc.$TARGET.log VLOG=/dev/null # # # Xorg -ardelay 300 -arinterval 25 $TARGET -sharevts -auth /run/user/0/gdm/Xauthority -config /etc/X11/headless.conf > $XLOG 2>&1 & XSERVER=$! # echo "Xorg PID $XSERVER" # # -noncache スクロールバーが無くなる # -repeat key auto repeat on #x11vnc -repeat -noxdamage -noscr -clip $WindowSize+0+0 -geometry $WindowSize -forever -shared -noncache -auth /run/user/0/gdm/Xauthority -N -display $TARGET > $VLOG 2>&1 & #XVNC=$! #echo "x11vnc PID $XVNC" # sleep 3 # Window Manager # gnome-session:gnome-flachback以外は(xrandrのlogical displayが存在しないため)動作しない # Open Motif :動作するが、タイトルの漢字コードは化ける # kde plasma :動作する # MATE :動作する # setxkbmap -model pc105 -layout jp,us # if [ -x ~/.vnc/xstartup ] then DISPLAY=$TARGET dbus-run-session -- ~/.vnc/xstartup & SESSION=$! else #################################################### if [ "$USER_SESSION" = "mate" -a -x /usr/bin/mate-session ] then /usr/bin/gnome-keyring-daemon --start --components=ssh # /usr/bin/ssh-agent -D -a /run/user/0/keyring/ssh DISPLAY=$TARGET dbus-run-session -- /usr/bin/mate-session --display=$TARGET & SESSION=$! fi #################################################### if [ "$USER_SESSION" = "mwm" -a -x /usr/bin/mwm ] then DISPLAY=$TARGET dbus-run-session -- /usr/bin/mwm -multiscreen & SESSION=$! fi #################################################### if [ "$USER_SESSION" = "kde" -a -x /usr/bin/startplasma-x11 ] then DISPLAY=$TARGET dbus-run-session -- /usr/bin/startplasma-x11 & SESSION=$! fi #################################################### if [ "$USER_SESSION" = "gnome-flashback" -a -x /usr/bin/gnome-flashback ] then export XDG_CURRENT_DESKTOP="GNOME-Flashback:GNOME" #DISPLAY=$TARGET dbus-launch gnome-session --session=gnome-flashback-metacity & DISPLAY=$TARGET dbus-run-session gnome-session --session=gnome-flashback-metacity & SESSION=$! fi #################################################### if [ "$USER_SESSION" = "gnome-classic" ] then export GNOME_SHELL_SESSION_MODE=classic export XDG_CURRENT_DESKTOP="GNOME-classic:GNOME" DISPLAY=$TARGET dbus-launch gnome-session --session=gnome-classic & SESSION=$! fi #################################################### if [ -z "$SESSION" -a -x /usr/bin/metacity ] then echo "Fail safe @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" # Fail safe DISPLAY=$TARGET xsetroot -solid gray20 unset GNOME_DESKTOP_SESSION_ID unset XDG_SESSION_ID unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS if [ $LANG = "ja_JP.UTF-8" ] then #################################################### # 仮想モードでは、['+space']による、かな漢字変換エンジンへの切り替えが、 # ホスト側のウィンドウマネージャによって、アクセプトされ、仮想モード側に認識されないため、 # 別のキーバイディングに変更します。 #################################################### gsettings set org.freedesktop.ibus.general.hotkey trigger "['+space', 'Zenkaku_Hankaku', 'Alt+Kanji', 'Alt+grave', 'Hangul', 'Alt+Release+Alt_R']" gsettings set org.freedesktop.ibus.general.hotkey triggers "['space']" #################################################### # かな漢字変換エンジンを起動します #################################################### DISPLAY=$TARGET dbus-run-session -- /usr/bin/metacity --composite & #SESSION=$! DISPLAY=$TARGET /usr/bin/ibus-daemon -r --xim -d DISPLAY=$TARGET /usr/libexec/ibus-engine-kkc --ibus & DISPLAY=$TARGET /usr/libexec/ibus-engine-simple & fi #DISPLAY=$TARGET dbus-launch /usr/bin/gnome-terminal --display=$TARGET DISPLAY=$TARGET dbus-run-session -- /usr/bin/xterm & fi fi # # echo "Window Manager PID $SESSION" # sleep 1 vncviewer -RemoteResize=0 -geometry $WindowSize+0+0 --shared localhost$TARGET & VIEWER=$! # # if [ -n $SESSION ] then wait $SESSION echo "Window Manager $SESSION exited!" func_signal TERM $SESSION else wait $XSERVER fi if [ -n $VIEWER ] then echo "vncviewer $VIEWER exited!" func_signal TERM $VIEWER fi # if [ -n $XSERVER ] then func_signal TERM $XSERVER echo "Xorg $XSERVER exited!" fi #if [ -n $XVNC ] #then # func_signal KILL $XVNC # echo "x11vnc $XVNC exited!" #fi # sleep 2 # DBUS=`ps|grep dbus-daemon|awk '{print $1}'` if [ -n "$DBUS" ] then func_signal KILL $DBUS echo "dbus-daemon $DBUS exited!" fi if [ "$USER_SESSION" = "gnome-flashback" ] then PROCESS=`ps|grep ibus-engine-kkc|awk '{print $1}'` if [ -n "$PROCESS" ] then func_signal KILL $PROCESS echo "ibus-engine-kkc $PROCESS exited!" fi PROCESS=`ps|grep ibus-engine-sim|awk '{print $1}'` if [ -n "$PROCESS" ] then func_signal KILL $PROCESS echo "ibus-engine-sim $PROCESS exited!" fi PROCESS=`ps|grep nm-applet|awk '{print $1}'` if [ -n "$PROCESS" ] then func_signal KILL $PROCESS echo "nm-applet $PROCESS exited!" fi PROCESS=`ps|grep gnome-screensav|awk '{print $1}'` if [ -n "$PROCESS" ] then func_signal KILL $PROCESS echo "gnome-screensav $PROCESS exited!" fi PROCESS=`ps|grep tracker-miner-a|awk '{print $1}'` if [ -n "$PROCESS" ] then func_signal KILL $PROCESS echo "tracker-miner-a $PROCESS exited!" fi PROCESS=`ps|grep tracker-miner-f|awk '{print $1}'` if [ -n "$PROCESS" ] then func_signal KILL $PROCESS echo "tracker-miner-f $PROCESS exited!" fi PROCESS=`ps|grep baloo_file|awk '{print $1}'` if [ -n "$PROCESS" ] then func_signal KILL $PROCESS echo "baloo_file $PROCESS exited!" fi PROCESS=`ps|grep evolution-alarm|awk '{print $1}'` if [ -n "$PROCESS" ] then func_signal KILL $PROCESS echo "evolution-alarm $PROCESS exited!" fi PROCESS=`ps|grep abrt-applet|awk '{print $1}'` if [ -n "$PROCESS" ] then func_signal KILL $PROCESS echo "abrt-applet $PROCESS exited!" fi PROCESS=`ps|grep gsd-disk-utilit|awk '{print $1}'` if [ -n "$PROCESS" ] then func_signal KILL $PROCESS echo "gsd-disk-utilit $PROCESS exited!" fi PROCESS=`ps|grep gnome-session-b|awk '{print $1}'` if [ -n "$PROCESS" ] then func_signal KILL $PROCESS echo "gnome-session-b $PROCESS exited!" fi PROCESS=`ps|grep metacity|awk '{print $1}'` if [ -n "$PROCESS" ] then func_signal KILL $PROCESS echo "metacity $PROCESS exited!" fi fi