Windowsでgit bash(mingw64/cygwin)を使って画像、動画ファイルの更新日時、作成日時をexifを元に変更する(ChatGPT習作)

tl;dir

SEARCH_DIR="/path/to/directory"

find "$SEARCH_DIR" -type f \( -iname "*.jpg" -o -iname "*.JPG" -o -iname "*.jpeg" -o -iname "*.JPEG" -o -iname "*.png" -o -iname "*.PNG" -o -iname "*.heic" -o -iname "*.HEIC" -o -iname "*.mov" -o -iname "*.MOV" -o -iname "*.mp4" -o -iname "*.MP4" \) -exec bash -c '
  for unix_file; do
    datetime=$(exiftool -d "%Y-%m-%dT%H:%M:%S" -DateTimeOriginal "$unix_file" | awk -F": " '\''{print $2}'\'')
    if [ ! -z "$datetime" ]; then
      echo "unix_file:$unix_file"
      touch -am -d "$datetime" "$unix_file"
      win_file=$(echo "$unix_file" | sed "s/^\/\([a-z]\)\//\1:\//; s/\//\\\\/g")
      echo "win_file:$win_file"
      powershell.exe -Command "\$file = Get-Item \"$win_file\"; \$file.CreationTime = [datetime]::ParseExact(\"$datetime\", \"yyyy-MM-ddTHH:mm:ss\", \$null); \$file.LastWriteTime = [datetime]::ParseExact(\"$datetime\", \"yyyy-MM-ddTHH:mm:ss\", \$null);"
    fi
  done
' bash {} +

目的

  • Google Photosの画像、動画ファイルを全部Dropboxへ移行したい
  • 移行の際には撮影日を元にフォルダー分けしたい
  • そのためにファイルの作成日時、更新日時を撮影日時に変更したい
  • 撮影日時はexif情報が使える想定

環境を用意する

  • WSL2のセットアップする
  • git for WindowsInstalling ExifTool
    • git bashをインストールするつもりでしたが今はgit for Windowsというものがある(統合?移行?)ようなのでこちらをインストールしました
    • Unix Toolsもインストールしています。gitが欲しい訳でなくLinux的なbashなシェル環境が欲しいので
  • exiftoolInstalling ExifToolをインストールする
    • これが画像や動画からexif情報を抜き出すコマンドです。元はPerlスクリプトですがWindows用のexeで配布してくれていました。感謝
    • サイトからDLしたらC:\Windows に移動します。パスを通すためです

exifの情報を元にファイルの更新日を変更する

exiftを取得するには何がいいんだろとググるとexiftoolがすぐに出てきました。 これはUnixコマンドで中身はPerlのようです。

作業環境はWindowsなのでできれば何かのソフトでボタンポチポチでできたらいいなと思い更にググるとよさそうなアプリがいくつかありました。

特にこちらのF6 Exifは素晴らしく、jpegファイルなら深い階層まで確実にファイルの更新日時を変更してくれます。感謝。 F6 ExifF6 Exifの詳細情報 : Vector ソフトを探す!

ただ、最終更新日が2007.08.15の通り、HEICどころかpngにも対応していません。 ソフトの範囲外の要求なので仕方ないですね。

それに、このソフトが丁寧に更新日時を更新してくれたので作成日時も更新したいという欲が出てきました。

という訳で作成日時をgit bash&exiftoolを使って作成日時を更新するスクリプトを作成することにしました。

ChatGPTにコードを作成してもらう

git bashで頑張る編

要求と回答は以下です。

河童:

画像ファイルに含まれるexif情報を元にファイルの更新日を変更したいです。
現在の状況は以下です。
- 環境はLinuxのbash
- ディレクトリーの下の複数階層にファイルが存在する
- 画像の形式はjpgだけでなく、pngやheicやmovなど様々

また、この問題を解くために必要な情報があれば私に質問してください。

ChatGPT:

#!/bin/bash

# 検索するディレクトリのパス
SEARCH_DIR="/path/to/directory"

