Ubuntu 22.04 OpenCVをVNCで表示

Ubuntu 22.04 OpenCVをVNCで表示

 ssh snowpool@192.168.1.69

でログイン

Opencvの処理をSSHで表示するには
ポートフォワーディングが必要

sudo vim /etc/ssh/sshd_config

X11Forwarding yes

となっているのを確認

一度ログアウト

ssh -X snowpool@192.168.1.69

とオプションに -X をつければOK

OpenCV については
既にソースからインストール済み

wget https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml


Haar Cascadeファイルの取得

次にpixcel8で自分の写真を撮影し
GoogleDrive へアップロード

これをubuntuに転送する

scp PXL_20231208_210913098.jpg-20231208T211055Z-001.zip snowpool@192.168.1.69:/home/snowpool/aw10s/

ファイル名が長いので変更

圧縮されているので

unzip PXL_20231208_210913098.jpg-20231208T211055Z-001.zip 

で解凍後

mv PXL_20231208_210913098.jpg image.jpg

でファイル名変更

あとは

vim face_recognition.py

でファイルを作成

import cv2

# 分類器の読み込み
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

# 画像の読み込み
img = cv2.imread('image.jpg')

# グレースケール変換
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 顔の検出
faces = face_cascade.detectMultiScale(gray, 1.1, 4)

# 顔の周囲に枠を描画
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)

# 結果の表示
cv2.imshow('img', img)
cv2.waitKey()
cv2.destroyAllWindows()

を保存し
実行したら

    face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
SystemError: <class 'cv2.CascadeClassifier'> returned a result with an exception set

となる

原因は
https://qiita.com/hatorijobs/items/df2c8793509430f8d543
にあるように
githubのhaarcascade_frontalface_default.xmlをダウンロードして、読み込むとエラーになる。
そのため、公式サイトのhaarcascade_frontalface_default.xmlファイルをダウンロードして、
読み込んだら、成功
とのこと

結構chatgptだけだとヒントにはなるけどエラーが多い

普通に
ubuntu22.04 OpenCV 顔認識で検索し

https://techlog.mydns.jp/?p=417
を参考に
https://github.com/opencv/opencv/tree/master/data/haarcascades
から
haarcascade_eye.xml
haarcascade_frontalface_default.xml
をダウンロード

これをubuntu に転送する

scp haarcascade_*  snowpool@192.168.1.69:/home/snowpool/aw10s/

そして

pip install opencv-python

でライブラリインストール

vim kao.py

でファイルを作成

import cv2
import time

# Haar Cascade分類器の読み込み
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

# Webカメラの設定
cap = cv2.VideoCapture(0)  # 0番目のカメラを使用する場合

# 最後の顔検出時刻
lastTime = None

# メインループ
while True:


    # カメラからのフレームの取得
    ret, frame = cap.read()
    
    # フレームのグレースケール化
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
    # 顔の検出
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
    
    # 検出された顔、目、鼻、口に矩形を描画
    for (x, y, w, h) in faces:
        # 検出自の処理(検出から1分たったら再度イベント動かす
        if lastTime is None or time.perf_counter() - lastTime > 60:
            # 検出時刻更新
            lastTime = time.perf_counter()
            print("人間発見、警戒せよw")
            
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = frame[y:y+h, x:x+w]
        # 以下は目もマークする場合
        # eyes = eye_cascade.detectMultiScale(roi_gray)
        # for (ex, ey, ew, eh) in eyes:
        #     cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (255, 0, 0), 2)

    
    # 結果の表示
    cv2.imshow('Facial Feature Detection', frame)
    
    # 終了のキー入力
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 後処理
cap.release()
cv2.destroyAllWindows()

これで実行したけど