# findコマンドでディレクトリ内のすべてのファイルを検索
find "$SEARCH_DIR" -type f \( -iname "*.jpg" -o -iname "*.png" -o -iname "*.heic" -o -iname "*.mov" \) -exec bash -c '
  for file; do
    # exiftoolを使用して撮影日時を取得
    datetime=$(exiftool -DateTimeOriginal "$file" | awk -F": " '\''{print $2}'\'')
    if [ ! -z "$datetime" ]; then
      # 撮影日時をファイルの更新日時に設定
      touch -d "$datetime" "$file"
    fi
  done
' bash {} +

画像、動画のexifを元にファイルの更新日を変更する
prompt1

中々良さそうに見えますね。 でもこのスクリプト$datetimeの値は年月日 時分秒と間に空白が入ってしまう形式でした。 touchコマンドの日時指定はISO8601形式です。YYYY-MM-ddTHH:mm:ssなやつですね。なので失敗します。

自分のISO8601の認識が間違っているのかな、RFC3339の方だっけ?と思ってこのサイトで確認しました。 私の認識通り正しいようです。

RFC 3339 vs ISO 8601

ただ、RFC3339でもT区切りは許容されているようですね。UTC明示が末尾ZなのはISO8601では許可されずRFC3339独自のようです。学びがありますね。

という訳でRFC8601形式かつ -%d %H の間に T を入れて作成し直してもらったスクリプトがこちらです。

#!/bin/bash

# 検索するディレクトリのパス
SEARCH_DIR="/path/to/directory"

# findコマンドでディレクトリ内のすべてのファイルを検索
find "$SEARCH_DIR" -type f \( -iname "*.jpg" -o -iname "*.png" -o -iname "*.heic" -o -iname "*.mov" \) -exec bash -c '
  for file; do
    # exiftoolを使用して撮影日時を取得し、ISO8601形式に変換(日付と時刻の間にTを挿入)
    datetime=$(exiftool -d "%Y-%m-%dT%H:%M:%S" -DateTimeOriginal "$file" | awk -F": " '\''{print $2}'\'')
    if [ ! -z "$datetime" ]; then
      # ISO8601形式の日時をtouchコマンドで利用する形式に変換
      # 注意: GNU版のtouchが必要です
      touch -d "$datetime" "$file"
    fi
  done
' bash {} +

これでファイル日時の更新ができるようになりました。良き。

PowerShellも使ってみる編

更新日時は変更できるようになりました。次の目標は作成日時も変更です。

色々試しましたがUnixという範囲内だと作成日時は変更できないようです。

そこでどうせWindows環境なのでPowerShellでの作成日時の変更方法を聞いてみました。

河童:

Windowsでgit bashを使ってファイルの作成日時を変更することはできますか?
もし可能ならbashスクリプトを作成してください。

ChatGPT:

WindowsでGit Bashを使用してファイルの作成日時を変更することは、直接的な方法では難しいかもしれません。これは、UNIX系システムのtouchコマンドがWindows上のGit Bashではファイルの作成日時(creation time)を変更する機能をサポートしていないためです。しかし、ファイルの変更日時(modification time)やアクセス日時(access time)は変更可能です。

Windowsでファイルの作成日時を変更するには、PowerShellを使う方法がありますが、Git BashからPowerShellのコマンドを呼び出すことで、目的を達成することが可能です。

以下は、Git Bashを使用してPowerShellコマンドを実行し、特定のファイルの作成日時を変更するためのbashスクリプトの例です。この例では、ファイルの作成日時を2024年1月1日午前0時0分に設定しています。

コード略

このスクリプトは、指定されたファイルの作成日時を新しい日時に変更します。FILE_PATH変数には、作成日時を変更したいファイルのパスを設定してください。

注意点
このスクリプトはGit Bash上で実行されることを想定していますが、実際にはPowerShellのコマンドを呼び出しています。そのため、Git BashとPowerShellの両方がWindowsシステム上で使用可能である必要があります。
ファイルパスがスペースを含む場合は、適切にクォートするか、エスケープ処理を行う必要があります。
この方法で、Git Bashを使用しつつもWindowsシステム上でファイルの作成日時を変更することが可能です。
#!/bin/bash

# 変更対象のファイルパス
FILE_PATH="/path/to/your/file.txt"

# PowerShellを使用してファイルの作成日時を変更
powershell.exe -Command "(Get-Item '$FILE_PATH').creationTime=$(Get-Date '2024-01-01 00:00:00')"

PoweShellで作成日時を変更する
prompt2

このスクリプトで作成日時を変更することができました。 ChatGPT、賢い。

ここまで来たら後は最初のスクリプトにこれをガッシャンコするだけ!

と思いましたがここからがとても時間がかかりました。

具体的には以下の点を解決する必要がありました

  • git bashとPowerSellではパスの記法が違うので変換する
  • git bashPowerShellで使う変数fileが被るので別々にする
  • PowerShell側のオプションでクォートが間違っているので正しくエスケープする

この辺りからはもうプロンプト指示だけだとまどろっこしいのでスクリプトを直接編集して、これを元に修正してと指示をして、また別の間違いがあったら具体例を記載して置き換えてもらって、のくりかえしです。

という訳でやっと目標の画像、動画ファイルのexif情報を元にファイルの更新日時、作成日時を変更するスクリプトが完成しました。

結局、movとmp4だけは作成日時の変更がうまくできていないのですがファイル全体からすると少ない件数なのでそちらはファイルの詳細情報(exifまたはXMP)を元に手動で対応します。

『君たちはどう生きるか』の鑑賞まとめと自分の鑑賞

宮﨑駿監督とジブリの最新作『君たちはどう生きるか』を観劇してきました。 鑑賞のまとめと自分の鑑賞です。

君たちはどう生きるか (映画) - Wikipedia

ネタバレを含みます。知りたくない人は以下を読まないことをおすすめします。

まとめここまで。

ここからは私の鑑賞です。 ざっくりいってみんなが自分の現実へ進む物語だと解釈しました。

庵野秀明監督がエヴァの最後の作品で観客に対して現実に帰れ自分の道を行けという思いを作品に込めたと評価されています。宮﨑駿監督の今作品もそれに通ずるものがありますがそれが本人も含めて全方位に向けられていて、フジテレビの往年の名作『北の国から』の『北の国から 2002遺言』編で五郎が遺言に「みんな勝手にやれ」と記した諦め、安堵、希望と同じく宮﨑駿監督もそこまで到達したんだなあという思いを感じました。

物語の筋がないという鑑賞もそう言われればその通りとも言えます。ですが私は物語も筋もあると思います。 眞人が母親の死を受け止めきれず夢にまで見て泣いてしまう場面や転校先の生徒との喧嘩の後に自分で自分の頭に石をぶつけて傷を付けて周りにかまってもらう幼さの発露もありつつ、つわりで寝込んだ義母をそっけなく見舞った帰りがけに煙草を箱ごとくすねる演出は自分の置かれている環境の中での価値を把握していることが明確ですでに小さい大人です。幼さと大人さ、それが混じり合った青少年期特有の少年である眞人が塔の世界/下の世界で自ら決断を積み重ねそこから現実に帰ってきた時のインコの糞まみれな姿はまさに現実に向き合った演出でしょう。そこに物語も筋もあると私は思います。

また、個人的には母性の物語としては解釈していません。今までのジブリ作品や宮﨑駿監督の自己体験が多分に反映されてはいると思いますがそこを中心に据えた作品ではないと考えています。また、ヒミもナツコもキリコもエヴァのマリ(ヒロイン、福音)ではないと考えています。あくまで眞人が自分の現実の道を進む物語だと考えます。終盤の場面でヒミが自分の選択で眞人を産む、そして死ぬのを理解して扉の向こうの現実へ進むことがそれに現れていると思います。前半の母親の死を受け止められない演出はすべてそこへ向かうための組み合わせでしょう。積み木を自分で積まなかったのに1つだけ持ち帰ったのはその決断の象徴としての戦利品ですね。