[ WARN:0@0.046] global cap_v4l.cpp:982 open VIDEOIO(V4L2:/dev/video0): can't open camera by index
[ WARN:0@0.046] global obsensor_stream_channel_v4l2.cpp:82 xioctl ioctl: fd=-1, req=-2140645888
[ WARN:0@0.046] global obsensor_stream_channel_v4l2.cpp:138 queryUvcDeviceInfoList ioctl error return: 9
[ WARN:0@0.047] global obsensor_stream_channel_v4l2.cpp:82 xioctl ioctl: fd=-1, req=-2140645888
[ WARN:0@0.047] global obsensor_stream_channel_v4l2.cpp:138 queryUvcDeviceInfoList ioctl error return: 9
[ WARN:0@0.047] global obsensor_stream_channel_v4l2.cpp:82 xioctl ioctl: fd=-1, req=-2140645888
[ WARN:0@0.047] global obsensor_stream_channel_v4l2.cpp:138 queryUvcDeviceInfoList ioctl error return: 9
[ WARN:0@0.047] global obsensor_stream_channel_v4l2.cpp:82 xioctl ioctl: fd=-1, req=-2140645888
[ WARN:0@0.047] global obsensor_stream_channel_v4l2.cpp:138 queryUvcDeviceInfoList ioctl error return: 9
[ERROR:0@0.047] global obsensor_uvc_stream_channel.cpp:156 getStreamChannelGroup Camera index out of range
Traceback (most recent call last):
  File "/home/snowpool/aw10s/kao.py", line 22, in <module>
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.error: OpenCV(4.8.0) /io/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'

となる

とりあえずリモートでopencvからやる