とはいうものの、冒頭にも書いた通り宮﨑駿監督からの「みんな勝手にやれ」「自分の現実を進め」という物語であるのは大前提として、宮﨑駿監督はそれを踏まえて自分のやりたいことを全部詰め込んだというのはとても感じますね。ワラワラを食べるペリカンをヒミがワラワラごと燃やしちゃうのも作品冒頭の眞人主観で人と炎をかき分けるのも勢いを感じますし、墓の存在や門に刻まれた言葉もナツコが森(塔の世界/下の世界)へ行くのも伏線回収がなくてもうこれは宮﨑駿監督が好きなものを詰め込んだだけなのにその演出の圧倒的な説得力は流石ですね。 このあたりは周回観劇して考察したいと思います。

ちなみに、今作品がジブリのセルフオマージュと言われているようですが、庵野秀明監督の作品好きの1観客としては塔の世界/下の世界の崩壊が『ふしぎの海のナディア』の最終話を連想されて、実際に制作にカラーも参加しているしふふふとなりましたね。

最後になりますが、今作品をこれほどの熱量で作ってくれた宮﨑駿監督とジブリと関係者各位には感謝です。そしてこれが宮﨑駿監督の最後の作品ではなくまた作品を作ってくれることでしょう。外に出て自然を感じろと言いつつDVDを蒐集していたり、引退宣言をしたのに今作品を作ったり。次回作品はCGやGAIをふんだんに使ったショート動画の詰め合わせかもしれません。これからの宮﨑駿監督に期待ですね。

Windowsの壁紙格納場所両方にショートカットを作成する

Windowsの壁紙格納場所両方にショートカットを作成します。

環境はWindows10です。Windows11は違うかもしれません。

1. 壁紙格納場所フォルダーは以下です。

C:\Windows\Web\Wallpaper

2. さらに上の階層にも壁紙に使える画像フォルダーがあります。

C:\Windows\Web

3. それとは別にWindowsのテーマの壁紙は以下のフォルダーにあります。

C:\Users\kappa\AppData\Roaming\Microsoft\Windows\Themes

分散していてわかりにくいですね。 というわけで相互にショートカットを作成します。 フォルダーを右クリックでドラッグして目的のフォルダーでドロップして「ショートカットをここに作成」を選ぶだけです。

ただ、2のショートカットを3に作るのはマウス操作だけでできますが、その逆の3を2にショートカットを作るのはできませんでした。多分、システムディレクリとかそういう制限なのだと思います。

でも管理者権限なら可能なはずです。Windowsなので。 調べてみました。

  • マウス操作に管理者権限を付与する方法 → 謎
  • ショートカットを作成するコマンドライン → 無い

というわけで無いなら作りましょう。 ググったらPROJECT GROUPさんというサイトで、メモ帳のショートカットをデスクトップに作成するvbsが公開されていました。

ショートカットファイルを作成する方法 - Windows - Project Group

ありがたく流用させていただきこういうスクリプトになりました。

Set shell = WScript.CreateObject("WScript.Shell")

fil = "C:\Windows\Web\Themes.lnk"

Set shortCut = shell.CreateShortcut(fil)
shortCut.TargetPath = "C:\Users\kappa\AppData\Roaming\Microsoft\Windows\Themes"
shortCut.Save

これをメモ帳に貼り付けてbg.vbsという名前のファイルでデスクトップに保存します。

次に、Windowsのタスクバーの検索でcmd.exeまたはpowershellと入力してシェルを探します。 見つかったそれを右クリックし、「管理者として実行」をクリックします。

そして

cd Desktop

と入力してEnterしてデスクトップに移動します。

最後に

bg.vbs

で実行します。

これで2に3のショートカットができました。

AI系メモ

とりまメモ

自分用のnostrのまとめ

nostr界隈は自分にとって知らないことが多かったので自分用にまとめる。

著名開発者(敬称略)

NostrをMacのターミナルでWebSocket直接でプロトコルのやり取りする方法

元ネタ

こちらのコマンド集&実行例を参考にしました。 Nostr Notes

準備

  • 自分のNostrアカウントを作成します。そしてそのpubkey(npub)の16進数表記を取得します。
    • damusが用意してくれているWebページでpubkeyを16進数表記に変更できます。
    • 私のpubkeyは npub1spj7zmtmgdl8gcndcqt6r783x6fhjqw5e54ll7cudgphwx0m72ys404su9 で16進数表記は 8065e16d7b437e74626dc017a1f8f136937901d4cd2bfffb1c6a037719fbf289 です。
  • NostrはWebSocketで通信しているので、そのプロトコルをやり取りできるwebsocatをインストールします。
    • brew install websocat
      

Nostrのrelayにどんなイベントが送られているのか覗いてみる

手始めにrelayにどんなイベントが届いているのかリアルタイムに監視してみます。負荷がかかる処理ですし大量に流れてくるので3秒も見れば十分でしょう。Ctrl+cで終了します。

$ echo '["REQ","tail",{"limit":0}]' | websocat -n wss://relay.damus.io
["EOSE","tail"]
["EVENT","tail",{"content":"dFODRdPq35xjrZF0DjovZd5cQwoIPkVgKoLHT1g03KCjmG/6j49xNCkKYpD/Jznw?iv=ARH7fUsLrRlhlx5MZI4SZw==","created_at":1676030953,"id":"dcc8a80d45b6230351bf5be1bbcdbe9e7a305a1398e7ea38b32ca5446e28617e","kind":4,"pubkey":"6b63fde4d8c989aeafe2d10acc4209c518393dde5771ff1f2837d4bfa1801eec","sig":"ca8eb71b9f343992916989aeb005f8d1847956e0b5e5ca42e27ab5224faef95b5bf4ad21b050522f4ca128c6549ccad1a951295d763c3aa08dae8d8d05e13ea9","tags":[["p","c186f6af371c63beb8935fef666f59d7c6941434e237434ec5576baa7254b142"]]}]
["EVENT","tail",{"content":"(第二版本)全国同城约炮!妹妹安排到位!点击链接进入下载 https://xdjz6.nl?channelCode=8314ML","created_at":1676030951,"id":"1695a933956653c0495f261c31aa190f5147d51e6163febcdc155dd2ceb4dd05","kind":1,"pubkey":"f61d03ee46bf11898f23a301d51cfcb2d6bb95b3fcd6e34596775abfbda17e8d","sig":"29f3da3381342607e1c26d48e62a44523e62156bd1b34e3c55326ab44ecd317e6dbf51a5705826853e1ed5d6faf99b991370cd1865d85d806ba0847708c40e72","tags":[]}]
["EVENT","tail",{"content":"+","created_at":1676030951,"id":"bdfbbe146616bc4b403dad7fe568ea81e6bea349b5b2c470baec06def8ba53cc","kind":7,"pubkey":"fe858a5db125adabf0cb4cf29c07baaeebe74ab36f2405a310250b12a970d36b","sig":"b22478f04246165a2ecf4bd06c151af4b42a18c5a12a8821cd9a94ceb2da07755dafc4efe0ee8aa447afb8b4522d6edccd8437d86187dd8d4292b7437a24a6a9","tags":[["e","509b601ad1282512bf311617da00766437b9b9696efddc8a9ebdd9d0dd8a57af"],["p","c48e29f04b482cc01ca1f9ef8c86ef8318c059e0e9353235162f080f26e14c11"]]}]
["EVENT","tail",{"content":"全国同城约炮!妹妹安排到位!点击链接进入下载 https://bb38.top","created_at":1676030951,"id":"5c3c25ef1a66a98260d1061b8744f6ae504dbfef2b0eb94bbf12aeb33ed2363b","kind":1,"pubkey":"efb3d1b19c693e886d6f4a99abc75e895ffc981bc35e64b154c886993e141fbb","sig":"983f45ce3d5746d897c1a34c3620233da3c288d54279f06c1b6fd4ba1b771b0416523e55e11055b45c97ee7429f8527110d1ec8f8a12609a3f353ffdf29e56c0","tags":[]}]
["EVENT","tail",{"content":"Telegram第一灰产群 @huichan\nTelegram鉴黄开车群 @jianhuanghui\nTelegram全国资源群 @quanguo\nTelegram搜群机器人 @pindao\nhttps://t.me/huichan\nhttps://t.me/jianhuanghui\nhttps://t.me/quanguo\nhttps://t.me/pindao","created_at":1676030953,"id":"18049500dcb5e32aa5727294777372ddfc9deb387b90af00df7d7699cf3089d8","kind":1,"pubkey":"ceba04cd91aa25a8edb605e4c653eea25ad80950f067c3c329c341227d64339e","sig":"d81ebe75faaa1ebbf083fc6f228826d9f4420184b9ab621e13348a988b0b71900778a1bef2039e9cbb3206392ff0c79fd5f11736fc545bf10a8f533acb3a3f47","tags":[]}]
^C