import cv2
bgr = cv2.imread(‘image.jpg')
cv2.imshow("", bgr)
cv2.waitKey(0)
cv2.destroyAllWindows()

vim test_opencv.py

として保存

https://www.kkaneko.jp/tools/ubuntu/opencv.html
を参考に実行

しかし

 bgr = cv2.imread('image,jpg')
[ WARN:0@168.990] global loadsave.cpp:248 findDecoder imread_('image,jpg'): can't open/read file: check file path/integrity
>>> 

となる

pyenvのPythonと組み合わせるOpenCVのビルド: Ubuntu-22.04編
を参考に

#!/usr/bin/env python

import os
import sys
sys.path.insert(0, f"{os.environ['HOME']}/dev-root/opencv4/lib/python3.11/site-packages")
import cv2

print(cv2.__version__)

を実行したら

4.8.0

となるので
これは問題ないみたい

https://www.kkaneko.jp/tools/ubuntu/opencv.html
を参考に

import cv2
bgr = cv2.imread('fruits.jpg')
cv2.imshow("", bgr)

まで実行すると

cv2.error: OpenCV(4.8.0) /io/opencv/modules/highgui/src/window.cpp:1272: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvShowImage'

となる

これを検索すると
https://qiita.com/tik26/items/a75e03e523926cd2f059
にそれらしいものがあったので
一度OpenCV をアンインストール

sudo apt update
sudo apt install -y libgtk2.0-dev pkg-config

pip3 install opencv-python

今度は

qt.qpa.xcb: could not connect to display 
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/home/snowpool/.local/lib/python3.10/site-packages/cv2/qt/plugins" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: xcb.

中止 (コアダンプ)

となる

エラーメッセージを検索すると
QtとOpenCVの両方をインストールするとエラーが発生する[Python]
https://blog.nplpl.com/421
によれば
どうやら双方にGUI機能が含まれているから競合しているらしいので
opencv-python をアンインストール
GUI機能を含まない、OpenCVのヘッドレス版をインストール
でOKらしい

pip uninstall -y opencv-python
pip3 install opencv-python-headless

今度は

cv2.error: OpenCV(4.8.0) /io/opencv/modules/highgui/src/window.cpp:1272: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvShowImage'

となる

https://keep-loving-python.hatenablog.com/entry/2023/02/05/110149
によれば

python -m pip install opencv-python==4.6.0.66 --force-reinstall

というように

--force-reinstall 

すればOKらしいが
その前に一度cmake をもう一度やってからにしてみる

とりあえずパスを調べる
ChatGPT によれば

import cv2
print(cv2.__file__)


Pythonでインストールされている場合のパスが出る
/usr/local/lib/python3.10/dist-packages/cv2/__init__.py

次にapt などの場合

sudo dpkg -L libopencv-dev

で表示

/.
/usr
/usr/bin
/usr/bin/opencv_annotation
/usr/bin/opencv_interactive-calibration
/usr/bin/opencv_model_diagnostics
/usr/bin/opencv_version
/usr/bin/opencv_visualisation
/usr/bin/opencv_waldboost_detector
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/cmake
/usr/lib/x86_64-linux-gnu/cmake/opencv4
/usr/lib/x86_64-linux-gnu/cmake/opencv4/OpenCVConfig-version.cmake
/usr/lib/x86_64-linux-gnu/cmake/opencv4/OpenCVConfig.cmake
/usr/lib/x86_64-linux-gnu/cmake/opencv4/OpenCVModules-release.cmake
/usr/lib/x86_64-linux-gnu/cmake/opencv4/OpenCVModules.cmake
/usr/lib/x86_64-linux-gnu/pkgconfig
/usr/lib/x86_64-linux-gnu/pkgconfig/opencv4.pc
/usr/share
/usr/share/doc
/usr/share/doc/libopencv-dev
/usr/share/doc/libopencv-dev/copyright
/usr/share/licenses
/usr/share/licenses/opencv4
/usr/share/licenses/opencv4/SoftFloat-COPYING.txt
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/opencv_createsamples.1.gz
/usr/share/man/man1/opencv_haartraining.1.gz
/usr/share/man/man1/opencv_performance.1.gz
/usr/share/man/man1/opencv_traincascade.1.gz
/usr/share/doc/libopencv-dev/changelog.Debian.gz

確かソースビルドのはず


メモを見たが
https://www.kkaneko.jp/tools/ubuntu/ubuntu_opencv.html#S1
にあるようなログ
つまり
Make のオプションがhistoryコマンドで出ない
つまりpythonでは入っているが
Make して入っていないようだ

次にVNC接続し実験

ubuntuで

tigervncserver -xstartup /usr/bin/gnome-session -geometry 800x600 -localhost no :1 

を実行後

Mac の場合
Finder から
移動 > サーバーに接続で
vnc://192.168.1.69:5901
で接続

すると

import cv2
bgr = cv2.imread('fruits.jpg')
cv2.imshow("", bgr)

まで実行すると

Failed to load module "canberra-gtk-module"

とエラーが変わる

これを検索

OpenCVを実行するとでてくるFailed to load module “canberra-gtk-module”というエラーの対処法
によれば

sudo apt-get install libcanberra-gtk*

でOK

これで
再度

import cv2
bgr = cv2.imread('fruits.jpg')
cv2.imshow("", bgr)
waitKey(0)

でフルーツ画像が表示される

消すには

cv2.destroyAllWindows()

を実行

とりあえずVNCではできるけど
Ssh Xポートフォワーディングでやるのは今は無理っぽいのがわかった

現在地の明日の天気を取得

現在地の明日の天気を取得

毎回アレクサで聴くのは面倒なので
部屋に入った時、顔認識したら明日の天気を知らせるようにする

夜なら明日の天気
朝なら今日の天気とする

なので音声合成と画像認識、顔認識ができればOK

とりあえず明日の天気の取得をする

とりあえずChatGPT で調べる

Weather APIを使うようなので

無料で使える天気API「Free Weather API」の利用登録とキー発行手順
を参考に

https://www.weatherapi.com/signup.aspx
から登録しようとしたら
502 Bad Gateway
となるので

OpenWeatherMapAPI
を使うことにする

openweathermap.orgのAPIを使って天気表示

天候・気温予測サービス “OpenWeather” のAPIを活用する
を参考に

まずはAPI key の取得

https://home.openweathermap.org/users/sign_up
からできる

規約には
We will use information you provided for management and administration purposes, and for keeping you informed by mail, telephone, email and SMS of other products and services from us and our partners. You can proactively manage your preferences or opt-out of communications with us at any time using Privacy Centre. You have the right to access your data held by us or to request your data to be deleted. For full details please see the OpenWeather Privacy Policy.

I am 16 years old and over
I agree with Privacy Policy, Terms and conditions of sale and Websites terms and conditions of use

I consent to receive communications from OpenWeather Group of Companies and their partners:

System news (API usage alert, system update, temporary system shutdown, etc)
Product news (change to price, new product features, etc)
Corporate news (our life, the launch of a new service, etc)

日本語にすると
当社は、お客様から提供された情報を管理および管理の目的で使用し、また当社および当社のパートナーからの他の製品やサービスについて郵便、電話、電子メール、SMS でお客様に通知し続けるために使用します。お客様は、プライバシー センターを使用して、いつでも自分の設定を積極的に管理したり、当社とのコミュニケーションをオプトアウトしたりできます。あなたには、当社が保有する自分のデータにアクセスする権利、または自分のデータの削除を要求する権利があります。詳細については、OpenWeather プライバシー ポリシーをご覧ください。

私は16歳以上です
プライバシー ポリシー、販売条件、およびウェブサイトの利用条件に同意します
私は、OpenWeather Group of Companies およびそのパートナーからの連絡を受け取ることに同意します。

システムニュース(API使用状況のアラート、システムアップデート、システムの一時シャットダウンなど)
製品ニュース(価格変更、新製品特長など)
企業ニュース(私たちの生活、新サービスの開始など)

登録しようとしたら
既に去年登録していた….

キーは
Gmailに送られていてた

これを元に
https://qiita.com/K_Nemoto/items/51e124b3628106c6ef0a#apiを活用する
を参考に

import requests
import json
from pprint import pprint
url = “https://api.openweathermap.org/data/2.5/weather?zip={zip_place}&units=metric&appid={API_key}”
# xxxxx
url = url.format(zip_place = “任意の郵便番号,JP”, API_key = “取得したAPIキー”)

jsondata = requests.get(url).json()
pprint(jsondata)

print(“天気:”,jsondata[“weather”][0][“main”])
print(“天気詳細:”,jsondata[“weather”][0][“description”])

print(“都市名:”,jsondata[“name”])
print(“気温:”,jsondata[“main”][“temp”])
print(“体感気温:”,jsondata[“main”][“feels_like”])
print(“最低気温:”,jsondata[“main”][“temp_min”])
print(“最高気温:”,jsondata[“main”][“temp_max”])
print(“気圧:”,jsondata[“main”][“pressure”])
print(“湿度:”,jsondata[“main”][“humidity”])

print(“風速:”,jsondata[“wind”][“speed”])
print(“風の方角:”,jsondata[“wind”][“deg”])

で実行すると

{‘base’: ‘stations’,
‘clouds’: {‘all’: 0},
‘cod’: 200,
‘coord’: {‘lat’: 緯度, ‘lon’: 経度},
‘dt’: 1701631236,
‘id’: 0,
‘main’: {‘feels_like’: 4.12,
‘humidity’: 60,
‘pressure’: 1021,
‘temp’: 6.65,
‘temp_max’: 6.65,
‘temp_min’: 6.65},
‘name’: ‘Kawai’,
‘sys’: {‘country’: ‘JP’,
‘id’: 2008260,
‘sunrise’: 1701639567,
‘sunset’: 1701675443,
‘type’: 2},
‘timezone’: 32400,
‘visibility’: 10000,
‘weather’: [{‘description’: ‘clear sky’,
‘icon’: ’01n’,
‘id’: 800,
‘main’: ‘Clear’}],
‘wind’: {‘deg’: 288, ‘gust’: 5.36, ‘speed’: 3.58}}
天気: Clear
天気詳細: clear sky
都市名: Kawai
気温: 6.65
体感気温: 4.12
最低気温: 6.65
最高気温: 6.65
気圧: 1021
湿度: 60
風速: 3.58
風の方角: 288

となり入力した郵便番号の今日の天気が出る

とりあえず目的は今日、明日の天気の取得

他にも三時間ごとの天気とかもあるけど
今は不要
後々サーバー作って手持ちのスマホとかのGPSとリンクして
現在地の三時間ごとの天気で雨とか霧が出るなら注意とか
移動予定のところで滞在時間内に雨になりそうなら表示する感じか

パラメータとしては
https://hibi-update.org/other/openweathermap-api/
がわかりやすい

次に現在地のものを調べてみた

https://qiita.com/iwasan06/items/94db02186b17bf2d09fc
にあるけど
.erb なのでこれはrailsコード

位置情報取得にはGCPを使ってるが高いので別のものにする

https://zenn.dev/amuro/articles/96f61aff90e9da
にはスマホアプリへの現在地の実装方法が載ってるけど
今じゃない

https://note.com/ai_frontline/n/na22bd0ed7870
だとCHAT GPTと組み合わせだけど
それじゃない

むしろ
https://3pysci.com/openweathermap-5/
によれば

https://api.openweathermap.org/data/2.5/onecall?lat=
{lat}&lon={lon}&exclude={part}&appid={API key}

 となっているので

https://api.openweathermap.org/data/2.5/onecall?lat=33.44&lon=-94.04&appid={API key}

というように
緯度経度とAPI key があれば可能らしい
これなら現在地で取得可能

ということで
Pythonで現在地の緯度経度を取得するコードを作る

しかし考えた結果、現在地取得は不要
自宅の今日あすの天気と移動さきは移動さきの地名を入れるので
緯度経度で出すことはほぼない

次はopencv関連をやる

YouTube live カメラ動画をopencvで表示

YouTube live カメラ動画をopencvで表示

静岡県の薩埵峠のyoutubeライブ画像をopencv で表示する

当初は

YouTube動画をOpenCVでキャプチャするスクリプト
を参考に実行したがエラーとなる

YouTubeのライブ配信をOpenCVで再生する
も同様にエラーとなる

ChatGpt で
opencv でYouTubeライブカメラの画像を表示するPythonコード
を表示し実行したが
これもエラー

ERROR: Unable to extract uploader id; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
Traceback (most recent call last):
  File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 815, in wrapper
    return func(self, *args, **kwargs)
  File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 836, in __extract_info
    ie_result = ie.extract(url)
  File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/youtube_dl/extractor/common.py", line 534, in extract
    ie_result = self._real_extract(url)
  File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/youtube_dl/extractor/youtube.py", line 1794, in _real_extract
    'uploader_id': self._search_regex(r'/(?:channel|user)/([^/?&#]+)', owner_profile_url, 'uploader id') if owner_profile_url else None,
  File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/youtube_dl/extractor/common.py", line 1012, in _search_regex
    raise RegexNotFoundError('Unable to extract %s' % _name)
youtube_dl.utils.RegexNotFoundError: Unable to extract uploader id; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/snowpool/aw10s/youtuvelive.py", line 36, in <module>
    display_youtube_stream(youtube_url)
  File "/Users/snowpool/aw10s/youtuvelive.py", line 11, in display_youtube_stream
    info_dict = ydl.extract_info(url, download=False)
  File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 808, in extract_info
    return self.__extract_info(url, ie, download, extra_info, process)
  File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 824, in wrapper
    self.report_error(compat_str(e), e.format_traceback())
  File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 628, in report_error
    self.trouble(error_message, tb)
  File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 598, in trouble
    raise DownloadError(message, exc_info)
youtube_dl.utils.DownloadError: ERROR: Unable to extract uploader id; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.

となる

youtube_dlライブラリがYouTubeのビデオからアップローダーIDを抽出することができない
で検索

Pythonのパッケージyoutube_dlで、DownloadErrorが発生する。

を参考に

pip install yt-dlp

でインストールし

import youtube_dl

の代わりに

from yt_dlp import YoutubeDL

でインポート

import cv2
import youtube_dl
from yt_dlp import YoutubeDL


def display_youtube_stream(url):
    ydl_opts = {
        'format': 'best[ext=mp4]',  # mp4 format, you can change this to other formats
        'quiet': True,
    }

    with YoutubeDL() as ydl:
        info_dict = ydl.extract_info(url, download=False)
        video_url = info_dict['url']

    cap = cv2.VideoCapture(video_url)

    if not cap.isOpened():
        print("Error: Could not open stream.")
        exit()

    while True:
        ret, frame = cap.read()
        if not ret:
            print("Failed to grab frame.")
            break

        cv2.imshow('YouTube Live Stream', frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()

# Replace with your YouTube live stream URL
youtube_url = 'https://www.youtube.com/watch?v=6S4qvf97cbQ'
display_youtube_stream(youtube_url)

として保存

これで実行すると
YouTube live画像が表示されます

なお表示しているのは
LIVE】静岡市さった峠 交通の要衝

Ubuntu22.04 VNCサーバー

Ubuntu22.04 VNCサーバー

クライアントとしてMacから接続なので
RealVNC を使う

最初にVNCで接続確認できたら
SSHトンネルで接続できるようにする

Ubuntu インストール時にGNOMEデスクトップが入っているので
https://ja.linux-console.net/?p=3414#gsc.tab=0
を参考に

VNC用のユーザ作成し
TigerVNC サーバーのインストールをする

とりあえずユーザ名snow作成してパスワード設定

sudo useradd -m -s /bin/bash snow
sudo passwd snow

次に作成したユーザをグループsudo に追加
これでroot権限が使える用になる

sudo usermod -aG sudo snow

次に作成したユーザに切り替え
Sudo su でroot権限になれるか確認

su - snow
sudo su

で root になれてるなら成功

これで一度ユーザを元に戻すdのえ
ctrl+ d を2回行ってログアウトしておく

元々のユーザに戻ったら
TigerVNC サーバーのインストール

sudo apt install tigervnc-standalone-server tigervnc-common tigervnc-tools

次にVNCの初期化
これはvncユーザのアカウントで行うので

su - snow

で切り替える

そしてVNCサーバの初期化

vncserver

パスワードを設定するけど
8文字が最大なので注意

Would you like to enter a view-only password (y/n)? 


VNC サーバーまたはセッションを、表示のみの権限を持つ別のユーザーと共有
なので
N
にする

A view-only password is not used
/usr/bin/xauth:  file /home/snow/.Xauthority does not exist

New Xtigervnc server 'snowpool-Prime-Series:1 (snow)' on port 5901 for display :1.
Use xtigervncviewer -SecurityTypes VncAuth -passwd /home/snow/.vnc/passwd :1 to connect to the VNC server.


=================== tail /home/snow/.vnc/snowpool-Prime-Series:5901.log ===================
Terminated
X connection to :1 broken (explicit kill or server shutdown).

Fri Sep 29 06:21:47 2023
 ComparingUpdateTracker: 0 pixels in / 0 pixels out
 ComparingUpdateTracker: (1:-nan ratio)
Killing Xtigervnc process ID 38401... success!
===========================================================================================

Session startup via '/etc/X11/Xtigervnc-session' cleanly exited too early (< 3 seconds)!

Maybe try something simple first, e.g.,
	tigervncserver -xstartup /usr/bin/xterm
The Xtigervnc server cleanly exited!
The X session cleanly exited!

となる

次にこのVNCを強制終了し
起動スクリプトの構成開始

一度ログアウトしていたので

vncserver -kill snowpool-Prime-Series:1 
vncserver: No matching VNC server running for this user!

現在動いていないみたいなので

vim ~/.vnc/xstartup

で設定ファイルを作成

#!/bin/sh
# Start up the standard system desktop
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
/usr/bin/startxfce4
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
x-window-manager &

として保存

chmod +x ~/.vnc/xstartup

で実行権限付与

次に
VNC ユーザーを TigerVNC サーバー構成ファイルに追加して定義

sudo vim /etc/tigervnc/vncserver.users 


最終行に

:1=snow

を追記して保存

次にVNCサーバ起動

 sudo systemctl start snowpool-Prime-Series:1 service

で実行したが

Failed to start snowpool-Prime-Series:1.service: Unit snowpool-Prime-Series:1.service not found.
Failed to start service.service: Unit service.service not found.

となる

もしかしてx window systemがだめ?

とりあえずログを調べる

cd .vnc/
ls -lah

結果は

drwxr-xr-x 2 snow snow 4.0K  9月 30 05:53 .
drwxr-x--- 5 snow snow 4.0K  9月 30 05:53 ..
-rw------- 1 snow snow    8  9月 29 06:21 passwd
-rw-rw-r-- 1 snow snow 1022  9月 29 06:21 snowpool-Prime-Series:5901.log
-rwxrwxr-x 1 snow snow  243  9月 30 05:38 xstartup

となる

cat snowpool-Prime-Series\:5901.log

で中身を確認

Xvnc TigerVNC 1.12.0 - built 2022-03-25 17:06
Copyright (C) 1999-2021 TigerVNC Team and many others (see README.rst)
See https://www.tigervnc.org for information on TigerVNC.
Underlying X server release 12101003, X.Org


Fri Sep 29 06:21:46 2023
 vncext:      VNC extension running!
 vncext:      Listening for VNC connections on local interface(s), port 5901
 vncext:      created VNC server for screen 0
[mi] mieq: warning: overriding existing handler (nil) with 0x55648c8a9400 for event 2
[mi] mieq: warning: overriding existing handler (nil) with 0x55648c8a9400 for event 3
3NI3X0 New Xtigervnc server 'snowpool-Prime-Series:1 (snow)' on port 5901 for display :1.
3NI3X0 Use xtigervncviewer -SecurityTypes VncAuth -passwd /home/snow/.vnc/passwd :1 to connect to the VNC server.
Terminated
X connection to :1 broken (explicit kill or server shutdown).

Fri Sep 29 06:21:47 2023
 ComparingUpdateTracker: 0 pixels in / 0 pixels out
 ComparingUpdateTracker: (1:-nan ratio)
Killing Xtigervnc process ID 38401... success!

とりあえず
https://www.server-world.info/query?os=Ubuntu_22.04&p=desktop&f=1
を参考に

sudo apt -y install ubuntu-desktop task-gnome-desktop


GNOMEデスクトップ環境をインストール

tigervncserver -xstartup /usr/bin/gnome-session --geometry 800x600 -localhost no :1 

としたけどダメ

とりあえずユーザを通常のユーザに戻して

tigervncserver -xstartup /usr/bin/gnome-session -geometry 800x600 -localhost no :1 

を実行したらできた

https://ebi-works.com/mac-vnc/#outline__4_1
を参考に
Mac の場合
Finder から
移動 > サーバーに接続で
vnc://192.168.1.69:5901
で接続

しかし認証エラーとなってログイン画面は出るけど
ログインができない

本体から操作しようとしたが
画面が真っ黒で操作不能

一度

sudo reboot

で再起動し
本体でログインしてみると
操作ができるけど
今度はVNC接続ができない

とりあえずもう一回SSHでログインして

sudo reboot

で再起動

A X11 server is already running for display :1

で検索し
https://www.bigbang.mydns.jp/vnc-server-x.htm
によれば
VNCで接続した状態(ログアウトしたままの状態)で直接コンソール画面からログインしようとすると、真っ黒な画面のまま表示されません
 これを解消するには、VNC接続している画面でログアウトする必要がある
とのこと

一度再起動してから端末から

 tigervncserver -xstartup /usr/bin/gnome-session -geometry 800x600 -localhost no :1 

とすれば
接続でき
操作もできるようになった

ただし放置してロック画面になると
パスワード入力ができないため
現状では一度再起動して対処

FirefoxはなぜかVNCで起動できなかった
Libreoffice calcなどは問題なく使用可能

とりあえず

 tigervncserver -xstartup /usr/bin/gnome-session -geometry 800x600 -localhost no :1 

で起動し
Finderから
移動 > サーバーへ移動

vnc://192.168.1.69:5901
で接続

パスワードをVNCパスワードを入力すれば
VNCでgnomeデスクトップでログインできる

念の為使わない時にはログアウトしておけば
認証エラーのGUI画面にならずに済むし
自動的にVNCも停止する