relayから自分の過去のイベントを検索する

# リクエストを送るためのidを生成する
$ uuidgen | sed s/-//g | sed 's:\(.\):\L\1:g'
結果 → 4b62219adf744de5b81af76f8e2e99b9

# 自分が過去に投稿したノートを検索する。条件はkind:1、投稿者:自分、1個
$ echo '["REQ","4b62219adf744de5b81af76f8e2e99b9",{"authors":["8065e16d7b437e74626dc017a1f8f136937901d4cd2bfffb1c6a037719fbf289"],"kinds":[1],"limit":1}]' | websocat wss://relay-jp.nostr.wirednet.jp
応答 → ["EVENT","4b62219adf744de5b81af76f8e2e99b9",{"id":"bd5c74ab7616fbb1396fdc959d26b654ec74d568fe494355bdbe14a9798427f2","pubkey":"8065e16d7b437e74626dc017a1f8f136937901d4cd2bfffb1c6a037719fbf289","created_at":1676026132,"kind":1,"tags":[],"content":"夕食はコンソメスープ1杯","sig":"bfca2f2a37f4fdee8d0ec8ede7b61bc5cc291f5657cb598c6ad5040846deafb510cee434f513c8cc9b01b738065c0bdc8eb37dd0b89fa644a96329055e7b2f86"}]
["EOSE","4b62219adf744de5b81af76f8e2e99b9"]

# 通信を終了する
echo '["CLOSE", "4b62219adf744de5b81af76f8e2e99b9"]' | websocat wss://relay-jp.nostr.wirednet.jp
終了の応答は中身無し

relayからidを指定してイベントを取得する

# リクエストを送るためのidを生成する
$ uuidgen | sed s/-//g | sed 's:\(.\):\L\1:g'
結果 → 2c282a301c7848839b7df55e340be66c

# イベントをidを指定して取得する(上記で取得したイベント)
$ echo '["REQ","2c282a301c7848839b7df55e340be66c",{"ids":["bd5c74ab7616fbb1396fdc959d26b654ec74d568fe494355bdbe14a9798427f2"]}]' | websocat wss://relay-jp.nostr.wirednet.jp
応答 → ["EVENT","2c282a301c7848839b7df55e340be66c",{"id":"bd5c74ab7616fbb1396fdc959d26b654ec74d568fe494355bdbe14a9798427f2","pubkey":"8065e16d7b437e74626dc017a1f8f136937901d4cd2bfffb1c6a037719fbf289","created_at":1676026132,"kind":1,"tags":[],"content":"夕食はコンソメスープ1杯","sig":"bfca2f2a37f4fdee8d0ec8ede7b61bc5cc291f5657cb598c6ad5040846deafb510cee434f513c8cc9b01b738065c0bdc8eb37dd0b89fa644a96329055e7b2f86"}]
["EOSE","2c282a301c7848839b7df55e340be66c"]

# 通信を終了する
$ echo '["CLOSE", "2c282a301c7848839b7df55e340be66c"]' | websocat wss://relay-jp.nostr.wirednet.jp
終了の応答は中身無し

まとめ

単純にこれだけの手順でNostrのプロトコルをやり取りできます。後はNostrのプロトコル定義を読めばノートの投稿、ノートの削除、like以外のリアクション、等々なんでもできます。簡単ですね。 Let's happy hacking!

関連リンク

Meta Quest 2でAirLinkしようとしたら3点マークの真っ暗な画面のまま接続できない場合にやること

前提

今までMeta Quest 2(以下Quest) で AirLink できていたのに突然できなくなった。 Quest のクイックメニューの AirLink から接続しようとすると3点マークが表示されるだけで永遠に接続できない。 だけど Quest から AirLink 先のPCは見えている。 かつ、VirtualDesktopなら接続できるしSteamVRアプリも問題なく動く。 、、、の場合の確認項目、回復設定手順です。

tl;dr

以下の順で確認、設定してみる。

  1. QuestとPCを同じネットワーク(LAN/Wi-Fi)にする。
  2. GPUのドライバーを変更する。
  3. PCのメインディスプレイをGPU接続にする。
  4. nvidiaGPUなら、Studio ドライバではなく「Game Ready ドライバ」に変更して最新をインストールする。
  5. nvidiaGPUなら、 nvidiaコントロールパネルの「3D設定の管理」の「プログラム設定」に「Oculus VR Runtime(ovrserver_x64.exe)」を追加する。
  6. nvidiaGPUなら、 メインディスプレイの「グラフィック設定」の「デスクトップアプリ」に「Oculus VR Runtime(ovrserver_x64.exe)」を追加する。
  7. PCのOculusアプリからログアウト → PC再起動 → ログインする。
  8. PCのOculusアプリをアンインストール → PC再起動 → 再インストールする。

1. QuestとPCを同じネットワーク(LAN/Wi-Fi)にする。

  • QuestとPCが同じネットワーク(LAN/Wi-Fi)にいるか確認する。
  • 違うなら同じネットワークにする。
  • ルーターの問題もあり得るのでルーターを交換してみる。

2. GPUのドライバーを変更する。

  • GPUのドライバーを最新バージョンに更新する。
  • PCを再起動してAirLinkを試す。
  • GPUのドライバーを1つ前に戻す。
  • PCを再起動してAirLinkを試す。

3. PCのメインディスプレイをGPU接続にする。

  • PCの「設定」 → 「システム」 → 「ディスプレイ」 → メインディスプレイをGPU接続されているか確認する。
    • オンボードGPUになっていたらほぼ無理。
    • メインディスプレイの線(HDMI、DisplayPort)をGPUに繋ぐ。
  • またはGPUに繋がっているモニターをメインディスプレイに変更する。
  • PCを再起動してAirLinkを試す。

4. nvidiaGPUなら、「Studio ドライバ」ではなく「Game Ready ドライバ」に変更して最新をインストールする。

  • nvidiaGPUを使っていて、ドライバーのモードが「Studioドライバ」になっていたら「Game Ready ドライバ」に変更して最新のバージョンをインストールする。
  • PCを再起動してAirLinkを試す。

5. nvidiaGPUなら、 nvidiaコントロールパネルの「3D設定の管理」の「プログラム設定」に「Oculus VR Runtime(ovrserver_x64.exe)」を追加する。

  • nvidiaGPUなら、 「nvidiaコントロールパネル」アプリを起動する → 「3D設定の管理」 → 「プログラム設定」 → 「Oculus VR Runtime(ovrserver_x64.exe)」を追加する。
  • 「Oculus VR Runtime(ovrserver_x64.exe)」は「C:\Program Files\Oculus\Support\oculus-runtime\OVRServer_x64.exe」にある。

6. nvidiaGPUなら、 メインディスプレイの「グラフィック設定」の「デスクトップアプリ」に「Oculus VR Runtime(ovrserver_x64.exe)」を追加する。

  • nvidiaGPUなら、 「設定」 → 「システム」 → 「ディスプレイ」 → 「グラフィック設定」 → 「デスクトップアプリ」 → 「Oculus VR Runtime(ovrserver_x64.exe)」を追加 → 「オプション」 → 「高パフォーマンス」を選択して「保存」する。
  • PCを再起動してAirLinkを試す。

7. PCのOculusアプリからログアウト → PC再起動 → ログインする。

8. PCのOculusアプリをアンインストール → PC再起動 → 再インストールする。