<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>コンピュータ | CGたてはま</title>
	<atom:link href="https://cgbeginner.net/category/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF/feed/" rel="self" type="application/rss+xml" />
	<link>https://cgbeginner.net</link>
	<description>個人CGクリエイターの雑記帳</description>
	<lastBuildDate>Fri, 10 Apr 2026 18:58:26 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://cgbeginner.net/wp-content/uploads/2016/09/cropped-favicon_512-32x32.png</url>
	<title>コンピュータ | CGたてはま</title>
	<link>https://cgbeginner.net</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">152190934</site>	<item>
		<title>Gugugaga(ぐぐがが,古古嘎嘎)ペンギンまとめ</title>
		<link>https://cgbeginner.net/gugugaga/</link>
					<comments>https://cgbeginner.net/gugugaga/#respond</comments>
		
		<dc:creator><![CDATA[CGBeginner]]></dc:creator>
		<pubDate>Thu, 12 Mar 2026 11:51:10 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[コンピュータ]]></category>
		<guid isPermaLink="false">https://cgbeginner.net/?p=2572</guid>

					<description><![CDATA[最近、ショート動画のタイムラインに、妙にかわいい小さなペンギンが流れてきませんか。ぽてぽて歩いて、ちょっと拗ねて、甘えるように「Gugugaga」と鳴く。最近ものすごい勢いで増殖しているミームです。YouTube Sho [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>最近、ショート動画のタイムラインに、妙にかわいい小さなペンギンが流れてきませんか。ぽてぽて歩いて、ちょっと拗ねて、甘えるように「Gugugaga」と鳴く。最近ものすごい勢いで増殖しているミームです。YouTube ShortsやTikTok、抖音では、Gugugaga(古古嘎嘎)やEndministratorのタグがついた同系統の動画がすでにかなりの数出回っています。</p>



<p>かわいいのでまとめました。</p>



<h2 class="wp-block-heading">Gugugagaペンギンとは何者なのか</h2>



<p>「Gugugaga」は英語の &#8220;goo goo ga ga&#8221; から来ています。赤ちゃんのしゃべり方を表した言い方のようです。この音がミームとして爆発した経緯には諸説ありますが、中国語圏のゲームメディアでは、2025年にBilibiliで拡散した短いネタ動画『gugugaga』が転機として繰り返し言及されています。ここから「ペンギンっぽいものに咕咕嘎嘎の音を重ねる」という遊びが一気に広まったようです。</p>



<p>で、この流れに、ゲーム『Arknights: Endfield』の管理人（Endministrator）というキャラがなぜか混ざりました。このキャラがなんかペンギンっぽくみえることが理由のようです。</p>



<figure class="wp-block-image size-full is-resized"><img fetchpriority="high" decoding="async" width="640" height="647" src="https://cgbeginner.net/wp-content/uploads/2026/03/gRckjnbttbEoqAf.webp" alt="" class="wp-image-2573" style="width:264px;height:auto" srcset="https://cgbeginner.net/wp-content/uploads/2026/03/gRckjnbttbEoqAf.webp 640w, https://cgbeginner.net/wp-content/uploads/2026/03/gRckjnbttbEoqAf-297x300.webp 297w" sizes="(max-width: 640px) 100vw, 640px" /></figure>



<p><a href="https://i.17173cdn.com/2fhnvk/YWxqaGBf/cms3/gRckjnbttbEoqAf.jpg">https://i.17173cdn.com/2fhnvk/YWxqaGBf/cms3/gRckjnbttbEoqAf.jpg</a></p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="576" src="https://cgbeginner.net/wp-content/uploads/2026/03/0bda81d2aca72a668b76c64847afa9c8-1024x576.jpg" alt="" class="wp-image-2584" srcset="https://cgbeginner.net/wp-content/uploads/2026/03/0bda81d2aca72a668b76c64847afa9c8-1024x576.jpg 1024w, https://cgbeginner.net/wp-content/uploads/2026/03/0bda81d2aca72a668b76c64847afa9c8-300x169.jpg 300w, https://cgbeginner.net/wp-content/uploads/2026/03/0bda81d2aca72a668b76c64847afa9c8-768x432.jpg 768w, https://cgbeginner.net/wp-content/uploads/2026/03/0bda81d2aca72a668b76c64847afa9c8-1536x864.jpg 1536w, https://cgbeginner.net/wp-content/uploads/2026/03/0bda81d2aca72a668b76c64847afa9c8-120x68.jpg 120w, https://cgbeginner.net/wp-content/uploads/2026/03/0bda81d2aca72a668b76c64847afa9c8-160x90.jpg 160w, https://cgbeginner.net/wp-content/uploads/2026/03/0bda81d2aca72a668b76c64847afa9c8-320x180.jpg 320w, https://cgbeginner.net/wp-content/uploads/2026/03/0bda81d2aca72a668b76c64847afa9c8.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>そしてAI動画ブームが到来し、このキャラクターをかわいくデフォルメしたキャラにGugugagaといわせるミームが発生しました。</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="zxx" dir="ltr"><a href="https://t.co/kPUY3kAY8j">pic.twitter.com/kPUY3kAY8j</a></p>&mdash; Keitaro (@DqKeita) <a href="https://twitter.com/DqKeita/status/2030152497931620605?ref_src=twsrc%5Etfw">March 7, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">It&#39;s always good to sleep if you have a chance; sleeping in the Age of AI has become a luxury. <a href="https://t.co/OQPljfkZDy">pic.twitter.com/OQPljfkZDy</a></p>&mdash; Emily (@IamEmily2050) <a href="https://twitter.com/IamEmily2050/status/2030044925966905642?ref_src=twsrc%5Etfw">March 6, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="qme" dir="ltr">😱😱😱 <a href="https://t.co/V9SFw8Vg9W">pic.twitter.com/V9SFw8Vg9W</a></p>&mdash; Emily (@IamEmily2050) <a href="https://twitter.com/IamEmily2050/status/2031221849762279495?ref_src=twsrc%5Etfw">March 10, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="zxx" dir="ltr"><a href="https://t.co/VB4Q14x2OW">pic.twitter.com/VB4Q14x2OW</a></p>&mdash; Gacha Zone (@Gacha_Zone) <a href="https://twitter.com/Gacha_Zone/status/2030764864717619498?ref_src=twsrc%5Etfw">March 8, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">gym day <a href="https://twitter.com/hashtag/gugugaga?src=hash&amp;ref_src=twsrc%5Etfw">#gugugaga</a> <a href="https://twitter.com/hashtag/seedance2?src=hash&amp;ref_src=twsrc%5Etfw">#seedance2</a> <a href="https://t.co/kz5JvKes1U">pic.twitter.com/kz5JvKes1U</a></p>&mdash; Lucis (@ZocLucis) <a href="https://twitter.com/ZocLucis/status/2031293229572784161?ref_src=twsrc%5Etfw">March 10, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">stop working&#8230; <a href="https://twitter.com/hashtag/gugugaga?src=hash&amp;ref_src=twsrc%5Etfw">#gugugaga</a> <a href="https://twitter.com/hashtag/seedance2?src=hash&amp;ref_src=twsrc%5Etfw">#seedance2</a> <a href="https://t.co/9ROIG9SfIX">pic.twitter.com/9ROIG9SfIX</a></p>&mdash; Lucis (@ZocLucis) <a href="https://twitter.com/ZocLucis/status/2031366210713968760?ref_src=twsrc%5Etfw">March 10, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="ja" dir="ltr">The rain is outside.<br>She&#39;s inside, milk-drunk and asleep in your hand.<br>This is what trust looks like.<br><br>雨の夜、温かいミルクを差し出したら——<br>全部飲み干して、そのまま手のひらに寄りかかって眠った。<br>これ、飼い主になっていい？👇<br><br> <a href="https://twitter.com/hashtag/endfield?src=hash&amp;ref_src=twsrc%5Etfw">#endfield</a> <a href="https://twitter.com/hashtag/gugugaga?src=hash&amp;ref_src=twsrc%5Etfw">#gugugaga</a> <a href="https://twitter.com/hashtag/aichibi?src=hash&amp;ref_src=twsrc%5Etfw">#aichibi</a>  <a href="https://twitter.com/hashtag/%E3%82%A2%E3%83%BC%E3%82%AF%E3%83%8A%E3%82%A4%E3%83%84?src=hash&amp;ref_src=twsrc%5Etfw">#アークナイツ</a> <a href="https://twitter.com/hashtag/AI%E5%8B%95%E7%94%BB?src=hash&amp;ref_src=twsrc%5Etfw">#AI動画</a> <a href="https://t.co/IxbcEVfTlP">pic.twitter.com/IxbcEVfTlP</a></p>&mdash; 秦淮孤月 (@qhgy) <a href="https://twitter.com/qhgy/status/2032035307001131102?ref_src=twsrc%5Etfw">March 12, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="ja" dir="ltr">ググガガ 食べ物を盗んだところを捕まる <a href="https://twitter.com/hashtag/WutheringWaves?src=hash&amp;ref_src=twsrc%5Etfw">#WutheringWaves</a>                <a href="https://twitter.com/hashtag/%E6%B5%81%E8%90%A4?src=hash&amp;ref_src=twsrc%5Etfw">#流萤</a> <a href="https://twitter.com/hashtag/Firefly?src=hash&amp;ref_src=twsrc%5Etfw">#Firefly</a> <a href="https://twitter.com/hashtag/%E3%83%9B%E3%82%BF%E3%83%AB?src=hash&amp;ref_src=twsrc%5Etfw">#ホタル</a> <a href="https://twitter.com/hashtag/HonkaiStarRail?src=hash&amp;ref_src=twsrc%5Etfw">#HonkaiStarRail</a>📷 <a href="https://twitter.com/hashtag/%E5%B4%A9%E5%A3%8A%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%AC%E3%82%A4%E3%83%AB?src=hash&amp;ref_src=twsrc%5Etfw">#崩壊スターレイル</a> <a href="https://twitter.com/hashtag/AI%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88?src=hash&amp;ref_src=twsrc%5Etfw">#AIイラスト</a> <a href="https://twitter.com/hashtag/AIart%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F?src=hash&amp;ref_src=twsrc%5Etfw">#AIart️️️️️️️️️️️️️️️️️️️️️</a>  <a href="https://twitter.com/hashtag/ArknightsEndfield?src=hash&amp;ref_src=twsrc%5Etfw">#ArknightsEndfield</a>  <a href="https://twitter.com/hashtag/gugugaga?src=hash&amp;ref_src=twsrc%5Etfw">#gugugaga</a> <a href="https://twitter.com/hashtag/seedance2?src=hash&amp;ref_src=twsrc%5Etfw">#seedance2</a> <a href="https://t.co/iiH7dUgWhw">pic.twitter.com/iiH7dUgWhw</a></p>&mdash; Snowflake (@Snow_flake43) <a href="https://twitter.com/Snow_flake43/status/2032044868881760573?ref_src=twsrc%5Etfw">March 12, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="ja" dir="ltr">雨の夜、きみとわたし。<br><br>映写機がゆれてる。<br>みかん、くれた。🍊<br><br>……もう、どこにもいけないや。<br><br>Rainy night. Just you and me.<br>A projector. A mandarin.<br>I flopped.<br>I&#39;m not leaving.<br><br>AI chibi gugu gaga.<br>chibi ai gugu gaga.<br>AI ARK.<br>Arknights Endfield.<br>endmin gugugaga.<br>arknights… <a href="https://t.co/G5K1WRs5no">pic.twitter.com/G5K1WRs5no</a></p>&mdash; 秦淮孤月 (@qhgy) <a href="https://twitter.com/qhgy/status/2031986869882536433?ref_src=twsrc%5Etfw">March 12, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="tl" dir="ltr">Gugu Gaga lovers<a href="https://twitter.com/hashtag/ArknightsEndfield?src=hash&amp;ref_src=twsrc%5Etfw">#ArknightsEndfield</a> <a href="https://t.co/7E160iQYZg">pic.twitter.com/7E160iQYZg</a></p>&mdash; lyn (@lyn49556) <a href="https://twitter.com/lyn49556/status/2032010383553413224?ref_src=twsrc%5Etfw">March 12, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">get up my little penguin <a href="https://twitter.com/hashtag/gugugaga?src=hash&amp;ref_src=twsrc%5Etfw">#gugugaga</a> <a href="https://twitter.com/hashtag/seedance2?src=hash&amp;ref_src=twsrc%5Etfw">#seedance2</a> <a href="https://t.co/NvefPpV1hX">pic.twitter.com/NvefPpV1hX</a></p>&mdash; Lucis (@ZocLucis) <a href="https://twitter.com/ZocLucis/status/2031874308537040961?ref_src=twsrc%5Etfw">March 11, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="qme" dir="ltr"><a href="https://twitter.com/hashtag/gugugaga?src=hash&amp;ref_src=twsrc%5Etfw">#gugugaga</a> <a href="https://twitter.com/hashtag/arknightsendfield?src=hash&amp;ref_src=twsrc%5Etfw">#arknightsendfield</a> <a href="https://t.co/7GPRN2ZZGF">pic.twitter.com/7GPRN2ZZGF</a></p>&mdash; G4M3V1L FSS (@G4M3V1L) <a href="https://twitter.com/G4M3V1L/status/2031670926841196949?ref_src=twsrc%5Etfw">March 11, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">

<a rel="noopener" href="https://twitter.com/erd_tyg20945/status/2031935987765715021" title="https://twitter.com/erd_tyg20945/status/2031935987765715021" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Ftwitter.com%2Ferd_tyg20945%2Fstatus%2F2031935987765715021?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">https://twitter.com/erd_tyg20945/status/2031935987765715021</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://twitter.com/erd_tyg20945/status/2031935987765715021" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">twitter.com</div></div></div></div></a>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">give me a hug <a href="https://twitter.com/hashtag/gugugaga?src=hash&amp;ref_src=twsrc%5Etfw">#gugugaga</a> <a href="https://twitter.com/hashtag/seedance2?src=hash&amp;ref_src=twsrc%5Etfw">#seedance2</a> <a href="https://t.co/MjuemfqNMN">pic.twitter.com/MjuemfqNMN</a></p>&mdash; Lucis (@ZocLucis) <a href="https://twitter.com/ZocLucis/status/2031653856015196199?ref_src=twsrc%5Etfw">March 11, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="zh" dir="ltr">今天，古古嘎嘎 为了她的食物在城市里打扫卫生.<a href="https://twitter.com/hashtag/WutheringWaves?src=hash&amp;ref_src=twsrc%5Etfw">#WutheringWaves</a>    <a href="https://twitter.com/hashtag/%E6%B5%81%E8%90%A4?src=hash&amp;ref_src=twsrc%5Etfw">#流萤</a> <a href="https://twitter.com/hashtag/Firefly?src=hash&amp;ref_src=twsrc%5Etfw">#Firefly</a> <a href="https://twitter.com/hashtag/%E3%83%9B%E3%82%BF%E3%83%AB?src=hash&amp;ref_src=twsrc%5Etfw">#ホタル</a> <a href="https://twitter.com/hashtag/HonkaiStarRail?src=hash&amp;ref_src=twsrc%5Etfw">#HonkaiStarRail</a>📷 <a href="https://twitter.com/hashtag/%E5%B4%A9%E5%A3%8A%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%AC%E3%82%A4%E3%83%AB?src=hash&amp;ref_src=twsrc%5Etfw">#崩壊スターレイル</a> <a href="https://twitter.com/hashtag/AI%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88?src=hash&amp;ref_src=twsrc%5Etfw">#AIイラスト</a> <a href="https://twitter.com/hashtag/AIart%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F?src=hash&amp;ref_src=twsrc%5Etfw">#AIart️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️</a>  <a href="https://twitter.com/hashtag/gugugaga?src=hash&amp;ref_src=twsrc%5Etfw">#gugugaga</a> <a href="https://twitter.com/hashtag/seedance2?src=hash&amp;ref_src=twsrc%5Etfw">#seedance2</a> <a href="https://t.co/sp3qERNfM4">pic.twitter.com/sp3qERNfM4</a></p>&mdash; Snowflake (@Snow_flake43) <a href="https://twitter.com/Snow_flake43/status/2031676467558707328?ref_src=twsrc%5Etfw">March 11, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">give me the cake <a href="https://twitter.com/hashtag/gugugaga?src=hash&amp;ref_src=twsrc%5Etfw">#gugugaga</a> <a href="https://twitter.com/hashtag/seedance2?src=hash&amp;ref_src=twsrc%5Etfw">#seedance2</a> <a href="https://t.co/JsMQGwvilj">pic.twitter.com/JsMQGwvilj</a></p>&mdash; Lucis (@ZocLucis) <a href="https://twitter.com/ZocLucis/status/2031699909481804120?ref_src=twsrc%5Etfw">March 11, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">tickle <a href="https://twitter.com/hashtag/gugugaga?src=hash&amp;ref_src=twsrc%5Etfw">#gugugaga</a> <a href="https://twitter.com/hashtag/seedance2?src=hash&amp;ref_src=twsrc%5Etfw">#seedance2</a> <a href="https://t.co/AW4WZ0X28i">pic.twitter.com/AW4WZ0X28i</a></p>&mdash; Lucis (@ZocLucis) <a href="https://twitter.com/ZocLucis/status/2031761314507563288?ref_src=twsrc%5Etfw">March 11, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="eu" dir="ltr">GU GU GA GA GU GU GA<a href="https://twitter.com/hashtag/ArknightsEndfield?src=hash&amp;ref_src=twsrc%5Etfw">#ArknightsEndfield</a> <a href="https://twitter.com/hashtag/Endfield?src=hash&amp;ref_src=twsrc%5Etfw">#Endfield</a> <a href="https://twitter.com/hashtag/%E6%98%8E%E6%97%A5%E6%96%B9%E8%88%9F%E7%BB%88%E6%9C%AB%E5%9C%B0?src=hash&amp;ref_src=twsrc%5Etfw">#明日方舟终末地</a> <a href="https://twitter.com/hashtag/%E3%82%A2%E3%83%BC%E3%82%AF%E3%83%8A%E3%82%A4%E3%83%84%E3%82%A8%E3%83%B3%E3%83%89%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89?src=hash&amp;ref_src=twsrc%5Etfw">#アークナイツエンドフィールド</a> <a href="https://twitter.com/hashtag/%EB%AA%85%EC%9D%BC%EB%B0%A9%EC%A3%BC%EC%97%94%EB%93%9C%ED%95%84%EB%93%9C?src=hash&amp;ref_src=twsrc%5Etfw">#명일방주엔드필드</a> <a href="https://t.co/pLOl6JzhBd">pic.twitter.com/pLOl6JzhBd</a></p>&mdash; Arknights: Endfield Update (@AK_Luna02) <a href="https://twitter.com/AK_Luna02/status/2031590403103920155?ref_src=twsrc%5Etfw">March 11, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="in" dir="ltr">dancing <a href="https://twitter.com/hashtag/gugugaga?src=hash&amp;ref_src=twsrc%5Etfw">#gugugaga</a> <a href="https://twitter.com/hashtag/seedance2?src=hash&amp;ref_src=twsrc%5Etfw">#seedance2</a> <a href="https://t.co/bXXtzTnLFL">pic.twitter.com/bXXtzTnLFL</a></p>&mdash; Lucis (@ZocLucis) <a href="https://twitter.com/ZocLucis/status/2031595978487456216?ref_src=twsrc%5Etfw">March 11, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">this game is not fair. <a href="https://t.co/4R0emaC3H1">pic.twitter.com/4R0emaC3H1</a></p>&mdash; ViralOps (@ViralOps_) <a href="https://twitter.com/ViralOps_/status/2031429125273989225?ref_src=twsrc%5Etfw">March 10, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="tr" dir="ltr">gulugulu <a href="https://twitter.com/hashtag/gugugaga?src=hash&amp;ref_src=twsrc%5Etfw">#gugugaga</a> <a href="https://twitter.com/hashtag/seedance2?src=hash&amp;ref_src=twsrc%5Etfw">#seedance2</a> <a href="https://t.co/8whY3koL83">pic.twitter.com/8whY3koL83</a></p>&mdash; Lucis (@ZocLucis) <a href="https://twitter.com/ZocLucis/status/2031425601957957918?ref_src=twsrc%5Etfw">March 10, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="ja" dir="ltr">私のものは全て取り返す。👑🐧<br>お前のものも、全て奪う。<br><br>どっちが本当の支配者？👇<br><br>Taking back what&#39;s mine. 👑🐧<br>And taking yours too.<br><br>Who&#39;s the real boss? 👇<a href="https://twitter.com/hashtag/AI%E5%8B%95%E7%94%BB?src=hash&amp;ref_src=twsrc%5Etfw">#AI動画</a> <a href="https://twitter.com/hashtag/gugugaga?src=hash&amp;ref_src=twsrc%5Etfw">#gugugaga</a> <a href="https://twitter.com/hashtag/aianime?src=hash&amp;ref_src=twsrc%5Etfw">#aianime</a> <a href="https://t.co/jZnysWDulY">pic.twitter.com/jZnysWDulY</a></p>&mdash; 秦淮孤月 (@qhgy) <a href="https://twitter.com/qhgy/status/2031415032517468249?ref_src=twsrc%5Etfw">March 10, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">tickle tickle <a href="https://twitter.com/hashtag/gugugaga?src=hash&amp;ref_src=twsrc%5Etfw">#gugugaga</a> <a href="https://twitter.com/hashtag/seedance2?src=hash&amp;ref_src=twsrc%5Etfw">#seedance2</a> <a href="https://t.co/HkRK7zY4ob">pic.twitter.com/HkRK7zY4ob</a></p>&mdash; Lucis (@ZocLucis) <a href="https://twitter.com/ZocLucis/status/2031543126549213493?ref_src=twsrc%5Etfw">March 11, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="zxx" dir="ltr"><a href="https://t.co/GTgvBParXt">pic.twitter.com/GTgvBParXt</a></p>&mdash; Keitaro (@DqKeita) <a href="https://twitter.com/DqKeita/status/2031570031255949563?ref_src=twsrc%5Etfw">March 11, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="zxx" dir="ltr"><a href="https://t.co/40SVAWc0z2">pic.twitter.com/40SVAWc0z2</a></p>&mdash; Gacha Zone (@Gacha_Zone) <a href="https://twitter.com/Gacha_Zone/status/2031089505751498903?ref_src=twsrc%5Etfw">March 9, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">Knock knock.<br>Cuteness delivery. <a href="https://t.co/OPLDUiEfsN">https://t.co/OPLDUiEfsN</a> <a href="https://t.co/xhVz611auu">pic.twitter.com/xhVz611auu</a></p>&mdash; Marcio Lima 利真 マルシオ 💎 (@Preda2005) <a href="https://twitter.com/Preda2005/status/2030829916967887064?ref_src=twsrc%5Etfw">March 9, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">

<a rel="noopener" href="https://twitter.com/lihua415/status/2029789662580248841" title="https://twitter.com/lihua415/status/2029789662580248841" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Ftwitter.com%2Flihua415%2Fstatus%2F2029789662580248841?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">https://twitter.com/lihua415/status/2029789662580248841</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://twitter.com/lihua415/status/2029789662580248841" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">twitter.com</div></div></div></div></a>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="tl" dir="ltr">GuGuGaGa 😠<a href="https://twitter.com/hashtag/ArknightsEndfield?src=hash&amp;ref_src=twsrc%5Etfw">#ArknightsEndfield</a> <a href="https://t.co/niJcGFziSM">pic.twitter.com/niJcGFziSM</a></p>&mdash; Zymeth (@Ziymeth) <a href="https://twitter.com/Ziymeth/status/2028992686041239802?ref_src=twsrc%5Etfw">March 4, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">Leave the little penguin alone 🤭 <a href="https://t.co/NOkdgFBVwS">pic.twitter.com/NOkdgFBVwS</a></p>&mdash; Emily (@IamEmily2050) <a href="https://twitter.com/IamEmily2050/status/2030442073292210395?ref_src=twsrc%5Etfw">March 8, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="zxx" dir="ltr"><a href="https://t.co/J9MEqwdaBu">pic.twitter.com/J9MEqwdaBu</a></p>&mdash; Keitaro (@DqKeita) <a href="https://twitter.com/DqKeita/status/2029815398959321374?ref_src=twsrc%5Etfw">March 6, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">Your daily dose of penguin cuteness has arrived. 🐧💛 <a href="https://t.co/uAYUzPKr1C">https://t.co/uAYUzPKr1C</a> <a href="https://t.co/jPCjz3Kpjw">pic.twitter.com/jPCjz3Kpjw</a></p>&mdash; Marcio Lima 利真 マルシオ 💎 (@Preda2005) <a href="https://twitter.com/Preda2005/status/2031158347182096775?ref_src=twsrc%5Etfw">March 10, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="zxx" dir="ltr"><a href="https://t.co/A0UVSri2pu">pic.twitter.com/A0UVSri2pu</a></p>&mdash; Gacha Zone (@Gacha_Zone) <a href="https://twitter.com/Gacha_Zone/status/2031019053993599184?ref_src=twsrc%5Etfw">March 9, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="ja" dir="ltr">Absolute gugu gaga<br>古古嘎嘎<a href="https://twitter.com/hashtag/ArknightsEndfield?src=hash&amp;ref_src=twsrc%5Etfw">#ArknightsEndfield</a><a href="https://twitter.com/hashtag/gugugaga?src=hash&amp;ref_src=twsrc%5Etfw">#gugugaga</a> <a href="https://t.co/EMzqQPMfCR">pic.twitter.com/EMzqQPMfCR</a></p>&mdash; Snowflake (@Snow_flake43) <a href="https://twitter.com/Snow_flake43/status/2031282376014495905?ref_src=twsrc%5Etfw">March 10, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="tl" dir="ltr">gugugaga <a href="https://twitter.com/hashtag/gugugaga?src=hash&amp;ref_src=twsrc%5Etfw">#gugugaga</a> <a href="https://t.co/tx7XJlltu9">pic.twitter.com/tx7XJlltu9</a></p>&mdash; DimenRift (@DimenRift) <a href="https://twitter.com/DimenRift/status/2030502982694097070?ref_src=twsrc%5Etfw">March 8, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">Someone needs attention 🥰 <a href="https://t.co/3Rq4k4tWFi">pic.twitter.com/3Rq4k4tWFi</a></p>&mdash; Glitter Gal (@GlitterPixely) <a href="https://twitter.com/GlitterPixely/status/2031405688258277822?ref_src=twsrc%5Etfw">March 10, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="ja" dir="ltr">一緒に食べよ？🐧🥩<br><br>Let&#39;s eat together! 🐧🥩<a href="https://twitter.com/hashtag/AI%E5%8B%95%E7%94%BB?src=hash&amp;ref_src=twsrc%5Etfw">#AI動画</a> <a href="https://twitter.com/hashtag/gugugaga?src=hash&amp;ref_src=twsrc%5Etfw">#gugugaga</a> <a href="https://t.co/BwkUMIIetB">pic.twitter.com/BwkUMIIetB</a></p>&mdash; 秦淮孤月 (@qhgy) <a href="https://twitter.com/qhgy/status/2031786405232546147?ref_src=twsrc%5Etfw">March 11, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="qme" dir="ltr"><a href="https://twitter.com/hashtag/gugugaga?src=hash&amp;ref_src=twsrc%5Etfw">#gugugaga</a> <a href="https://twitter.com/hashtag/arknightsendfield?src=hash&amp;ref_src=twsrc%5Etfw">#arknightsendfield</a> <a href="https://t.co/dN5Hp1RxfC">pic.twitter.com/dN5Hp1RxfC</a></p>&mdash; G4M3V1L FSS (@G4M3V1L) <a href="https://twitter.com/G4M3V1L/status/2031980902025478644?ref_src=twsrc%5Etfw">March 12, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">take a selfie <a href="https://twitter.com/hashtag/gugugaga?src=hash&amp;ref_src=twsrc%5Etfw">#gugugaga</a> <a href="https://twitter.com/hashtag/seedance2?src=hash&amp;ref_src=twsrc%5Etfw">#seedance2</a> <a href="https://t.co/T1uoLpWYX6">pic.twitter.com/T1uoLpWYX6</a></p>&mdash; Lucis (@ZocLucis) <a href="https://twitter.com/ZocLucis/status/2031782201734676515?ref_src=twsrc%5Etfw">March 11, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="ja" dir="ltr">This is unfair😠 <br>それは不公平だ<a href="https://twitter.com/hashtag/WutheringWaves?src=hash&amp;ref_src=twsrc%5Etfw">#WutheringWaves</a>                <a href="https://twitter.com/hashtag/%E6%B5%81%E8%90%A4?src=hash&amp;ref_src=twsrc%5Etfw">#流萤</a> <a href="https://twitter.com/hashtag/Firefly?src=hash&amp;ref_src=twsrc%5Etfw">#Firefly</a> <a href="https://twitter.com/hashtag/%E3%83%9B%E3%82%BF%E3%83%AB?src=hash&amp;ref_src=twsrc%5Etfw">#ホタル</a> <a href="https://twitter.com/hashtag/HonkaiStarRail?src=hash&amp;ref_src=twsrc%5Etfw">#HonkaiStarRail</a>📷 <a href="https://twitter.com/hashtag/%E5%B4%A9%E5%A3%8A%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%AC%E3%82%A4%E3%83%AB?src=hash&amp;ref_src=twsrc%5Etfw">#崩壊スターレイル</a> <a href="https://twitter.com/hashtag/AI%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88?src=hash&amp;ref_src=twsrc%5Etfw">#AIイラスト</a> <a href="https://twitter.com/hashtag/AIart%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F?src=hash&amp;ref_src=twsrc%5Etfw">#AIart️️️️️️️️️️️️️️️️️️️️️</a>  <a href="https://twitter.com/hashtag/ArknightsEndfield?src=hash&amp;ref_src=twsrc%5Etfw">#ArknightsEndfield</a>  <a href="https://twitter.com/hashtag/gugugaga?src=hash&amp;ref_src=twsrc%5Etfw">#gugugaga</a> <a href="https://twitter.com/hashtag/seedance2?src=hash&amp;ref_src=twsrc%5Etfw">#seedance2</a> <a href="https://t.co/3qURBiTXjC">pic.twitter.com/3qURBiTXjC</a></p>&mdash; Snowflake (@Snow_flake43) <a href="https://twitter.com/Snow_flake43/status/2032009883042955664?ref_src=twsrc%5Etfw">March 12, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="zxx" dir="ltr"><a href="https://t.co/Avx8tWHljj">pic.twitter.com/Avx8tWHljj</a></p>&mdash; Keitaro (@DqKeita) <a href="https://twitter.com/DqKeita/status/2032033074305790356?ref_src=twsrc%5Etfw">March 12, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">

<a rel="noopener" href="https://twitter.com/erd_tyg20945/status/2031846974639730814" title="https://twitter.com/erd_tyg20945/status/2031846974639730814" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Ftwitter.com%2Ferd_tyg20945%2Fstatus%2F2031846974639730814?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">https://twitter.com/erd_tyg20945/status/2031846974639730814</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://twitter.com/erd_tyg20945/status/2031846974639730814" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">twitter.com</div></div></div></div></a>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="ja" dir="ltr">咕咕嘎嘎 <a href="https://twitter.com/hashtag/gugugaga?src=hash&amp;ref_src=twsrc%5Etfw">#gugugaga</a> <a href="https://twitter.com/hashtag/anime?src=hash&amp;ref_src=twsrc%5Etfw">#anime</a> <a href="https://twitter.com/hashtag/arknightsendfield?src=hash&amp;ref_src=twsrc%5Etfw">#arknightsendfield</a> <a href="https://twitter.com/hashtag/ai?src=hash&amp;ref_src=twsrc%5Etfw">#ai</a> <a href="https://twitter.com/hashtag/aichibi?src=hash&amp;ref_src=twsrc%5Etfw">#aichibi</a> <a href="https://t.co/YJemnkMvUG">pic.twitter.com/YJemnkMvUG</a></p>&mdash; GAO! @AIart (@GAOAIArt) <a href="https://twitter.com/GAOAIArt/status/2031659854209880314?ref_src=twsrc%5Etfw">March 11, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="in" dir="ltr">dancing <a href="https://twitter.com/hashtag/gugugaga?src=hash&amp;ref_src=twsrc%5Etfw">#gugugaga</a> <a href="https://twitter.com/hashtag/seedance2?src=hash&amp;ref_src=twsrc%5Etfw">#seedance2</a> <a href="https://t.co/s7SXPWGumv">pic.twitter.com/s7SXPWGumv</a></p>&mdash; Lucis (@ZocLucis) <a href="https://twitter.com/ZocLucis/status/2031965660306461051?ref_src=twsrc%5Etfw">March 12, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="zxx" dir="ltr"><a href="https://t.co/OXMKDLTYEs">pic.twitter.com/OXMKDLTYEs</a></p>&mdash; Keitaro (@DqKeita) <a href="https://twitter.com/DqKeita/status/2031691247765606908?ref_src=twsrc%5Etfw">March 11, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="zxx" dir="ltr"><a href="https://t.co/UeRpFYPsgu">pic.twitter.com/UeRpFYPsgu</a></p>&mdash; Keitaro (@DqKeita) <a href="https://twitter.com/DqKeita/status/2031697718003765749?ref_src=twsrc%5Etfw">March 11, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="zxx" dir="ltr"><a href="https://t.co/JsNgj8Vxja">pic.twitter.com/JsNgj8Vxja</a></p>&mdash; Keitaro (@DqKeita) <a href="https://twitter.com/DqKeita/status/2031734594379075866?ref_src=twsrc%5Etfw">March 11, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">Some days feel heavy.<br>Sometimes all we need is a hug. 🫂🐧<br><br>Drop your country flag and a positive emoji below.<br><br>Let’s send a little light around the world. 🌎✨ <a href="https://t.co/uBO9X0rlYl">https://t.co/uBO9X0rlYl</a> <a href="https://t.co/Sy3QmbdHs7">pic.twitter.com/Sy3QmbdHs7</a></p>&mdash; Marcio Lima 利真 マルシオ 💎 (@Preda2005) <a href="https://twitter.com/Preda2005/status/2031819970045493676?ref_src=twsrc%5Etfw">March 11, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">I don’t know how…<br>but this penguin just fixed my entire mood. 🐧🍪 <a href="https://t.co/wuHr3J4CjL">https://t.co/wuHr3J4CjL</a> <a href="https://t.co/1gROrw05Rn">pic.twitter.com/1gROrw05Rn</a></p>&mdash; Marcio Lima 利真 マルシオ 💎 (@Preda2005) <a href="https://twitter.com/Preda2005/status/2031887388142944580?ref_src=twsrc%5Etfw">March 12, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="zh" dir="ltr"><a href="https://twitter.com/hashtag/%E6%B5%81%E8%90%A4?src=hash&amp;ref_src=twsrc%5Etfw">#流萤</a> <a href="https://twitter.com/hashtag/Firefly?src=hash&amp;ref_src=twsrc%5Etfw">#Firefly</a> <a href="https://twitter.com/hashtag/%E3%83%9B%E3%82%BF%E3%83%AB?src=hash&amp;ref_src=twsrc%5Etfw">#ホタル</a> <a href="https://twitter.com/hashtag/HonkaiStarRail?src=hash&amp;ref_src=twsrc%5Etfw">#HonkaiStarRail</a>📷 <a href="https://twitter.com/hashtag/%E5%B4%A9%E5%A3%8A%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%AC%E3%82%A4%E3%83%AB?src=hash&amp;ref_src=twsrc%5Etfw">#崩壊スターレイル</a> <a href="https://twitter.com/hashtag/AI%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88?src=hash&amp;ref_src=twsrc%5Etfw">#AIイラスト</a> <a href="https://twitter.com/hashtag/AIart%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F%EF%B8%8F?src=hash&amp;ref_src=twsrc%5Etfw">#AIart️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️</a> <a href="https://twitter.com/hashtag/gugugaga?src=hash&amp;ref_src=twsrc%5Etfw">#gugugaga</a> <a href="https://twitter.com/hashtag/seedance2?src=hash&amp;ref_src=twsrc%5Etfw">#seedance2</a> <br><br>古古嘎嘎 旅行时 <a href="https://t.co/0h06Knp4tO">pic.twitter.com/0h06Knp4tO</a></p>&mdash; Snowflake (@Snow_flake43) <a href="https://twitter.com/Snow_flake43/status/2031317925660078451?ref_src=twsrc%5Etfw">March 10, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="qme" dir="ltr">😱😱😱 <a href="https://t.co/bOo9crIMdc">https://t.co/bOo9crIMdc</a> <a href="https://t.co/tQ7jRKNqkS">pic.twitter.com/tQ7jRKNqkS</a></p>&mdash; Marcio Lima 利真 マルシオ 💎 (@Preda2005) <a href="https://twitter.com/Preda2005/status/2031457037729804606?ref_src=twsrc%5Etfw">March 10, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="ja" dir="ltr">え？なんでお口拭いてくれるの？<br>もう赤ちゃんじゃないんだから！……でも、拭かせてあげる。💦<br><br>お口拭いてあげる人、他にいる？👇<br><br>&#8211;<br><br>Wait, why are you wiping my mouth?<br>I&#39;m not a baby! &#8230;But, I&#39;ll let you wipe it. 💦<br><br>Who else wants to wipe my face? 👇<a href="https://twitter.com/hashtag/arknightsendfield?src=hash&amp;ref_src=twsrc%5Etfw">#arknightsendfield</a> <a href="https://twitter.com/hashtag/endfield?src=hash&amp;ref_src=twsrc%5Etfw">#endfield</a>… <a href="https://t.co/LMv1FW7tXq">pic.twitter.com/LMv1FW7tXq</a></p>&mdash; 秦淮孤月 (@qhgy) <a href="https://twitter.com/qhgy/status/2031584234989826342?ref_src=twsrc%5Etfw">March 11, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">

<a rel="noopener" href="https://twitter.com/Notsu311406/status/2030942378144796767" title="https://twitter.com/Notsu311406/status/2030942378144796767" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Ftwitter.com%2FNotsu311406%2Fstatus%2F2030942378144796767?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">https://twitter.com/Notsu311406/status/2030942378144796767</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://twitter.com/Notsu311406/status/2030942378144796767" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">twitter.com</div></div></div></div></a>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">Every woman deserves a thousand hearts today. 💗🐧 <a href="https://t.co/DjJPh65mlm">pic.twitter.com/DjJPh65mlm</a></p>&mdash; Marcio Lima 利真 マルシオ 💎 (@Preda2005) <a href="https://twitter.com/Preda2005/status/2030700924889600118?ref_src=twsrc%5Etfw">March 8, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">Our little penguin is so cute<a href="https://twitter.com/hashtag/ArknightsEndfield?src=hash&amp;ref_src=twsrc%5Etfw">#ArknightsEndfield</a> <a href="https://t.co/5LXQBDeE0j">pic.twitter.com/5LXQBDeE0j</a></p>&mdash; lyn (@lyn49556) <a href="https://twitter.com/lyn49556/status/2030976416775565615?ref_src=twsrc%5Etfw">March 9, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">That’s why bid <a href="https://twitter.com/search?q=%24Gugugaga&amp;src=ctag&amp;ref_src=twsrc%5Etfw">$Gugugaga</a>  100x better than what the dog doin <br><br>6ngSN9zA32mShK5itfNVPsJvwADfiSDxiDbTUpwzpump <a href="https://t.co/1NJysj71Z7">pic.twitter.com/1NJysj71Z7</a></p>&mdash; 𝕸. (@Oldtrashxxx) <a href="https://twitter.com/Oldtrashxxx/status/2029662067192648039?ref_src=twsrc%5Etfw">March 5, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">sleep&#8230;&#8230;<a href="https://twitter.com/hashtag/seedance2?src=hash&amp;ref_src=twsrc%5Etfw">#seedance2</a> <a href="https://twitter.com/hashtag/gugugaga?src=hash&amp;ref_src=twsrc%5Etfw">#gugugaga</a> <a href="https://t.co/H5HfPqXMfC">pic.twitter.com/H5HfPqXMfC</a></p>&mdash; Lucis (@ZocLucis) <a href="https://twitter.com/ZocLucis/status/2031002986332484069?ref_src=twsrc%5Etfw">March 9, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>
</div>
</div>



<p>情報源まとめ</p>




<a rel="noopener" href="https://news.17173.com/content/03072026/000720657.shtml" title="&#19968;&#20010;&#20108;&#21019;&#26775;&#65292;&#23621;&#28982;&#21557;&#21040;&#35201;&#25910;&#29256;&#26435;&#36153;&#65311;&#12298;&#32456;&#26411;&#22320;&#12299;&#8220;&#20225;&#40517;&#31649;&#29702;&#21592;&#8221;&#20316;&#32773;&#21521;&#20854;&#20182;&#20154;&#32034;&#35201;&#25480;&#26435;&#36153;_&#32593;&#32476;&#28216;&#25103;&#26032;&#38395;_17173.com&#20013;&#22269;&#28216;&#25103;&#38376;&#25143;&#31449;" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fnews.17173.com%2Fcontent%2F03072026%2F000720657.shtml?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">&#19968;&#20010;&#20108;&#21019;&#26775;&#65292;&#23621;&#28982;&#21557;&#21040;&#35201;&#25910;&#29256;&#26435;&#36153;&#65311;&#12298;&#32456;&#26411;&#22320;&#12299;&#8220;&#20225;&#40517;&#31649;&#29702;&#21592;&#8221;&#20316;&#32773;&#21521;&#20854;&#20182;&#20154;&#32034;&#35201;&#25480;&#26435;&#36153;_&#32593;&#32476;&#28216;&#25103;&#26032;&#38395;_17173.com&#20013;&#22269;&#28216;&#25103;&#38376;&#25143;&#31449;</div><div class="blogcard-snippet external-blogcard-snippet">《终末地》二创梗&#039;企鹅管理员&#039;作者竟索要版权费！AI视频爆火后陷版权争议，网友炸锅。揭秘咕咕嘎嘎梗起源与商业纠纷内幕。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://news.17173.com/content/03072026/000720657.shtml" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">news.17173.com</div></div></div></div></a>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">I have only now realized that Gugu Gaga cuteslop is a viral Arknights:Endfield promotion (had to play Endfield to notice)<br>That seems to be a problem with Chinese Soft Power, their memes evolve far away from the underlying IP. <a href="https://t.co/dm1eEWwOPl">https://t.co/dm1eEWwOPl</a> <a href="https://t.co/liFisk4D5s">pic.twitter.com/liFisk4D5s</a></p>&mdash; Teortaxes▶️ (DeepSeek 推特🐋铁粉 2023 – ∞) (@teortaxesTex) <a href="https://twitter.com/teortaxesTex/status/2031283640521412778?ref_src=twsrc%5Etfw">March 10, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">I went back in time for this gem of a prompt by Emily just so I could try it with Gugugaga. <br><br>Nano Banana 2🥰 <a href="https://t.co/Ir4BRvwvl4">https://t.co/Ir4BRvwvl4</a> <a href="https://t.co/WZPEOAjJPe">pic.twitter.com/WZPEOAjJPe</a></p>&mdash; Glitter Gal (@GlitterPixely) <a href="https://twitter.com/GlitterPixely/status/2031942788938362977?ref_src=twsrc%5Etfw">March 12, 2026</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://cgbeginner.net/gugugaga/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2572</post-id>	</item>
		<item>
		<title>別PCからWSL2にSSH接続する方法（mirrored mode）</title>
		<link>https://cgbeginner.net/wsl2-ssh/</link>
					<comments>https://cgbeginner.net/wsl2-ssh/#respond</comments>
		
		<dc:creator><![CDATA[CGBeginner]]></dc:creator>
		<pubDate>Wed, 04 Mar 2026 14:04:18 +0000</pubDate>
				<category><![CDATA[コンピュータ]]></category>
		<guid isPermaLink="false">https://cgbeginner.net/?p=2564</guid>

					<description><![CDATA[WSL2を使っていると、LAN内の別PCやタブレットからSSH接続したい場面があります。 WSL2はデフォルトでNAT構成になっており、同一PC内からはlocalhostで届くものの、LAN上の別PCからはそのままでは届 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>WSL2を使っていると、LAN内の別PCやタブレットからSSH接続したい場面があります。</p>



<p>WSL2はデフォルトでNAT構成になっており、同一PC内からは<br><code>localhost</code><br>で届くものの、LAN上の別PCからはそのままでは届きません。</p>



<p>対処方法はいくつかありますが、今回はWindows 11で使えるmirrored networking modeを使う方法を選びました。portproxyを使う方法と比べて、WSL2のIPアドレスが再起動のたびに変わる問題を気にしなくていいのがメリットです。</p>



<p>ということで、手順をメモ。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="環境"><span id="toc1">環境</span></h3>



<ul class="wp-block-list">
<li>Windows 11</li>



<li>WSL2 Ubuntu 24.04</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="目次"><span id="toc2">目次</span></h3>



<ol class="wp-block-list">
<li>WSL2にSSHサーバをインストール</li>



<li>sshdのポートを変更</li>



<li>mirrored modeを有効化</li>



<li>ファイアウォールの設定</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="wsl2にsshサーバをインストール"><span id="toc3">1.WSL2にSSHサーバをインストール</span></h3>



<p>WSLのターミナルで実行します。</p>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install -y openssh-server</code></pre>



<p>インストールできたら、systemdでサービスとして登録・起動します。</p>



<pre class="wp-block-code"><code>sudo systemctl enable ssh
sudo systemctl start ssh</code></pre>



<p>起動確認：</p>



<pre class="wp-block-code"><code>systemctl status ssh</code></pre>



<p><code>Active: active (running)</code> と表示されればOKです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="sshdのポートを変更"><span id="toc4">2. sshdのポートを変更</span></h3>



<p>デフォルトは22番ですが、将来的にWindows側にもsshd（22番）を入れることを想定して、WSL2側は2222番にしておきます。</p>



<p><code>/etc/ssh/sshd_config</code> の <code>#Port 22</code> を<br><code>Port 2222</code> に変更します。</p>



<pre class="wp-block-code"><code>sudo sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config</code></pre>



<p>Ubuntu 24.04はsystemdのsocket<br>activationを使っているので、ポート変更後は以下の3コマンドが必要です。</p>



<pre class="wp-block-code"><code>sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
sudo systemctl restart ssh</code></pre>



<p>リッスンしているか確認：</p>



<pre class="wp-block-code"><code>ss -tlnp | grep 2222</code></pre>



<p><code>0.0.0.0:2222</code> が表示されればOKです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="mirrored-modeを有効化"><span id="toc5">3. mirrored modeを有効化</span></h3>



<p>Windows側の設定です。</p>



<p><code>%USERPROFILE%\.wslconfig</code><br>に以下を追記します（ファイルがなければ新規作成）。</p>



<pre class="wp-block-code"><code>&#91;wsl2]
networkingMode=mirrored</code></pre>



<p>PowerShellから書き込む場合：</p>



<pre class="wp-block-code"><code>Add-Content "$env:USERPROFILE\.wslconfig" "`n&#91;wsl2]`nnetworkingMode=mirrored"</code></pre>



<p>追記したらWSLを再起動します。</p>



<pre class="wp-block-code"><code>wsl --shutdown</code></pre>



<p>WSLのターミナルを開き直して、WindowsのLAN<br>IPが含まれているか確認します。</p>



<pre class="wp-block-code"><code>hostname -I</code></pre>



<p><code>192.168.xxx.xxx</code> が含まれていればmirrored<br>modeが有効になっています。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="ファイアウォールの設定"><span id="toc6">4. ファイアウォールの設定</span></h3>



<p>mirrored<br>modeではWindowsファイアウォールに加えて、<strong>Hyper-Vファイアウォールへの許可も必要</strong>です。これがないとLANからタイムアウトになります。</p>



<p>管理者権限のPowerShellで以下の2つを実行します。</p>



<pre class="wp-block-code"><code># Hyper-Vファイアウォール
New-NetFirewallHyperVRule -Name "WSL2 SSH" -DisplayName "WSL2 SSH" -Direction Inbound -VMCreatorId "{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}" -Protocol TCP -LocalPorts 2222

# Windowsファイアウォール
New-NetFirewallRule -Name "WSL2 SSH" -DisplayName "WSL2 SSH" -Direction Inbound -Protocol TCP -LocalPort 2222 -Action Allow</code></pre>



<p><code>{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}</code><br>はWSL用に固定されているGUIDです。以下のコマンドで確認できます。</p>



<pre class="wp-block-code"><code>Get-NetFirewallHyperVVMCreator</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="接続確認"><span id="toc7">接続確認</span></h3>



<p>別PCから以下で接続できます。</p>



<pre class="wp-block-code"><code>ssh -p 2222 &lt;ユーザー名>@&lt;WindowsのLAN IP></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="まとめ"><span id="toc8">まとめ</span></h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>項目</th><th>設定内容</th></tr></thead><tbody><tr><td>WSL2ネットワーク</td><td>mirrored mode</td></tr><tr><td>WSL2 sshd</td><td>ポート2222</td></tr><tr><td>Hyper-Vファイアウォール</td><td>TCP 2222 許可</td></tr><tr><td>Windowsファイアウォール</td><td>TCP 2222 許可</td></tr></tbody></table></figure>



<p>portproxyと異なり、すべての設定が永続します。WSL再起動後も追加の操作は不要です。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cgbeginner.net/wsl2-ssh/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2564</post-id>	</item>
		<item>
		<title>○時○分から△△を再生すると □□と同時に年を越せます ジェネレーター</title>
		<link>https://cgbeginner.net/countdown-generator/</link>
					<comments>https://cgbeginner.net/countdown-generator/#respond</comments>
		
		<dc:creator><![CDATA[CGBeginner]]></dc:creator>
		<pubDate>Sat, 27 Dec 2025 17:33:56 +0000</pubDate>
				<category><![CDATA[コンピュータ]]></category>
		<category><![CDATA[全般]]></category>
		<category><![CDATA[映画]]></category>
		<guid isPermaLink="false">https://cgbeginner.net/?p=2531</guid>

					<description><![CDATA[○時○分から△△を再生すると □□と同時に年を越せます というネタ、たまにXで見ますよね。 こういうネタを作るためには、「映画の何時間何分目に、このイベントが起こる」というタイムコードを確認して、そのうえで「元旦0時0分 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>○時○分から△△を再生すると □□と同時に年を越せます</p>



<p>というネタ、たまにXで見ますよね。</p>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="ja" dir="ltr">12月31日 21時26分52秒から <a href="https://twitter.com/hashtag/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%82%B9%E3%83%86%E3%83%A9%E3%83%BC?src=hash&amp;ref_src=twsrc%5Etfw">#インターステラー</a> を再生しはじめると、<br>「ユリイカ！」と同時に年を越せます。 <a href="https://t.co/lSNXcYrBpI">https://t.co/lSNXcYrBpI</a> <a href="https://t.co/xhluAAn3eD">pic.twitter.com/xhluAAn3eD</a></p>&mdash; たてはま / CGBeginner @趣味独学映像クリエイター (@cgbeginner) <a href="https://twitter.com/cgbeginner/status/2004922719603761247?ref_src=twsrc%5Etfw">December 27, 2025</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<p>こういうネタを作るためには、「映画の何時間何分目に、このイベントが起こる」というタイムコードを確認して、そのうえで「元旦0時0分からの逆算を計算する」必要があるので結構めんどくさい。間違えると取り返しつかないですからね。</p>



<p>なので計算機を作りました。</p>



<div class="nycalc" data-nycalc>
  <style>
    .nycalc { margin: 16px 0; }

    /* カードをページ（親要素）幅いっぱいに */
    .nycalc .nycalc-card{
      border: 1px solid rgba(127,127,127,.35);
      border-radius: 12px;
      padding: 14px;
      width: 100%;
      max-width: none;
    }

    .nycalc .nycalc-title{ font-size: 1.15rem; font-weight: 700; margin: 0 0 10px; }

    /* 補足は小さめに */
    .nycalc .nycalc-muted{ opacity: .85; font-size: .88rem; line-height: 1.6; }
    .nycalc .nycalc-small{ font-size: .82rem; opacity: .9; }

    .nycalc .nycalc-row{
      display: grid;
      grid-template-columns: 220px 1fr;
      gap: 10px;
      align-items: center;
      margin: 10px 0;
    }
    .nycalc .nycalc-row label{ font-weight: 600; }

    .nycalc input, .nycalc button{
      font: inherit;
      padding: 8px 10px;
      border-radius: 10px;
      border: 1px solid rgba(127,127,127,.35);
      box-sizing: border-box;
    }
    .nycalc input[type="number"]{ max-width: 220px; }
    .nycalc .nycalc-btns{ display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; align-items: center; }
    .nycalc button{ cursor: pointer; }

    .nycalc .nycalc-out{
      margin-top: 14px;
      padding: 12px;
      border-radius: 12px;
      background: rgba(127,127,127,.10);
      border: 1px solid rgba(127,127,127,.22);
    }

    .nycalc .nycalc-mono{
      font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
      font-variant-numeric: tabular-nums;
    }
    .nycalc .nycalc-warn{ color: #ff6b6b; }
    .nycalc .nycalc-twoCol{ display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }

    /* 追加：タイムコードの増減UI */
    .nycalc .nycalc-tcControls button{ padding: 6px 10px; }
    .nycalc .nycalc-tcStep{ width: 96px; }

    /* 開始日時の表示を大きく */
    .nycalc .nycalc-resultMain{
      padding: 12px;
      border-radius: 12px;
      background: rgba(127,127,127,.12);
      border: 1px solid rgba(127,127,127,.28);
      margin-bottom: 10px;
    }
    .nycalc .nycalc-resultLabel{
      font-size: .9rem;
      opacity: .85;
      font-weight: 700;
      margin-bottom: 6px;
    }
    .nycalc .nycalc-resultValue{
      font-size: 2.15rem;
      font-weight: 800;
      line-height: 1.12;
      letter-spacing: .01em;
      word-break: break-word;
    }

    /* 出力側の補足を小さく */
    .nycalc .nycalc-resultMeta{ margin-top: 6px; }
    .nycalc .nycalc-countdown{ margin-top: 6px; }

    @media (max-width: 720px){
      .nycalc .nycalc-row{ grid-template-columns: 1fr; }
      .nycalc .nycalc-twoCol{ grid-template-columns: 1fr; }
      .nycalc .nycalc-resultValue{ font-size: 1.65rem; }
    }
  </style>

  <div class="nycalc-card">
    <div class="nycalc-title">映画タイムコード逆算ツール</div>

    <div class="nycalc-muted">
      現実の「合わせたい日時」（例：元旦 00:00:00）と、映画の「合わせたい瞬間のタイムコード」を入力すると、
      その瞬間が現実時刻と一致するように「再生開始すべき日時」を逆算します。<br>
      タイムコードは <span class="nycalc-mono">HH:MM:SS</span> / <span class="nycalc-mono">HH:MM:SS.mmm</span> に対応。
      フレーム入力は <span class="nycalc-mono">HH:MM:SS:FF</span>（FPS指定）に対応します。
    </div>

    <div class="nycalc-row">
      <label>合わせたい現実の日時</label>
      <div>
        <input class="nycalc-target" type="datetime-local" step="1" />
        <div class="nycalc-btns">
          <button class="nycalc-btnNextNY" type="button">次の元旦をセット</button>
          <button class="nycalc-btnNow" type="button">現在時刻をセット</button>
        </div>
        
      </div>
    </div>

    <div class="nycalc-row">
      <label>映画のタイムコード</label>
      <div>
        <input class="nycalc-timecode" type="text" value="02:07:28" placeholder="例) 02:07:28 / 02:07:28.500 / 02:07:28:12" />

        <div class="nycalc-btns nycalc-tcControls" style="margin-top:10px;">
          <button class="nycalc-tcMinus" type="button" aria-label="タイムコードを減らす">−</button>
          <button class="nycalc-tcPlus" type="button" aria-label="タイムコードを増やす">＋</button>
          <span class="nycalc-muted nycalc-small">ステップ</span>
          <input class="nycalc-tcStep" type="number" step="0.001" value="1" />
          <span class="nycalc-muted nycalc-small">秒</span>
          <button class="nycalc-tcQuick" type="button" data-step="0.1">0.1</button>
          <button class="nycalc-tcQuick" type="button" data-step="1">1</button>
          <button class="nycalc-tcQuick" type="button" data-step="10">10</button>
          <button class="nycalc-tcReset" type="button">リセット</button>
        </div>

        <div class="nycalc-small nycalc-muted">
          <span class="nycalc-mono">SS</span> / <span class="nycalc-mono">MM:SS</span> / <span class="nycalc-mono">HH:MM:SS</span> も受け付けます。
          フレーム指定は <span class="nycalc-mono">HH:MM:SS:FF</span> または <span class="nycalc-mono">HH:MM:SS;FF</span> です。
        </div>
      </div>
    </div>

    <div class="nycalc-row">
      <label>FPS（フレーム指定時のみ）</label>
      <div class="nycalc-twoCol">
        <input class="nycalc-fps" type="number" min="1" step="0.001" value="24" />
        <div class="nycalc-muted nycalc-small">
          <span class="nycalc-mono">HH:MM:SS:FF</span> を使わないなら無視されます。<span class="nycalc-mono">23.976</span> を使う場合は <span class="nycalc-mono">23.976</span>。
        </div>
      </div>
    </div>

    <div class="nycalc-row">
      <label>補正（秒）</label>
      <div class="nycalc-twoCol">
        <input class="nycalc-adjust" type="number" step="0.001" value="0" />
        <div class="nycalc-muted nycalc-small">
          秒ズレを吸収するための微調整です（±秒）。
        </div>
      </div>
    </div>

    <div class="nycalc-btns">
      <button class="nycalc-btnCalc" type="button">計算する</button>
      <button class="nycalc-btnCopy" type="button">開始日時をコピー</button>
    </div>

    <div class="nycalc-out nycalc-output" aria-live="polite">
      <div class="nycalc-muted">まだ計算していません。</div>
    </div>
  </div>

  <script>
    (() => {
      "use strict";

      const widgets = document.querySelectorAll("[data-nycalc]");
      widgets.forEach((root) => {
        const elTarget   = root.querySelector(".nycalc-target");
        const elTimecode = root.querySelector(".nycalc-timecode");
        const elFps      = root.querySelector(".nycalc-fps");
        const elAdjust   = root.querySelector(".nycalc-adjust");
        const elOut      = root.querySelector(".nycalc-output");

        const btnCalc   = root.querySelector(".nycalc-btnCalc");
        const btnCopy   = root.querySelector(".nycalc-btnCopy");
        const btnNextNY = root.querySelector(".nycalc-btnNextNY");
        const btnNow    = root.querySelector(".nycalc-btnNow");

        const btnTcMinus = root.querySelector(".nycalc-tcMinus");
        const btnTcPlus  = root.querySelector(".nycalc-tcPlus");
        const btnTcReset = root.querySelector(".nycalc-tcReset");
        const elTcStep   = root.querySelector(".nycalc-tcStep");
        const tcQuickBtns = root.querySelectorAll(".nycalc-tcQuick");

        const DEFAULT_TIMECODE = (elTimecode.value || "02:07:28").trim();

        const state = { startDt: null, startText: null, targetDt: null, movieOffsetSec: null };

        const pad2 = (n) => String(n).padStart(2, "0");
        const pad3 = (n) => String(n).padStart(3, "0");
        const isFiniteNumber = (x) => typeof x === "number" && Number.isFinite(x);

        function parseLocalDateTime(value){
          if (!value) return null;
          const m = value.match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(?::(\d{2}))?$/);
          if (!m) return null;

          const y  = Number(m[1]);
          const mo = Number(m[2]) - 1;
          const d  = Number(m[3]);
          const hh = Number(m[4]);
          const mm = Number(m[5]);
          const ss = Number(m[6] ?? "0");

          const dt = new Date(y, mo, d, hh, mm, ss, 0);
          if (dt.getFullYear() !== y || dt.getMonth() !== mo || dt.getDate() !== d ||
              dt.getHours() !== hh || dt.getMinutes() !== mm || dt.getSeconds() !== ss) {
            return null;
          }
          return dt;
        }

        function formatLocalDateTime(dt){
          return `${dt.getFullYear()}/${pad2(dt.getMonth()+1)}/${pad2(dt.getDate())} ${pad2(dt.getHours())}:${pad2(dt.getMinutes())}:${pad2(dt.getSeconds())}`;
        }

        function toDateTimeLocalValue(dt){
          return `${dt.getFullYear()}-${pad2(dt.getMonth()+1)}-${pad2(dt.getDate())}T${pad2(dt.getHours())}:${pad2(dt.getMinutes())}:${pad2(dt.getSeconds())}`;
        }

        function parseTimecodeToSeconds(str, fps){
          if (!str) return NaN;
          const s = String(str).trim().replace(",", ".");
          if (!s) return NaN;

          let frames = null;
          let main = s;

          if (main.includes(";")) {
            const parts = main.split(";");
            if (parts.length !== 2) return NaN;
            main = parts[0].trim();
            frames = Number(parts[1].trim());
            if (!Number.isInteger(frames) || frames < 0) return NaN;
            if (!isFiniteNumber(fps) || fps <= 0) return NaN;
          } else {
            const seg = main.split(":").map(x => x.trim());
            if (seg.length === 4) {
              frames = Number(seg[3]);
              if (!Number.isInteger(frames) || frames < 0) return NaN;
              if (!isFiniteNumber(fps) || fps <= 0) return NaN;
              main = `${seg[0]}:${seg[1]}:${seg[2]}`;
            }
          }

          const parts = main.split(":").map(x => x.trim());
          if (parts.some(p => p === "")) return NaN;

          let hh = 0, mm = 0, ss = 0;

          if (parts.length === 1) {
            ss = Number(parts[0]);
          } else if (parts.length === 2) {
            mm = Number(parts[0]);
            ss = Number(parts[1]);
          } else if (parts.length === 3) {
            hh = Number(parts[0]);
            mm = Number(parts[1]);
            ss = Number(parts[2]);
          } else {
            return NaN;
          }

          if (![hh, mm, ss].every(isFiniteNumber)) return NaN;
          if (hh < 0 || mm < 0 || ss < 0) return NaN;

          let total = hh * 3600 + mm * 60 + ss;
          if (frames !== null) total += frames / fps;
          return total;
        }

        function formatSecondsToTimecode(seconds){
          if (!isFiniteNumber(seconds)) return "";
          let msTotal = Math.round(seconds * 1000);
          if (msTotal < 0) msTotal = 0;

          const wholeSec = Math.floor(msTotal / 1000);
          const ms = msTotal % 1000;

          const hh = Math.floor(wholeSec / 3600);
          const mm = Math.floor((wholeSec % 3600) / 60);
          const ss = wholeSec % 60;

          return (ms !== 0)
            ? `${hh}:${pad2(mm)}:${pad2(ss)}.${pad3(ms)}`
            : `${hh}:${pad2(mm)}:${pad2(ss)}`;
        }

        function msToHMS(ms){
          const sign = ms < 0 ? -1 : 1;
          const abs = Math.abs(ms);
          const totalSec = Math.floor(abs / 1000);
          const remMs = abs % 1000;
          const h = Math.floor(totalSec / 3600);
          const m = Math.floor((totalSec % 3600) / 60);
          const s = totalSec % 60;
          const prefix = sign < 0 ? "-" : "";
          return `${prefix}${h}:${pad2(m)}:${pad2(s)}.${pad3(remMs)}`;
        }

        function render(calcOnly = false){
          const targetDt = parseLocalDateTime(elTarget.value);
          const fps = Number(elFps.value);
          const adjustSec = Number(elAdjust.value);

          if (!targetDt) {
            state.startDt = null;
            elOut.innerHTML = `<div class="nycalc-warn">「合わせたい現実の日時」が不正です。</div>`;
            return null;
          }
          if (!isFiniteNumber(adjustSec)) {
            state.startDt = null;
            elOut.innerHTML = `<div class="nycalc-warn">「補正（秒）」が数値として解釈できません。</div>`;
            return null;
          }

          const tcSec = parseTimecodeToSeconds(elTimecode.value, fps);
          if (!isFiniteNumber(tcSec)) {
            state.startDt = null;
            elOut.innerHTML = `<div class="nycalc-warn">「映画のタイムコード」を解釈できません。例：02:07:28 / 02:07:28.500 / 02:07:28:12（FPS指定）</div>`;
            return null;
          }

          const movieOffsetSec = tcSec + adjustSec;
          const startMs = targetDt.getTime() - movieOffsetSec * 1000;
          const startDt = new Date(startMs);

          state.startDt = startDt;
          state.startText = formatLocalDateTime(startDt);
          state.targetDt = targetDt;
          state.movieOffsetSec = movieOffsetSec;

          if (!calcOnly) {
            elOut.innerHTML = `
              <div class="nycalc-resultMain">
                <div class="nycalc-resultLabel">再生開始すべき日時</div>
                <div class="nycalc-resultValue nycalc-mono">${state.startText}</div>
              </div>

              <div class="nycalc-resultMeta nycalc-small nycalc-muted">
                （合わせたい日時：<span class="nycalc-mono">${formatLocalDateTime(targetDt)}</span> ／ 映画オフセット：<span class="nycalc-mono">${movieOffsetSec.toFixed(3)} sec</span>）
              </div>

              <div class="nycalc-countdown nycalc-small"></div>

            `;
          }

          tickCountdown();
          return state;
        }

        function tickCountdown(){
          const countdownEl = elOut.querySelector(".nycalc-countdown");
          if (!countdownEl) return;
          if (!state.startDt) { countdownEl.textContent = ""; return; }

          const now = new Date();
          const delta = state.startDt.getTime() - now.getTime();
          if (delta >= 0) {
            countdownEl.innerHTML = `開始まであと <span class="nycalc-mono">${msToHMS(delta)}</span>（現在時刻基準）`;
            countdownEl.classList.remove("nycalc-warn");
          } else {
            countdownEl.innerHTML = `開始時刻はすでに <span class="nycalc-mono">${msToHMS(delta)}</span> 経過しています（現在時刻基準）`;
            countdownEl.classList.add("nycalc-warn");
          }
        }

        function setNextNewYear(){
          const now = new Date();
          const nextYear = now.getFullYear() + 1;
          const dt = new Date(nextYear, 0, 1, 0, 0, 0, 0);
          elTarget.value = toDateTimeLocalValue(dt);
          render(false);
        }

        function setNow(){
          const now = new Date();
          elTarget.value = toDateTimeLocalValue(now);
          render(false);
        }

        function getStepSeconds(){
          const v = Number(elTcStep.value);
          if (!isFiniteNumber(v) || v <= 0) return 1;
          return v;
        }

        function bumpTimecode(sign){
          const fps = Number(elFps.value);
          const curSec = parseTimecodeToSeconds(elTimecode.value, fps);
          if (!isFiniteNumber(curSec)) return;

          const step = getStepSeconds();
          const next = curSec + sign * step;

          elTimecode.value = formatSecondsToTimecode(next);
          render(false);
        }

        btnCalc.addEventListener("click", () => render(false));

        btnCopy.addEventListener("click", async () => {
          const res = render(false);
          if (!res || !res.startText) return;

          try {
            await navigator.clipboard.writeText(res.startText);
            elOut.insertAdjacentHTML("beforeend",
              `<div class="nycalc-small nycalc-muted" style="margin-top:6px;">コピーしました：<span class="nycalc-mono">${res.startText}</span></div>`
            );
          } catch {
            elOut.insertAdjacentHTML("beforeend",
              `<div class="nycalc-warn nycalc-small" style="margin-top:6px;">コピーできませんでした（ブラウザ権限等）。上の表示を手動でコピーしてください。</div>`
            );
          }
        });

        btnNextNY.addEventListener("click", setNextNewYear);
        btnNow.addEventListener("click", setNow);

        [elTarget, elTimecode, elFps, elAdjust].forEach(el => {
          el.addEventListener("input", () => render(false));
          el.addEventListener("change", () => render(false));
        });

        btnTcMinus.addEventListener("click", () => bumpTimecode(-1));
        btnTcPlus.addEventListener("click",  () => bumpTimecode(+1));
        btnTcReset.addEventListener("click", () => {
          elTimecode.value = DEFAULT_TIMECODE;
          render(false);
        });

        tcQuickBtns.forEach((b) => {
          b.addEventListener("click", () => {
            const s = Number(b.dataset.step);
            if (isFiniteNumber(s) && s > 0) {
              elTcStep.value = String(s);
              render(false);
            }
          });
        });

        setNextNewYear();
        setInterval(tickCountdown, 250);
      });
    })();
  </script>
</div>

]]></content:encoded>
					
					<wfw:commentRss>https://cgbeginner.net/countdown-generator/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2531</post-id>	</item>
		<item>
		<title>Blenderで「OpenGL 4.3 が必要」エラーでクラッシュする問題解決メモ</title>
		<link>https://cgbeginner.net/blender-opengl-error/</link>
					<comments>https://cgbeginner.net/blender-opengl-error/#respond</comments>
		
		<dc:creator><![CDATA[CGBeginner]]></dc:creator>
		<pubDate>Wed, 03 Dec 2025 19:01:29 +0000</pubDate>
				<category><![CDATA[Blender]]></category>
		<category><![CDATA[コンピュータ]]></category>
		<guid isPermaLink="false">https://cgbeginner.net/?p=2519</guid>

					<description><![CDATA[Windows 11 環境で RTX 5090 を 2 枚（デュアル構成）にしたところ、Blender でレンダリングを実行したタイミングで不定期にクラッシュしました。発生時には、 というメッセージが出て終了することがあ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Windows 11 環境で RTX 5090 を 2 枚（デュアル構成）にしたところ、Blender でレンダリングを実行したタイミングで不定期にクラッシュしました。発生時には、</p>



<ul class="wp-block-list">
<li>Blender &#8211; Unsupported Graphics Card Configuration</li>



<li><code>A graphics card and driver with support for OpenGL 4.3 or higher is required. Plugging all monitors into your primary graphics card might resolve this issue. Installing the latest driver for your graphics card could also help.</code></li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="419" height="206" src="https://cgbeginner.net/wp-content/uploads/2025/12/fde3bcb6a04b377d548c65b1b3bd4ea8.png" alt="" class="wp-image-2520" srcset="https://cgbeginner.net/wp-content/uploads/2025/12/fde3bcb6a04b377d548c65b1b3bd4ea8.png 419w, https://cgbeginner.net/wp-content/uploads/2025/12/fde3bcb6a04b377d548c65b1b3bd4ea8-300x147.png 300w" sizes="(max-width: 419px) 100vw, 419px" /></figure>



<p>というメッセージが出て終了することがありました（GPU 自体は当然 OpenGL 4.3 以上対応のはずなのに、です）。</p>



<p>イベントログ上では Blender 側が <code>ucrtbase.dll</code> で <code>0xc0000005</code>（アクセス違反）で落ちる記録（Application Error 1000 / WER 1001）が残ることがあり、また WER 側には <code>LiveKernelEvent</code>（WATCHDOG/141 など）が出ることもありました。一方で、典型的な TDR（Display 4101）や nvlddmkm 153 が常に出る、という形ではありませんでした。</p>



<p>この問題が厄介だったのは、<strong>再現性が安定しない</strong>点です。ある時は同じシーンで通り、再起動を挟むと同じ操作で落ちる、という挙動になりました。</p>



<p>以下、いろいろChatGPTと相談しながら試した記録を記事にしています。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-8" checked><label class="toc-title" for="toc-checkbox-8">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">環境の特徴</a></li><li><a href="#toc2" tabindex="0">切り分けで試したこと（うまくいかなかった／決定打にならなかったもの）</a><ol><li><a href="#toc3" tabindex="0">1) 片方ずつの GPU でレンダリング</a></li><li><a href="#toc4" tabindex="0">2) OCCT などで GPU 負荷テスト（PL 制限含む）</a></li><li><a href="#toc5" tabindex="0">3) Blender の設定・インストールを疑う（ポータブル ZIP / config 削除）</a></li><li><a href="#toc6" tabindex="0">4) CPU レンダリングでも同様に落ちることがある</a></li><li><a href="#toc7" tabindex="0">5) DDU → 最新 Studio Driver をオフラインでクリーンインストール</a></li><li><a href="#toc8" tabindex="0">6) iGPU を無効化</a></li></ol></li><li><a href="#toc9" tabindex="0">最終的に効いた対策（解決策）</a></li><li><a href="#toc10" tabindex="0">理屈</a><ol><li><a href="#toc11" tabindex="0">1) Blender は「UI/ビューポート＝OpenGL」で動いている</a></li><li><a href="#toc12" tabindex="0">2) デュアル GPU + 複数モニタでは「どの GPU が OpenGL を担当するか」が揺れます</a></li><li><a href="#toc13" tabindex="0">3) 「固定していないほうの GPU 接続モニタでも落ちない」理由</a></li></ol></li><li><a href="#toc14" tabindex="0">どちらの 5090 を指定するべきか</a></li><li><a href="#toc15" tabindex="0">これで CUDA / OptiX のレンダリングは 2 枚使えるのか</a></li><li><a href="#toc16" tabindex="0">グローバル固定のデメリット（起こり得ること）</a></li><li><a href="#toc17" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">環境の特徴</span></h2>



<p>今回のポイントは「デュアル GPU」だけではなく、<strong>モニタが複数枚で、両方の GPU に接続せざるを得ない構成</strong>だったことです。私の環境は6モニタなので、RTX 5090 は出力が 4 ポートのため物理的に全モニタを片方の GPU に集約することができません。</p>



<p>この前提があると、Windows と NVIDIA ドライバが「どちらの GPU で OpenGL コンテキストを作るか」を自動判定する場面で、意図しない選択が起きる余地が増えます。</p>



<h2 class="wp-block-heading"><span id="toc2">切り分けで試したこと（うまくいかなかった／決定打にならなかったもの）</span></h2>



<p>以下を試しました。</p>



<h3 class="wp-block-heading"><span id="toc3">1) 片方ずつの GPU でレンダリング</span></h3>



<p>Blender 側でデバイスを片方だけ有効にしてレンダリングし、さらに両方を有効にしてレンダリングも実施しました。両方を有効にした場合は、レンダリング時間が約半分（例：1分20秒→40秒程度）まで短縮し、<strong>計算自体は 2 枚使えている</strong>ことが確認できました。ここから「2 枚構成そのものが常に破綻する」という状況ではないと判断しました。</p>



<h3 class="wp-block-heading"><span id="toc4">2) OCCT などで GPU 負荷テスト（PL 制限含む）</span></h3>



<p>Afterburner で 2 枚とも Power Limit を 80% にした状態でも OCCT の 3D 負荷を継続でき、電力・温度・安定性の観点では致命的な兆候は見えませんでした。さらに、Blender のレンダリング時間が PL 80% と 100% で大差が出ないケースもあり、少なくとも「PL が原因で Blender が落ちる」という説明は成立しにくい状況でした。</p>



<h3 class="wp-block-heading"><span id="toc5">3) Blender の設定・インストールを疑う（ポータブル ZIP / config 削除）</span></h3>



<p>ポータブル版を使い、<code>C:\Users\&lt;User&gt;\AppData\Roaming\Blender Foundation\Blender</code> の設定を削除し、起動直後のデフォルトシーンでも試しました。しかし、それでも落ちる時は落ちました。したがって、<strong>特定アドオンや設定の破損だけが原因</strong>とも言い切れませんでした。</p>



<h3 class="wp-block-heading"><span id="toc6">4) CPU レンダリングでも同様に落ちることがある</span></h3>



<p>レンダリングを CPU に切り替えても落ちることがありました。ここが非常に重要で、これにより「CUDA/OptiX の計算部分だけの問題」ではなく、<strong>Blender が動作するための描画系（≒OpenGL 側）での問題</strong>を強く疑う方向に寄りました。</p>



<h3 class="wp-block-heading"><span id="toc7">5) DDU → 最新 Studio Driver をオフラインでクリーンインストール</span></h3>



<p>セーフモードで DDU を使い、LAN ケーブルを抜いてオフラインで Studio Driver を入れ直しました。一時的に改善したように見えましたが、再起動後に再発しました。つまり、これは「やる価値はあるが、今回の決定打ではなかった」という位置づけでした。</p>



<h3 class="wp-block-heading"><span id="toc8">6) iGPU を無効化</span></h3>



<p>iGPU（AMD Ryzen 内蔵 GPU）をデバイスマネージャで無効化し、再起動しましたが、問題は継続しました。よって今回の主因が iGPU の混在だと断定するのは難しい状態でした。</p>



<h2 class="wp-block-heading"><span id="toc9">最終的に効いた対策（解決策）</span></h2>



<p>NVIDIA コントロールパネルで、グローバル設定の <strong>「OpenGL レンダリング GPU （OpenGL rendering GPU）」</strong> を</p>



<ul class="wp-block-list">
<li><strong>Auto（自動）→ 特定の RTX 5090（メイン側）に固定</strong></li>
</ul>



<p>へ変更したところ、Blender のエラーが止まり、少なくとも同一条件での再現ができなくなりました。現状、これが最も説明力の高い「解決策」になりました。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="960" height="711" src="https://cgbeginner.net/wp-content/uploads/2025/12/0fe838e818f3b2bca509941fda78a583.png" alt="" class="wp-image-2521" srcset="https://cgbeginner.net/wp-content/uploads/2025/12/0fe838e818f3b2bca509941fda78a583.png 960w, https://cgbeginner.net/wp-content/uploads/2025/12/0fe838e818f3b2bca509941fda78a583-300x222.png 300w, https://cgbeginner.net/wp-content/uploads/2025/12/0fe838e818f3b2bca509941fda78a583-768x569.png 768w" sizes="(max-width: 960px) 100vw, 960px" /></figure>



<h2 class="wp-block-heading"><span id="toc10">理屈</span></h2>



<h3 class="wp-block-heading"><span id="toc11">1) Blender は「UI/ビューポート＝OpenGL」で動いている</span></h3>



<p>Blender は UI とビューポート描画を OpenGL で行います。したがって「レンダリングボタンを押した瞬間」に落ちたように見えても、その瞬間に OpenGL が関与する処理は十分にあり得ます。たとえば、レンダリング開始時には進捗 UI 更新、レンダー結果の表示領域の更新、描画コンテキストの再初期化、ウィンドウ移動・モニタ跨ぎに伴うコンテキスト再確立などが起こり得ます。</p>



<p>また、CPU レンダリングでも落ちることがあった点は、「計算（CUDA/OptiX/CPU）ではなく、表示系（OpenGL）起点のクラッシュ」が混ざっている説明と整合します。</p>



<h3 class="wp-block-heading"><span id="toc12">2) デュアル GPU + 複数モニタでは「どの GPU が OpenGL を担当するか」が揺れます</span></h3>



<p>モニタが複数で両方の GPU に接続されていると、アプリのウィンドウがどのモニタ上にあるか、OS がどのアダプタを優先として扱うか、ドライバの自動判定がどう働くか、という条件が絡みます。</p>



<p>この自動判定が不安定だったり、特定条件で誤った GPU を選ぶ（あるいは OpenGL コンテキスト作成が失敗する）と、アプリ側は「OpenGL 4.3 以上が必要」という“能力不足に見えるエラー”として落ちることがあります。実際には GPU の能力不足ではなく、<strong>OpenGL コンテキストが期待どおりに作れなかった</strong>ことが本質です。</p>



<p>そこで OpenGL rendering GPU を固定すると、OpenGL の担当 GPU がブレなくなり、コンテキスト作成・維持の条件が安定します。今回の改善はこの説明が最も自然です。</p>



<h3 class="wp-block-heading"><span id="toc13">3) 「固定していないほうの GPU 接続モニタでも落ちない」理由</span></h3>



<p>この挙動も矛盾ではありません。OpenGL rendering GPU を固定した場合、ウィンドウがどの GPU に接続されたモニタ上にあっても、OpenGL の実処理は指定 GPU で行われる（または少なくとも指定 GPU を優先）という形になります。そのため「非指定側モニタで操作したら必ず落ちる」ということにはなりません。</p>



<h2 class="wp-block-heading"><span id="toc14">どちらの 5090 を指定するべきか</span></h2>



<p>基本的には、次の方針が合理的です。</p>



<ul class="wp-block-list">
<li><strong>メインモニタが接続されている GPU（普段の UI を担当している側）を指定する</strong></li>



<li>もし OC 版と無印があり、さらに PCIe のリンク条件などが良い側が明確なら、その「条件が良い側」を指定する</li>
</ul>



<p>OpenGL は UI/ビューポートの体感にも関わるため、普段使いの滑らかさや安定性の観点では「メイン側に寄せる」判断が筋が通ります。</p>



<h2 class="wp-block-heading"><span id="toc15">これで CUDA / OptiX のレンダリングは 2 枚使えるのか</span></h2>



<p>使えます。OpenGL rendering GPU の設定は、主に <strong>OpenGL の描画担当</strong>を決める設定です。一方、Blender の CUDA / OptiX レンダリングは、Blender 側の「使用デバイス設定」で 2 枚とも有効にしていれば、基本的に両方を使います。</p>



<p>実際にタスクマネージャー上で 2 枚とも使用率が上がっている観測があるなら、「計算に使われている」という理解で問題ありません。</p>



<h2 class="wp-block-heading"><span id="toc16">グローバル固定のデメリット（起こり得ること）</span></h2>



<p>グローバル固定は運用が楽で、今回のように「Auto の揺れが原因」っぽいケースでは有効です。一方、理屈上のデメリットは次の通りです。</p>



<ul class="wp-block-list">
<li>OpenGL を使う他アプリでも、その指定 GPU に OpenGL が寄るため、用途によっては負荷が偏る可能性があります</li>



<li>ごく稀に、特定アプリが「表示している GPU と同じ GPU で OpenGL したい」前提で作られている場合、挙動が変わる可能性があります（この種の問題は一般には多くありませんが、可能性としては残ります）</li>
</ul>



<p>ただし、挙げられている主要アプリ（Premiere Pro / After Effects / Photoshop / DaVinci Resolve）は、実務上は DirectX/CUDA 側が中心で、OpenGL rendering GPU の固定が直撃するケースは多くありません。したがって、「まずグローバルで固定して安定を取る」という判断は現実的です。</p>



<p>もし将来、特定アプリだけ違和感が出た場合は、その時点で「グローバルは Auto に戻し、Blender（blender.exe）だけプログラム設定で固定する」という運用に切り替えると、影響範囲を最小化できます。</p>



<h2 class="wp-block-heading"><span id="toc17">まとめ</span></h2>



<p>今回の問題は、GPU 性能不足ではなく、<strong>デュアル GPU + 複数モニタ構成における OpenGL 担当 GPU の自動選択が不安定で、Blender の OpenGL コンテキストが破綻する瞬間があった</strong>、という整理が最も整合します。</p>



<p>DDU やドライバクリーンインストール、iGPU 無効化は「やるべき切り分け」ではありますが、決定打は <strong>NVIDIA コントロールパネルで OpenGL rendering GPU を固定</strong>することでした。これにより、Blender の UI/ビューポート（OpenGL）経路が安定し、レンダリング開始時のクラッシュが止まりました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cgbeginner.net/blender-opengl-error/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2519</post-id>	</item>
		<item>
		<title>UbuntuにCockpitをインストールしてVM環境構築</title>
		<link>https://cgbeginner.net/ubuntu-cockpit-vm/</link>
					<comments>https://cgbeginner.net/ubuntu-cockpit-vm/#respond</comments>
		
		<dc:creator><![CDATA[CGBeginner]]></dc:creator>
		<pubDate>Sun, 16 Nov 2025 15:23:36 +0000</pubDate>
				<category><![CDATA[コンピュータ]]></category>
		<guid isPermaLink="false">https://cgbeginner.net/?p=2510</guid>

					<description><![CDATA[目次 はじめに前提環境仮想化基盤（KVM / libvirt）と Cockpit の導入1. 仮想化スタックのインストール2. Cockpit と主要アドオンのインストール3. サービスの有効化4. libvirt グル [&#8230;]]]></description>
										<content:encoded><![CDATA[

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-10" checked><label class="toc-title" for="toc-checkbox-10">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">前提環境</a></li><li><a href="#toc3" tabindex="0">仮想化基盤（KVM / libvirt）と Cockpit の導入</a><ol><li><a href="#toc4" tabindex="0">1. 仮想化スタックのインストール</a></li><li><a href="#toc5" tabindex="0">2. Cockpit と主要アドオンのインストール</a></li><li><a href="#toc6" tabindex="0">3. サービスの有効化</a></li><li><a href="#toc7" tabindex="0">4. libvirt グループへの追加</a></li></ol></li><li><a href="#toc8" tabindex="0">Windows 11 ISO とストレージの整理</a><ol><li><a href="#toc9" tabindex="0">1. ISO 用ディレクトリを用意</a></li></ol></li><li><a href="#toc10" tabindex="0">Cockpit へのアクセス</a></li><li><a href="#toc11" tabindex="0">Windows 11 VM（columbia）の作成</a><ol><li><a href="#toc12" tabindex="0">1. 新規作成ウィザード</a></li></ol></li><li><a href="#toc13" tabindex="0">VM 設定のカスタマイズ（UEFI / TPM / デバイス）</a><ol><li><a href="#toc14" tabindex="0">2.1 ファームウェアを UEFI にする</a></li><li><a href="#toc15" tabindex="0">2.2 TPM 2.0（vTPM）の設定</a></li><li><a href="#toc16" tabindex="0">2.3 ディスクと NIC の設定方針</a></li><li><a href="#toc17" tabindex="0">2.4 Windows 11 ISO を CD-ROM として割り当て</a></li></ol></li><li><a href="#toc18" tabindex="0">Windows 11 のインストール</a><ol><li><a href="#toc19" tabindex="0">3.1 起動と「Press any key…」への対応</a></li><li><a href="#toc20" tabindex="0">3.2 インストーラの基本的な流れ</a></li><li><a href="#toc21" tabindex="0">3.3 パーティションの作成</a></li></ol></li><li><a href="#toc22" tabindex="0">インストール後の確認と仕上げ</a><ol><li><a href="#toc23" tabindex="0">4.1 TPM 2.0 が認識されているか</a></li><li><a href="#toc24" tabindex="0">4.2 ネットワーク</a></li><li><a href="#toc25" tabindex="0">4.3 ゲストツール（virtio ドライバ）の導入（任意）</a></li></ol></li><li><a href="#toc26" tabindex="0">libvirt System と User session の使い分けメモ</a></li><li><a href="#toc27" tabindex="0">おまけ：systemd-networkd-wait-online のエラーについて</a></li><li><a href="#toc28" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに</span></h2>



<p>自宅サーバ（Ubuntu）上で、Proxmox のような「全部入りハイパーバイザ」を入れずに、できるだけミニマルな構成で</p>



<ul class="wp-block-list">
<li>Web UI から VM を操作したい</li>



<li>Windows 11 をデスクトップ用途で使える VM として常用したい</li>
</ul>



<p>という目的で環境を構築したときの手順メモ。</p>



<p>ポイントは次の 3 つ。</p>



<ul class="wp-block-list">
<li>Ubuntu そのままの上に <strong>KVM + libvirt</strong> を載せる</li>



<li>管理用 Web UI として <strong>Cockpit（cockpit-machines）</strong> を使う</li>



<li>Windows 11 の要件を満たすために <strong>UEFI + vTPM 2.0</strong> をきちんと用意する</li>
</ul>



<p>この記事は、試行錯誤でハマった部分は省き、「未来の自分が見てすぐ再現できる」ことを狙って整理している。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc2">前提環境</span></h2>



<ul class="wp-block-list">
<li>ホスト OS：Ubuntu Server 24.04 LTS (noble)</li>



<li>仮想化支援：x86_64 CPU（KVM 対応 / VT-x / AMD-V 有効）</li>



<li>ネットワーク：<code>systemd-networkd</code> + netplan（NetworkManager には切り替えない前提）</li>



<li>目的の VM：
<ul class="wp-block-list">
<li>作業用 Windows 11（デスクトップ用途）</li>
</ul>
</li>
</ul>



<p>ここでは、作業用 Windows 11 VM（以降 <code>columbia</code>）を作るところまでを対象とする。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc3">仮想化基盤（KVM / libvirt）と Cockpit の導入</span></h2>



<h3 class="wp-block-heading"><span id="toc4">1. 仮想化スタックのインストール</span></h3>



<p>まずは KVM / libvirt / virt-install / OVMF / swtpm を入れる。</p>



<pre class="wp-block-code"><code>sudo apt update

# 仮想化基盤（KVM + libvirt）＋ UEFI(OVMF) ＋ vTPM（Windows 11 等向け）
sudo apt install -y \
  qemu-kvm libvirt-daemon-system libvirt-clients virtinst \
  ovmf swtpm swtpm-tools libtpms0
</code></pre>



<p>ポイント：</p>



<ul class="wp-block-list">
<li><code>qemu-kvm</code> を指定しているが、Ubuntu 24.04 では裏で <code>qemu-system-x86</code> が選択される。</li>



<li><code>ovmf</code> は UEFI ファームウェア（OVMF）を提供するパッケージ。</li>



<li><code>swtpm</code> + <code>libtpms0</code> は vTPM 2.0 のエミュレータ。Windows 11 の TPM 要件を満たすために必須。</li>
</ul>



<h3 class="wp-block-heading"><span id="toc5">2. Cockpit と主要アドオンのインストール</span></h3>



<p>Cockpit 本体と、VM 管理に必要なアドオンを <strong>backports</strong> から入れる。</p>



<pre class="wp-block-code"><code>. /etc/os-release

sudo apt install -y -t ${VERSION_CODENAME}-backports \
  cockpit cockpit-machines cockpit-storaged cockpit-networkmanager
</code></pre>



<ul class="wp-block-list">
<li><code>cockpit-machines</code> … VM 管理 UI（libvirt のフロントエンド）</li>



<li><code>cockpit-storaged</code> … ストレージ状態の確認・操作</li>



<li><code>cockpit-networkmanager</code> … NetworkManager を使う場合のネットワーク管理 UI<br>（今回は <code>systemd-networkd</code> 続投なので、編集機能はあまり使わず、主に状態確認に留める）</li>
</ul>



<h3 class="wp-block-heading"><span id="toc6">3. サービスの有効化</span></h3>



<p><code>libvirtd</code> は常駐、Cockpit はソケット起動にする。</p>



<pre class="wp-block-code"><code>sudo systemctl enable --now libvirtd cockpit.socket
</code></pre>



<p>ファイアウォールに UFW を使っている場合は 9090 番を開けておく。</p>



<pre class="wp-block-code"><code>sudo ufw allow 9090/tcp
</code></pre>



<h3 class="wp-block-heading"><span id="toc7">4. libvirt グループへの追加</span></h3>



<p>非 root で VM を扱えるように、自分のユーザーを <code>libvirt</code> グループへ。</p>



<pre class="wp-block-code"><code>sudo usermod -aG libvirt $USER
</code></pre>



<p>いったんログアウト／ログインし直し、<code>groups</code> で <code>libvirt</code> が含まれていることを確認する。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc8">Windows 11 ISO とストレージの整理</span></h2>



<h3 class="wp-block-heading"><span id="toc9">1. ISO 用ディレクトリを用意</span></h3>



<p><code>qemu:///system</code> の VM は <code>libvirt-qemu</code> ユーザーで動くため、通常ユーザーのホームディレクトリにある ISO はそのままでは読めない。<br>インストールメディアは libvirt 管理下のディレクトリに置くのが安全。</p>



<pre class="wp-block-code"><code>sudo mkdir -p /var/lib/libvirt/iso
</code></pre>



<p>ここに Windows 11 の ISO を配置する。例：</p>



<pre class="wp-block-code"><code># 手元の PC からサーバへコピーする例（IP は適宜変更）
scp Win11_24H2_Japanese_x64.iso \
    ctrluser@192.168.100.31:/var/lib/libvirt/iso/
    
sudo chown root:root /var/lib/libvirt/iso/Win11_24H2_Japanese_x64.iso
sudo chmod 644       /var/lib/libvirt/iso/Win11_24H2_Japanese_x64.iso
</code></pre>



<p>OS ディスク（qcow2）は、デフォルトの <code>/var/lib/libvirt/images</code> に作成する方針とする。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc10">Cockpit へのアクセス</span></h2>



<p>ブラウザから以下にアクセス。</p>



<ul class="wp-block-list">
<li><code>https://&lt;サーバIP&gt;:9090/</code> （例：<code>https://192.168.100.31:9090/</code>）</li>
</ul>



<p>自己署名証明書の警告は許可する。<br>Ubuntu のユーザー（例：<code>ctrluser</code>）でログインしておく。</p>



<p>左側メニューの「Virtual Machines（仮想マシン）」を開くと、libvirt の System インスタンス（<code>qemu:///system</code>）が見えるようになる。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc11">Windows 11 VM（columbia）の作成</span></h2>



<h3 class="wp-block-heading"><span id="toc12">1. 新規作成ウィザード</span></h3>



<p>Cockpit の「Virtual Machines」画面で「Create new virtual machine」をクリックし、以下のように設定する。</p>



<ul class="wp-block-list">
<li>Name：<code>columbia</code>（小文字で統一）</li>



<li>Connection：<strong>System</strong><br>（<code>qemu:///system</code>：サーバ側で常時管理される VM 群）</li>



<li>Installation source / Type：<br>→ <strong>Local install media (ISO image)</strong> のような「ローカルインストールメディア」系を選ぶ<br>（※「OS をダウンロード」は Windows が出てこないので使わない）</li>



<li>Operating system：
<ul class="wp-block-list">
<li><code>Windows 11</code> が候補に出ればそれを選択</li>



<li>出ない場合は <code>Windows 10</code> か <code>Generic Windows</code> など近いものを選んでおけばよい</li>
</ul>
</li>



<li>Disk：
<ul class="wp-block-list">
<li>Format：<code>qcow2</code>（デフォルト）</li>



<li>Size：<strong>128 GiB</strong>（論理サイズ。qcow2 なので実際には使用量に応じて増える）</li>
</ul>
</li>



<li>Memory：<strong>16 GiB</strong>（作業用の Windows として余裕を持たせる）</li>



<li>vCPU：詳細設定から <strong>4 vCPU</strong> にする</li>
</ul>



<p>重要：<br>ウィザードの最後で <strong>「Create and edit」(作成して編集する)</strong> を選び、<br>作成直後に詳細画面へ入れるようにしておく。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc13">VM 設定のカスタマイズ（UEFI / TPM / デバイス）</span></h2>



<h3 class="wp-block-heading"><span id="toc14">2.1 ファームウェアを UEFI にする</span></h3>



<p><code>columbia</code> の概要タブで、「Firmware」が <code>UEFI</code> になっていることを確認する。<br>もし <code>BIOS</code> になっていれば <code>UEFI</code> に変更する。</p>



<p>OVMF のエントリが複数ある場合は、可能なら Secure Boot 付きのものを選ぶ。</p>



<p>例：</p>



<ul class="wp-block-list">
<li><code>UEFI x86_64: /usr/share/OVMF/OVMF_CODE.secboot.fd ...</code></li>
</ul>



<p>が選べるならこれを使う。</p>



<h3 class="wp-block-heading"><span id="toc15">2.2 TPM 2.0（vTPM）の設定</span></h3>



<p><code>ovmf</code> + <code>swtpm</code> を入れておけば、libvirt は vTPM 2.0 を扱える。<br>Cockpit に TPM 追加 UI がない場合でも、libvirt の XML に直接書けばよい。</p>



<p>定義を編集：</p>



<pre class="wp-block-code"><code>sudo virsh edit columbia
</code></pre>



<p><code>&lt;devices&gt; ... &lt;/devices&gt;</code> ブロック内に、以下のような <code>&lt;tpm&gt;</code> ブロックがあることを確認する。無ければ追加する。</p>



<pre class="wp-block-code"><code>&lt;tpm model='tpm-crb'&gt;
  &lt;backend type='emulator' version='2.0'/&gt;
&lt;/tpm&gt;
</code></pre>



<ul class="wp-block-list">
<li><code>model='tpm-crb'</code> は TPM 2.0 向けのインターフェース</li>



<li><code>backend type='emulator' version='2.0'</code> で <code>swtpm</code> を使う vTPM 2.0 になる</li>
</ul>



<p>保存に成功すれば、その VM には TPM 2.0 デバイスが追加された状態になる。</p>



<h3 class="wp-block-heading"><span id="toc16">2.3 ディスクと NIC の設定方針</span></h3>



<p>初回インストールをスムーズに行うことを優先し、</p>



<ul class="wp-block-list">
<li>システムディスク：バス <code>sata</code> のまま</li>



<li>NIC：モデル <code>e1000e</code> のまま</li>
</ul>



<p>で進める。</p>



<p>どちらも Windows 標準ドライバで認識されるので、追加ドライバなしでインストーラが動く。</p>



<p>（後から virtio ドライバを入れてディスク/NIC を virtio 化することは可能。この記事ではそこまでは扱わない。）</p>



<h3 class="wp-block-heading"><span id="toc17">2.4 Windows 11 ISO を CD-ROM として割り当て</span></h3>



<p>Cockpit の <code>columbia</code> 詳細画面で、「Disks」タブから CD-ROM デバイスを確認・設定する。</p>



<ol class="wp-block-list">
<li>既にインストール元として ISO が設定されていれば、そのままでもよい。</li>



<li>設定されていない／パスが古い場合は、一度削除し、改めて追加する：
<ul class="wp-block-list">
<li>「Add disk」→ <code>CD-ROM</code> を選び、</li>



<li>Source ファイルとして<br><code>/var/lib/libvirt/iso/Win11_24H2_Japanese_x64.iso</code><br>を指定する。</li>
</ul>
</li>
</ol>



<p>これで、VM 起動時に DVD として Windows 11 インストーラがマウントされる。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc18">Windows 11 のインストール</span></h2>



<h3 class="wp-block-heading"><span id="toc19">3.1 起動と「Press any key…」への対応</span></h3>



<p><code>columbia</code> が <code>Shut off</code> 状態であることを確認し、Cockpit から「Install」または「Start」を押す。</p>



<ul class="wp-block-list">
<li>直後にコンソールタブ（グラフィカルコンソール）を開き、<br>コンソール内をクリックしてフォーカスを合わせておく。</li>



<li>起動直後、画面下部に <code>Press any key to boot from CD or DVD......</code> が一瞬表示されるので、<strong>すぐに Enter などを押す</strong>。</li>
</ul>



<p>ここでキー入力が間に合わないと DVD ブートがスキップされ、</p>



<pre class="wp-block-code"><code>BdsDxe: No bootable option or device was found.
</code></pre>



<p>等と表示されてしまう。<br>その場合は一度シャットダウンして再度起動し、今度はメッセージが出た瞬間に Enter を押す。</p>



<h3 class="wp-block-heading"><span id="toc20">3.2 インストーラの基本的な流れ</span></h3>



<p>あとは物理マシンと同じ流れでインストールする。</p>



<ol class="wp-block-list">
<li>言語・キーボードを選択 → 「次へ」→「今すぐインストール」</li>



<li>プロダクトキー入力画面
<ul class="wp-block-list">
<li>ライセンスキーがあればここで入力</li>



<li>後で入れる場合は「プロダクトキーがありません」を選択</li>
</ul>
</li>



<li>エディション選択（Pro / Home などライセンスに合わせたもの）</li>



<li>ライセンス条項に同意</li>



<li>インストールの種類<br>→ <strong>「カスタム: Windows のみをインストール（詳細設定）」</strong> を選ぶ</li>
</ol>



<h3 class="wp-block-heading"><span id="toc21">3.3 パーティションの作成</span></h3>



<p>「Windows をインストールする場所」画面では、ディスク 0 に「未割り当ての領域」として ~128GB が見えているはず。</p>



<ul class="wp-block-list">
<li>ここでは細かいことはせず、**未割り当ての領域を選択して「次へ」**でよい。<br>Windows が EFI システムパーティション・MSR・C: ドライブなどを自動で作ってくれる。</li>
</ul>



<p>その後は通常どおり、コピー → 再起動 → 初期設定（地域 / アカウント / プライバシーなど）を進めればよい。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc22">インストール後の確認と仕上げ</span></h2>



<h3 class="wp-block-heading"><span id="toc23">4.1 TPM 2.0 が認識されているか</span></h3>



<p>Windows 起動後、<code>Win + R</code> から <code>tpm.msc</code> を実行し、TPM 管理画面を開く。</p>



<ul class="wp-block-list">
<li>TPM のバージョンが <strong>2.0</strong> と表示されていれば OK。</li>
</ul>



<p>これで Windows 11 の TPM 要件は満たされている。</p>



<h3 class="wp-block-heading"><span id="toc24">4.2 ネットワーク</span></h3>



<ul class="wp-block-list">
<li>NIC を <code>e1000e</code> のままにしているので、特別なドライバを入れなくてもネットワークは動作しているはず。</li>



<li>ホスト側では libvirt の <code>default</code> ネットワーク（NAT）が使われる。<br>当面はこのままで問題ない。必要に応じて、後から Linux ブリッジを作り、VM を LAN 直結にする設計も検討できる。</li>
</ul>



<h3 class="wp-block-heading"><span id="toc25">4.3 ゲストツール（virtio ドライバ）の導入（任意）</span></h3>



<p>パフォーマンスを詰めたい場合は、別途 <code>virtio-win.iso</code> をダウンロードして</p>



<ul class="wp-block-list">
<li>2 枚目の CD-ROM として VM にマウント</li>



<li>ゲスト内で <code>virtio-win-guest-tools.exe</code> を実行</li>
</ul>



<p>することで、virtio 系のドライバをまとめて導入できる。<br>その後、ディスクや NIC を virtio 化していく、という流れが一般的だが、本記事の範囲外とする。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc26">libvirt System と User session の使い分けメモ</span></h2>



<p>Cockpit 上で VM を作る際、「Connection」として</p>



<ul class="wp-block-list">
<li>System（<code>qemu:///system</code>）</li>



<li>User session（<code>qemu:///session</code>）</li>
</ul>



<p>が選べるが、本記事のような <strong>サーバ上で常用する VM</strong> はすべて <strong>System</strong> に置くのが基本方針。</p>



<p>理由：</p>



<ul class="wp-block-list">
<li>サーバ再起動後に、System VM は簡単に自動起動・手動起動できる</li>



<li>CLI から <code>virsh start columbia</code> などで統一的に扱える</li>



<li>ブリッジや物理 NIC、vTPM などのリソース管理が System 側に集中する</li>
</ul>



<p>User session は「そのユーザーがログインしている間だけ動いていればよい一時 VM」向けと考える。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc27">おまけ：systemd-networkd-wait-online のエラーについて</span></h2>



<p>Cockpit の「Services」で</p>



<pre class="wp-block-code"><code>systemd-networkd-wait-online.service
Failed to start Wait for Network to be Configured.
Timeout occurred while waiting for network connectivity.
</code></pre>



<p>といったエラーが出ることがある。</p>



<p>これは</p>



<ul class="wp-block-list">
<li><code>systemd-networkd</code> が管理しているすべての NIC が「オンライン」になるまで待ったが、</li>



<li>ケーブルが抜けている NIC などがいて、いつまで経っても揃わないためタイムアウト</li>
</ul>



<p>しただけで、実際に使っている NIC（例：<code>enp1s0f0np0</code>）が正常に上がっているなら実害はほぼない。</p>



<p>気になる場合の対処案：</p>



<ol class="wp-block-list">
<li><strong>サービス自体を無効化してしまう</strong> <code>sudo systemctl disable --now systemd-networkd-wait-online.service</code> 多くの自宅サーバ用途では、これで問題になることは少ない。</li>



<li><strong>netplan で「必須ではない」NIC を optional にする</strong> netplan の YAML にて、使っていない NIC に <code>optional: true</code> を付ける。 <code>network: version: 2 renderer: networkd ethernets: enp4s0: dhcp4: true optional: true</code> その上で <code>sudo netplan generate sudo netplan apply</code> とすれば、その NIC が上がらなくても「オンライン」と判断される。</li>
</ol>



<p>このエラー自体は Windows 11 VM とは無関係なので、優先度は低い。「気になったら片付ける」程度の認識でよい。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc28">まとめ</span></h2>



<ul class="wp-block-list">
<li>Ubuntu 24.04 上に <strong>KVM + libvirt + Cockpit</strong> を載せるだけで、Proxmox 的な日常運用（起動・停止・コンソール・スナップショット）がかなり快適にこなせる。</li>



<li>Windows 11 VM を問題なく動かすためには、<br><strong>UEFI(OVMF) + vTPM 2.0（swtpm）</strong> をきちんと用意してからインストールするのがポイント。</li>



<li>ISO の置き場所は <code>/var/lib/libvirt/iso</code> など libvirt からアクセス可能なパスにまとめる。</li>



<li>VM 名は <code>columbia</code> のように小文字で統一し、System 接続（<code>qemu:///system</code>）側に揃えておくと、CLI や将来の DNS 管理などがやりやすい。</li>
</ul>



<p>この状態までできていれば、あとは同じ要領で</p>



<ul class="wp-block-list">
<li>バックグラウンド処理用 Windows 11</li>



<li>ダウンロード専用 Ubuntu VM</li>
</ul>



<p>なども追加し、用途ごとに VM を分離していくことができる。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cgbeginner.net/ubuntu-cockpit-vm/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2510</post-id>	</item>
		<item>
		<title>USBのWebカメラの映像をRTSP配信する（Raspberry Pi）</title>
		<link>https://cgbeginner.net/usbcam-rtsp/</link>
					<comments>https://cgbeginner.net/usbcam-rtsp/#respond</comments>
		
		<dc:creator><![CDATA[CGBeginner]]></dc:creator>
		<pubDate>Thu, 30 Oct 2025 16:08:40 +0000</pubDate>
				<category><![CDATA[コンピュータ]]></category>
		<guid isPermaLink="false">https://cgbeginner.net/?p=2499</guid>

					<description><![CDATA[USB 接続の UVC カメラ（MJPEG を出力）を Raspberry Pi 4 で取り込み、V4L2 M2M ハードウェア H.264 でエンコードした映像を MediaMTX（旧 rtsp-simple-serv [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>USB 接続の UVC カメラ（MJPEG を出力）を Raspberry Pi 4 で取り込み、V4L2 M2M ハードウェア H.264 でエンコードした映像を MediaMTX（旧 rtsp-simple-server）で RTSP 配信する方法のメモ。</p>



<p>※自分用メモなので非常に雑ですので役に立つ方のみ自身の責任の上で参考にしてください。</p>



<p>使用するUSBカメラ</p>



<p>バッファロー BSW505MBK</p>




<a rel="noopener" href="https://amzn.to/4nthCC8" title="&#12496;&#12483;&#12501;&#12449;&#12525;&#12540; BSW505MBK WEB&#12459;&#12513;&#12521; 1080P &#12501;&#12523;HD 200&#19975;&#30011;&#32032;" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Famzn.to%2F4nthCC8?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">&#12496;&#12483;&#12501;&#12449;&#12525;&#12540; BSW505MBK WEB&#12459;&#12513;&#12521; 1080P &#12501;&#12523;HD 200&#19975;&#30011;&#32032;</div><div class="blogcard-snippet external-blogcard-snippet">Amazon.co.jp: バッファロー WEBカメラ 1080P フルHD 30fps 200万画素 広角約120° Zoom/Slack/Microsoft Teamsメーカー動作確認済 Windows/Mac対応 プライバシーシャッタ...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://amzn.to/4nthCC8" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">amzn.to</div></div></div></div></a>



<p>このカメラは、MotionJPEGで出力されるのですが、H264で配信したいので、エンコードもしつつ配信します。Raspberry Pi 4にはハードウェアエンコーダーがあるのでそれを使います。</p>



<pre class="wp-block-code"><code># カメラの確認
v4l2-ctl --list-devices
v4l2-ctl -d /dev/video0 --list-formats-ext</code></pre>



<p>FFmpegインストール</p>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install -y ffmpeg v4l-utils</code></pre>



<p>私の例</p>



<div class="wp-block-cocoon-blocks-toggle-box-1 toggle-wrap toggle-box block-box not-nested-style cocoon-block-toggle"><input id="toggle-checkbox-202510310109130" class="toggle-checkbox" type="checkbox"/><label class="toggle-button" for="toggle-checkbox-202510310109130">アコーディオン見出し</label><div class="toggle-content">
<pre class="wp-block-code"><code>ctrluser@metis:~ $ v4l2-ctl --list-devices
bcm2835-codec-decode (platform:bcm2835-codec):
        /dev/video10
        /dev/video11
        /dev/video12
        /dev/video18
        /dev/video31

bcm2835-isp (platform:bcm2835-isp):
        /dev/video13
        /dev/video14
        /dev/video15
        /dev/video16
        /dev/video20
        /dev/video21
        /dev/video22
        /dev/video23
        /dev/media0
        /dev/media2

rpi-hevc-dec (platform:rpi-hevc-dec):
        /dev/video19
        /dev/media1

USB 2.0 Camera: USB Camera (usb-0000:01:00.0-1.3):
        /dev/video0
        /dev/video1
        /dev/media4

bcm2835-codec (vchiq:bcm2835-codec):
        /dev/media3

ctrluser@metis:~ $ v4l2-ctl -d /dev/video0 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
        Type: Video Capture

        &#91;0]: 'MJPG' (Motion-JPEG, compressed)
                Size: Discrete 1920x1080
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 1280x1024
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 1280x960
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 1280x720
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 1280x480
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 848x480
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 800x600
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 640x480
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 640x400
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 352x288
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 320x240
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 176x144
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 160x120
                        Interval: Discrete 0.033s (30.000 fps)
        &#91;1]: 'YUYV' (YUYV 4:2:2)
                Size: Discrete 1920x1080
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 1280x1024
                        Interval: Discrete 0.200s (5.000 fps)
                Size: Discrete 1280x960
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 1280x720
                        Interval: Discrete 0.100s (10.000 fps)
                Size: Discrete 1280x480
                        Interval: Discrete 0.067s (15.000 fps)
                Size: Discrete 848x480
                        Interval: Discrete 0.050s (20.000 fps)
                Size: Discrete 800x600
                        Interval: Discrete 0.050s (20.000 fps)
                Size: Discrete 640x480
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 640x400
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 352x288
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 320x240
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 176x144
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 160x120
                        Interval: Discrete 0.033s (30.000 fps)
ctrluser@metis:~ $ ffmpeg -hide_banner -encoders | grep v4l2m2m
 V..... h263_v4l2m2m         V4L2 mem2mem H.263 encoder wrapper (codec h263)
 V..... h264_v4l2m2m         V4L2 mem2mem H.264 encoder wrapper (codec h264)
 V..... hevc_v4l2m2m         V4L2 mem2mem HEVC encoder wrapper (codec hevc)
 V..... mpeg4_v4l2m2m        V4L2 mem2mem MPEG4 encoder wrapper (codec mpeg4)
 V..... vp8_v4l2m2m          V4L2 mem2mem VP8 encoder wrapper (codec vp8)
ctrluser@metis:~ $</code></pre>
</div></div>



<p>MediaMTXインストール</p>



<pre class="wp-block-code"><code>wget https://github.com/bluenviron/mediamtx/releases/download/v1.15.3/mediamtx_v1.15.3_linux_arm64.tar.gz
wget https://github.com/bluenviron/mediamtx/releases/download/v1.15.3/checksums.sha256

# チェックサム確認（行が 'OK' になればOK）
grep mediamtx_v1.15.3_linux_arm64.tar.gz checksums.sha256 | sha256sum --check -

tar xzf mediamtx_v1.15.3_linux_arm64.tar.gz
sudo mv mediamtx /usr/local/bin/</code></pre>



<p>MediaMTXの設定</p>



<pre class="wp-block-code"><code>sudo vi /usr/local/bin/mediamtx.yml</code></pre>



<pre class="wp-block-code"><code>paths:
  cam:
    runOnInit: &gt;
      ffmpeg
      -f v4l2 -thread_queue_size 1024
      -input_format mjpeg -framerate 30 -video_size 1920x1080
      -fflags +discardcorrupt
      -i /dev/video0
      -f alsa -thread_queue_size 1024 -ar 48000 -ac 1
      -i plughw:3,0
      -filter:v "scale=in_range=pc:out_range=tv,format=yuv420p,drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf:text='%Y-%m-%d %H\:%M\:%S':expansion=strftime:x=10:y=10:fontsize=26:fontcolor=white:box=1:boxcolor=0x00000088:boxborderw=10"
      -c:v h264_v4l2m2m -b:v 4M -maxrate 4M -bufsize 8M -g 60
      -c:a aac -b:a 128k -ar 48000 -ac 1
      -map 0:v:0 -map 1:a:0
      -max_interleave_delta 0
      -f rtsp -rtsp_transport tcp
      rtsp://127.0.0.1:$RTSP_PORT/$MTX_PATH
    runOnInitRestart: yes</code></pre>



<h3 class="wp-block-heading">パイプラインの要点</h3>



<ul class="wp-block-list">
<li><strong>入力</strong>：<code>v4l2</code> で <code>/dev/video0</code> を <strong>MJPEG 1080p/30</strong> で取得。</li>



<li><strong>色・画素フォーマットの正規化</strong>：<code>scale=in_range=pc:out_range=tv,format=yuv420p</code>。
<ul class="wp-block-list">
<li>MJPEG はフルレンジ（PC レンジ, 4:2:2）になりがちなので、TV レンジの <code>yuv420p</code> に確実に整えます。</li>
</ul>
</li>



<li><strong>タイムスタンプ焼き込み</strong>：<code>drawtext</code> を <code>expansion=strftime</code> で使用。
<ul class="wp-block-list">
<li><code>text='%Y-%m-%d %H\:%M\:%S'</code> … ローカル時刻を <code>YYYY-MM-DD HH:MM:SS</code> で描画。</li>



<li><code>box=1:boxcolor=0x00000088:boxborderw=10</code> … 白文字に半透明黒ボックス＋<strong>10px の余白（padding）</strong>。</li>



<li>フォントは <code>DejaVuSansMono</code> を <code>fontfile=</code> で明示（<code>sudo apt install -y fonts-dejavu-core</code> で導入）。</li>
</ul>
</li>



<li><strong>エンコード</strong>：<code>h264_v4l2m2m</code>（HW H.264）。目安ビットレート 4 Mbps、GOP 60（30fps で約 2 秒）。</li>



<li><strong>発行</strong>：Pi 内の MediaMTX に <strong>RTSP/TCP でローカル発行</strong>。</li>



<li><strong>配信</strong>：クライアントは <code>rtsp://&lt;PiのIP>:8554/cam</code> へ接続。</li>
</ul>



<h3 class="wp-block-heading">systemd ユニット</h3>



<p>MediaMTX 本体と設定ファイルは以下の配置を前提とします。</p>



<ul class="wp-block-list">
<li>バイナリ：<code>/usr/local/bin/mediamtx</code></li>



<li>設定：<code>/usr/local/bin/mediamtx.yml</code></li>
</ul>



<p><code>/etc/systemd/system/mediamtx.service</code>：</p>



<pre class="wp-block-code"><code>&#91;Unit]
Description=MediaMTX RTSP server
Wants=network.target


&#91;Service]
ExecStart=/usr/local/bin/mediamtx /usr/local/bin/mediamtx.yml
Restart=always
RestartSec=3


&#91;Install]
WantedBy=multi-user.target</code></pre>



<p>有効化と起動：</p>



<pre class="wp-block-code"><code>sudo systemctl daemon-reload</code></pre>



<pre class="wp-block-code"><code>sudo systemctl enable --now mediamtx</code></pre>



<p>ログ監視は</p>



<pre class="wp-block-code"><code>journalctl -u mediamtx -f</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://cgbeginner.net/usbcam-rtsp/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2499</post-id>	</item>
		<item>
		<title>UbuntuにDockerをインストール</title>
		<link>https://cgbeginner.net/ubuntu-docker/</link>
					<comments>https://cgbeginner.net/ubuntu-docker/#respond</comments>
		
		<dc:creator><![CDATA[CGBeginner]]></dc:creator>
		<pubDate>Sat, 19 Jul 2025 05:52:06 +0000</pubDate>
				<category><![CDATA[コンピュータ]]></category>
		<guid isPermaLink="false">https://cgbeginner.net/?p=2474</guid>

					<description><![CDATA[Dockerのインストール方法のメモです。 ちなみに、合わせてDocker composeと、Docker buildxをインストールしてます。 Dockerクライアントがデーモンを操作するためには、sudoコマンドを使 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Dockerのインストール方法のメモです。</p>



<pre class="wp-block-code"><code>sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb &#91;arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null
cat /etc/apt/sources.list.d/docker.list
sudo apt-get update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin</code></pre>



<p>ちなみに、合わせてDocker composeと、Docker buildxをインストールしてます。</p>



<p>Dockerクライアントがデーモンを操作するためには、sudoコマンドを使って管理者権限を取得するか、dockerグループに所属する必要があります。dockerグループに所属しておけば、sudoなしにコンテナの生成や操作ができますので何かと便利です。このdockerグループはdocker-engineインストール時に自動的に作成されていますので、あとはユーザーをグループに追加してログインしなおすだけです。</p>



<p>今操作しているユーザをdockerグループに加えることで、dockerコマンドをsudoなしで実行できるように権限付与しておきます。</p>



<pre class="wp-block-code"><code>sudo usermod -aG docker $USER</code></pre>



<p>次回ログインから有効になるので、適宜再ログインしましょう。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cgbeginner.net/ubuntu-docker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2474</post-id>	</item>
		<item>
		<title>Chrome系ブラウザで動画が異常に明るくなるバグの対処法（vp_auto_hdr）</title>
		<link>https://cgbeginner.net/chrome-disable_vp_auto_hdr/</link>
					<comments>https://cgbeginner.net/chrome-disable_vp_auto_hdr/#respond</comments>
		
		<dc:creator><![CDATA[CGBeginner]]></dc:creator>
		<pubDate>Wed, 02 Apr 2025 17:52:10 +0000</pubDate>
				<category><![CDATA[コンピュータ]]></category>
		<guid isPermaLink="false">https://cgbeginner.net/?p=2430</guid>

					<description><![CDATA[Windows11環境でHDRモニターを使っているとき、ブラウザで動画再生すると、たまに動画の色がおかしくなり（コントラストが高い状態になり）、めちゃくちゃ明るくまぶしくなってしまうという症状がときたま起こります。Goo [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><span class="marker">Windows11環境でHDRモニターを使っているとき、<strong>ブラウザで動画再生すると、たまに動画の色がおかしくなり（コントラストが高い状態になり）、<span class="bold-red">めちゃくちゃ明るくまぶしくなってしまう</span></strong></span>という症状がときたま起こります。<br>Google Chromeのみならず、どうやらChromium系だと起こるようで、Edge、Braveなどでもこの現象を確認しています。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-16" checked><label class="toc-title" for="toc-checkbox-16">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">発生事象</a></li><li><a href="#toc2" tabindex="0">原因と解決策</a></li><li><a href="#toc3" tabindex="0">余談</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">発生事象</span></h2>



<p>同じ症状になっている人が下記のフォーラムなどで見られます。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://cgbeginner.net/wp-content/uploads/2025/04/vp_auto_hdr-1024x576.jpg" alt="" class="wp-image-2436" srcset="https://cgbeginner.net/wp-content/uploads/2025/04/vp_auto_hdr-1024x576.jpg 1024w, https://cgbeginner.net/wp-content/uploads/2025/04/vp_auto_hdr-300x169.jpg 300w, https://cgbeginner.net/wp-content/uploads/2025/04/vp_auto_hdr-768x432.jpg 768w, https://cgbeginner.net/wp-content/uploads/2025/04/vp_auto_hdr-1536x864.jpg 1536w, https://cgbeginner.net/wp-content/uploads/2025/04/vp_auto_hdr-120x68.jpg 120w, https://cgbeginner.net/wp-content/uploads/2025/04/vp_auto_hdr-160x90.jpg 160w, https://cgbeginner.net/wp-content/uploads/2025/04/vp_auto_hdr-320x180.jpg 320w, https://cgbeginner.net/wp-content/uploads/2025/04/vp_auto_hdr.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>上記サイトから引用した画像を並べたものです。右側が異常時で、色彩がおかしくなっています。人物の顔が顕著ですね。また、画像からは伝わりませんが、HDRディスプレイでは輝度も異常なので、ものすごく明るく表示されています。</p>



<p>僕は1000nitsという高輝度HDRディスプレイを使っているせいで、尋常でなくまぶしくなります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>ちなみに…私はINNOCNというメーカーのディスプレイを使っています。HDR1000かつMiniLEDという驚異的スペックを持っているのに、安いというコスパ最強モニタです。</p>




<a rel="noopener" href="https://amzn.to/4ixfPuW" title="Amazon.co.jp: INNOCN 24.5&#12452;&#12531;&#12481; 240Hz WQHD&#12514;&#12491;&#12479;&#12540; QD-MiniLED &#12466;&#12540;&#12511;&#12531;&#12464;&#12514;&#12491;&#12479;&#12540; 1440p &#37327;&#23376;&#12489;&#12483;&#12488; &#12466;&#12540;&#12511;&#12531;&#12464;&#12487;&#12451;&#12473;&#12503;&#12524;&#12452; HDR1000 IPS&#38750;&#20809;&#27810; HDMI 2.1/DisplayPort 1.4/&#12473;&#12500;&#12540;&#12459;&#12540; &#39640;&#12373;&#35519;&#25972;&#21487;&#33021; &#20809;&#12475;&#12531;&#12469;&#12540;&#25645;&#36617;&#65288;&#28961;&#36637;&#28857;&#20445;&#35388;&#23550;&#24540;&#65289;25M2S : &#12497;&#12477;&#12467;&#12531;&#12539;&#21608;&#36794;&#27231;&#22120;" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Famzn.to%2F4ixfPuW?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Amazon.co.jp: INNOCN 24.5&#12452;&#12531;&#12481; 240Hz WQHD&#12514;&#12491;&#12479;&#12540; QD-MiniLED &#12466;&#12540;&#12511;&#12531;&#12464;&#12514;&#12491;&#12479;&#12540; 1440p &#37327;&#23376;&#12489;&#12483;&#12488; &#12466;&#12540;&#12511;&#12531;&#12464;&#12487;&#12451;&#12473;&#12503;&#12524;&#12452; HDR1000 IPS&#38750;&#20809;&#27810; HDMI 2.1/DisplayPort 1.4/&#12473;&#12500;&#12540;&#12459;&#12540; &#39640;&#12373;&#35519;&#25972;&#21487;&#33021; &#20809;&#12475;&#12531;&#12469;&#12540;&#25645;&#36617;&#65288;&#28961;&#36637;&#28857;&#20445;&#35388;&#23550;&#24540;&#65289;25M2S : &#12497;&#12477;&#12467;&#12531;&#12539;&#21608;&#36794;&#27231;&#22120;</div><div class="blogcard-snippet external-blogcard-snippet">Amazon.co.jp: INNOCN 24.5インチ 240Hz WQHDモニター QD-MiniLED ゲーミングモニター 1440p 量子ドット ゲーミングディスプレイ HDR1000 IPS非光沢 HDMI 2.1/Display...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://amzn.to/4ixfPuW" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">amzn.to</div></div></div></div></a>



<p>NNOCN 24.5インチ 240Hz WQHDモニター QD-MiniLED ゲーミングモニター 1440p 量子ドット ゲーミングディスプレイ HDR1000 IPS非光沢 HDMI 2.1/DisplayPort 1.4/スピーカー 高さ調整可能 光センサー搭載（無輝点保証対応）25M2S</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><strong>SDR YouTube Videos oversaturated with Windows in HDR mode</strong></p>




<a rel="noopener" href="https://answers.microsoft.com/en-us/windows/forum/all/sdr-youtube-videos-oversaturated-with-windows-in/bb20dd08-83ff-439a-840a-7e754515e042" title="SDR YouTube Videos oversaturated with Windows in HDR mode - Microsoft Q&amp;A" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://cgbeginner.net/wp-content/uploads/cocoon-resources/blog-card-cache/62becbf9e66edbd7a674a2191e28faef.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">SDR YouTube Videos oversaturated with Windows in HDR mode - Microsoft Q&A</div><div class="blogcard-snippet external-blogcard-snippet">SDR videos frequently (maybe always now, but wasn&#039;t always the case a while ago) appear wildly oversaturated to the poin...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://answers.microsoft.com/en-us/windows/forum/all/sdr-youtube-videos-oversaturated-with-windows-in/bb20dd08-83ff-439a-840a-7e754515e042" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">answers.microsoft.com</div></div></div></div></a>



<p><strong>SDR Videos on YT are oversaturated when Windows HDR is enabled</strong></p>




<a rel="noopener" href="https://issues.chromium.org/issues/40073950" title="Chromium" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fissues.chromium.org%2Fissues%2F40073950?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Chromium</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://issues.chromium.org/issues/40073950" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">issues.chromium.org</div></div></div></div></a>



<h2 class="wp-block-heading"><span id="toc2">原因と解決策</span></h2>



<p><span class="marker">「vp_auto_hdr」というAutoHDRのGPU支援機能が引き起こすChromiumのバグ</span>だそう。Youtube, Xの動画, AbemaTVなど、複数サイトで見られたので、特定サイトの不具合ではなく、そういう意味でもブラウザ側のバグであろうことが絞り込めます。ちなみにFirefoxでは起きませんでした。</p>



<p>Chromiumのデベロッパーサイトによると、もう修正されたらしいのですが、私の環境では結局直っていません。なので解決策としては、<strong>「vp_auto_hdr」という機能を無効にする</strong>ということになります。方法は、Chromeを起動する際に、<code>「--disable_vp_auto_hdr」</code>という引数をつけるというものです。つまり、</p>



<pre class="wp-block-code"><code>"C:\Program Files\Google\Chrome\Application\chrome.exe" --disable_vp_auto_hdr</code></pre>



<p>というような感じです。ショートカットも同じように修正すればOKです。タスクバーにピン止めしているなら、いったんピン止め解除し、上記に修正したショートカットを右クリックしてタスクバーにピン止めしてください。（まず、右クリックメニューのスタートにピン止めをしてから、スタートメニュー側で右クリックして、タスクバーにピン止めする）Chrome以外のEdgeやBraveなどChromium系も同じです。</p>



<p>設定できていたら、ChromeのURL欄に「chrome://gpu/」としてアクセス（Edgeならedge://gpu 、Braveなら brave://gpu）して、Driver Bug Workaroundsに「disable_vp_auto_hdr」の記載があればOKです。</p>



<p>ちなみにこの記事は過去Xでポストしたときのまとめ記事です。</p>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="ja" dir="ltr">Windows11に更新して、ChromeでYoutubeを見たら、SDR動画にも関わらず動画部分だけ輝度が異常になって再生されるようになった<br>1000nitsのHDRディスプレイで見るとめちゃくちゃまぶしい<br>いろいろみたところChromiumのバグっぽいけどだいぶ前に修正されたらしいし、これはなんなんだ<br><br>同じ症状…</p>&mdash; たてはま / CGBeginner @趣味独学映像クリエイター (@cgbeginner) <a href="https://twitter.com/cgbeginner/status/1837367765306593717?ref_src=twsrc%5Etfw">September 21, 2024</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<p>でも、上記対策をしていても結局再発することが、まれにありました。再現方法がよくわからないですが、たくさんタブを開いて、たくさんウィンドウを開いているときに再現しがちな感覚です。そういう時はいったんブラウザを全部閉じて再度開くと治りがちです。</p>



<p>追記：これも経験則的な解決策ですが、色がおかしくなってしまったタブを別ウィンドウに分離して、そのタブだけ閉じ、別タブでもう一回開くと治りがちです</p>



<p>そういった意味で、<strong>最強の根本的対策として、「WindowsのHDR機能そのものをオフにしてしまう」</strong>というものもとりえます。もちろん、それによりHDRの恩恵もすべてなくなるので、トレードオフということで。</p>



<h2 class="wp-block-heading"><span id="toc3">余談</span></h2>



<p>もしかしたら、ディスプレイドライバーも絡むバグなのかもしれません。ちなみに私はNVIDIA RTX3090とRTX3080の二枚刺しという少々特殊環境なのも理由なのかも。（追記：今はRTX5090とRTX3090の二枚刺しですが引き続き発生しています…）NVIDIAドライバーのバージョン変えたりも対策としてありなのかも。</p>



<p>下記、Geforceドライバーについて議論してるフォーラムで、なんか近い話がされていたのでメモ</p>




<a rel="noopener" href="https://www.guru3d.com/publish/comments/geforce-54584-whql-driver-download/page-5" title="Just a moment..." class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fwww.guru3d.com%2Fpublish%2Fcomments%2Fgeforce-54584-whql-driver-download%2Fpage-5?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Just a moment...</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.guru3d.com/publish/comments/geforce-54584-whql-driver-download/page-5" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.guru3d.com</div></div></div></div></a>
]]></content:encoded>
					
					<wfw:commentRss>https://cgbeginner.net/chrome-disable_vp_auto_hdr/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2430</post-id>	</item>
		<item>
		<title>WindowsにTelegrafをインストールする</title>
		<link>https://cgbeginner.net/windows-telegraf/</link>
					<comments>https://cgbeginner.net/windows-telegraf/#respond</comments>
		
		<dc:creator><![CDATA[CGBeginner]]></dc:creator>
		<pubDate>Wed, 26 Feb 2025 13:50:13 +0000</pubDate>
				<category><![CDATA[コンピュータ]]></category>
		<guid isPermaLink="false">https://cgbeginner.net/?p=2404</guid>

					<description><![CDATA[InfluxDBにデータを保存するエージェント（エクスポーター）のTelegrafをWindowsにインストールして、WindowsPCのメトリクスを収集する手順をメモします。 注意：このメモはほぼ自分用の備忘録を兼ねて [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>InfluxDBにデータを保存するエージェント（エクスポーター）のTelegrafをWindowsにインストールして、WindowsPCのメトリクスを収集する手順をメモします。</p>



<p>注意：このメモはほぼ自分用の備忘録を兼ねていますので記載が足らなかったり間違っていることがあります。情報を参考にする際はご自身の責任でお願いいたします。</p>



<p>インストール方法は、公式のドキュメントやブログやGitHubに点在していて、<strong>記載が微妙に違っています。バージョンによってコマンドやパスが違っているので注意です。</strong></p>



<p>こんなドキュメントや、</p>




<a rel="noopener" href="https://www.influxdata.com/blog/using-telegraf-on-windows" title="Using Telegraf on Windows | Blog | InfluxData" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fwww.influxdata.com%2Fblog%2Fusing-telegraf-on-windows?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Using Telegraf on Windows | Blog | InfluxData</div><div class="blogcard-snippet external-blogcard-snippet">A step-by-step guide for setting up Telegraf on Windows, including how to securely configure it with credentials for pus...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.influxdata.com/blog/using-telegraf-on-windows" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.influxdata.com</div></div></div></div></a>



<p>こんなドキュメントがありますが、</p>




<a rel="noopener" href="https://docs.influxdata.com/telegraf/v1/install/?t=Windows" title="Install Telegraf | Telegraf Documentation" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fdocs.influxdata.com%2Ftelegraf%2Fv1%2Finstall%2F%3Ft%3DWindows?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Install Telegraf | Telegraf Documentation</div><div class="blogcard-snippet external-blogcard-snippet">Learn how to install, configure, and start Telegraf on your system.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://docs.influxdata.com/telegraf/v1/install/?t=Windows" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">docs.influxdata.com</div></div></div></div></a>



<p>上記の記載は古いです。下記のGitHubを信用してください。</p>




<a rel="noopener" href="https://github.com/influxdata/telegraf/blob/master/docs/WINDOWS_SERVICE.md" title="telegraf/docs/WINDOWS_SERVICE.md at master ?? influxdata/telegraf" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://cgbeginner.net/wp-content/uploads/cocoon-resources/blog-card-cache/3e9388da25b583cc89e1d9aa0320a427." alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">telegraf/docs/WINDOWS_SERVICE.md at master ?? influxdata/telegraf</div><div class="blogcard-snippet external-blogcard-snippet">Agent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data. - influxdata/telegra...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://github.com/influxdata/telegraf/blob/master/docs/WINDOWS_SERVICE.md" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">github.com</div></div></div></div></a>



<h3 class="wp-block-heading">Telegrafのインストール</h3>



<p>配布先</p>




<a rel="noopener" href="https://www.influxdata.com/downloads" title="InfluxData Downloads" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fwww.influxdata.com%2Fdownloads?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">InfluxData Downloads</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.influxdata.com/downloads" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.influxdata.com</div></div></div></div></a>



<p>「Telegraf」のPlatformでWindowsを選んでください。</p>



<p>コマンドが書かれているんですが信用せず、zipファイルのリンクだけをコピーしてダウンロードしてください。</p>



<p>執筆日最新のリンクはこちら。</p>




<a rel="noopener" href="https://dl.influxdata.com/telegraf/releases/telegraf-1.33.1_windows_amd64.zip" title="https://dl.influxdata.com/telegraf/releases/telegraf-1.33.1_windows_amd64.zip" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fdl.influxdata.com%2Ftelegraf%2Freleases%2Ftelegraf-1.33.1_windows_amd64.zip?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">https://dl.influxdata.com/telegraf/releases/telegraf-1.33.1_windows_amd64.zip</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://dl.influxdata.com/telegraf/releases/telegraf-1.33.1_windows_amd64.zip" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">dl.influxdata.com</div></div></div></div></a>



<p>これをC:\Program Files\Telegraf\というパスになるように解凍して配置します。</p>



<p>ここで、config準備してください。</p>



<p>そのフォルダで管理者権限でPowerShellを起動してください。</p>



<p>テスト起動して、動作を確かめる</p>



<pre class="wp-block-code"><code>.\telegraf.exe --config "C:\Program Files\Telegraf\telegraf.conf" --test</code></pre>



<p>問題なければ、サービスとしてインストール</p>



<pre class="wp-block-code"><code>.\telegraf.exe service install</code></pre>



<p>サービスをスタート</p>



<pre class="wp-block-code"><code>.\telegraf.exe service start</code></pre>



<p>これで完了です。</p>



<p>アンインストールしたければ</p>



<pre class="wp-block-code"><code>.\telegraf.exe service uninstall</code></pre>



<p>です。</p>



<p>サービスのフラグは下記があります。</p>



<pre class="wp-block-code"><code>.\telegraf.exe service install
.\telegraf.exe service uninstall
.\telegraf.exe service start
.\telegraf.exe service stop
.\telegraf.exe service status</code></pre>



<p>サービスの設定は決め打ちで、</p>



<pre class="wp-block-code"><code>.\telegraf.exe --config "C:\Program Files\Telegraf\telegraf.conf" --service-name telegraf</code></pre>



<p>こうなっていますので、インストールパスをいじる場合は注意です。古いドキュメントはちょっと違ってるんですよね。</p>



<p>以上です。</p>



<h3 class="wp-block-heading">Windows用のconfig</h3>



<p>下記が参考になります。</p>




<a rel="noopener" href="https://www.ultra-noob.com/blog/2020/38" title="【Telegraf】CPUやHDDの使用状況を監視しDBに保存する【InfluxDB】 | 謎の技術研究部" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://cgbeginner.net/wp-content/uploads/cocoon-resources/blog-card-cache/fe1da5de0169eadf241cdc8b2e92b461.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【Telegraf】CPUやHDDの使用状況を監視しDBに保存する【InfluxDB】 | 謎の技術研究部</div><div class="blogcard-snippet external-blogcard-snippet">InfluxDB周りのプロダクト「Telegraf」を試す。自宅サーバーPCの稼働状況に問題がないかを確認できるようにしたい。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.ultra-noob.com/blog/2020/38" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.ultra-noob.com</div></div></div></div></a>




<a rel="noopener" href="https://github.com/influxdata/telegraf/tree/master/plugins/inputs/win_perf_counters#examples" title="telegraf/plugins/inputs/win_perf_counters at master ?? influxdata/telegraf" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://cgbeginner.net/wp-content/uploads/cocoon-resources/blog-card-cache/3e9388da25b583cc89e1d9aa0320a427." alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">telegraf/plugins/inputs/win_perf_counters at master ?? influxdata/telegraf</div><div class="blogcard-snippet external-blogcard-snippet">Agent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data. - influxdata/telegra...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://github.com/influxdata/telegraf/tree/master/plugins/inputs/win_perf_counters#examples" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">github.com</div></div></div></div></a>



<p>私が使ってるtelegraf.confを載せておきます。</p>



<pre class="wp-block-code"><code>&#91;global_tags]
  # dc = "us-east-1" # will tag all metrics with dc=us-east-1
  # rack = "1a"
  ## Environment variables can be used as tags, and throughout the config file
  # user = "$USER"


&#91;agent]
  interval = "10s"
  round_interval = true
  metric_batch_size = 1000
  metric_buffer_limit = 10000
  collection_jitter = "0s"
  flush_interval = "10s"
  flush_jitter = "0s"
  precision = "0s"
  ## Log at debug level.
  # debug = false
  ## Log only error level messages.
  # quiet = false
  logfile = "log.log"
  log_with_timezone = "Asia/Tokyo"
  ## Override default hostname, if empty use os.Hostname()
  # hostname = ""
  ## If set to true, do no set the "host" tag in the telegraf agent.
  # omit_hostname = false


&#91;&#91;outputs.influxdb_v2]]
  urls = &#91;"https://influxdb.XXX.net"]
  #urls = &#91;"http://influxdb:8086"]
  token = "3lSDysKjYXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX7n4NA=="
  organization = "organization"
  bucket = "bucket"
  timeout = "5s"


&#91;&#91;inputs.win_perf_counters]]
  &#91;&#91;inputs.win_perf_counters.object]]
    # Processor usage, alternative to native, reports on a per core.
    ObjectName = "Processor"
    Instances = &#91;"*"]
    Counters = &#91;"% Idle Time", "% Interrupt Time", "% Privileged Time", "% User Time", "% Processor Time"]
    Measurement = "win_cpu"
    #IncludeTotal=false #Set to true to include _Total instance when querying for all (*).

  &#91;&#91;inputs.win_perf_counters.object]]
    # Disk times and queues
    ObjectName = "LogicalDisk"
    Instances = &#91;"*"]
    Counters = &#91;"% Idle Time", "% Disk Time","% Disk Read Time", "% Disk Write Time", "% User Time", "Current Disk Queue Length"]
    Measurement = "win_disk"
    #IncludeTotal=false #Set to true to include _Total instance when querying for all (*).

  &#91;&#91;inputs.win_perf_counters.object]]
    ObjectName = "System"
    Counters = &#91;"Context Switches/sec","System Calls/sec", "Processor Queue Length"]
    Instances = &#91;"------"]
    Measurement = "win_system"
    #IncludeTotal=false #Set to true to include _Total instance when querying for all (*).

  &#91;&#91;inputs.win_perf_counters.object]]
    # Example query where the Instance portion must be removed to get data back, such as from the Memory object.
    ObjectName = "Memory"
    Counters = &#91;"Available Bytes","Cache Faults/sec","Demand Zero Faults/sec","Page Faults/sec","Pages/sec","Transition Faults/sec","Pool Nonpaged Bytes","Pool Paged Bytes"]
    Instances = &#91;"------"] # Use 6 x - to remove the Instance bit from the query.
    Measurement = "win_mem"
    #IncludeTotal=false #Set to true to include _Total instance when querying for all (*).

  &#91;&#91;inputs.win_perf_counters.object]]
    # more counters for the Network Interface Object can be found at
    # https://msdn.microsoft.com/en-us/library/ms803962.aspx
    ObjectName = "Network Interface"
    Counters = &#91;"Bytes Received/sec","Bytes Sent/sec","Packets Received/sec","Packets Sent/sec"]
    Instances = &#91;"*"] # Use 6 x - to remove the Instance bit from the query.
    Measurement = "win_net"
    #IncludeTotal=false #Set to true to include _Total instance when querying for all (*).


&#91;&#91;inputs.cpu]]
  ## Whether to report per-cpu stats or not
  percpu = true
  ## Whether to report total system cpu stats or not
  totalcpu = true
  ## If true, collect raw CPU time metrics
  collect_cpu_time = false
  ## If true, compute and report the sum of all non-idle CPU states
  ## NOTE: The resulting 'time_active' field INCLUDES 'iowait'!
  report_active = false
  ## If true and the info is available then add core_id and physical_id tags
  core_tags = false



&#91;&#91;inputs.disk]]
  ## By default stats will be gathered for all mount points.
  ## Set mount_points will restrict the stats to only the specified mount points.
  # mount_points = &#91;"/"]

  ## Ignore mount points by filesystem type.
  ignore_fs = &#91;"tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]

  ## Ignore mount points by mount options.
  ## The 'mount' command reports options of all mounts in parathesis.
  ## Bind mounts can be ignored with the special 'bind' option.
  # ignore_mount_opts = &#91;]



&#91;&#91;inputs.diskio]]
  ## Devices to collect stats for
  ## Wildcards are supported except for disk synonyms like '/dev/disk/by-id'.
  ## ex. devices = &#91;"sda", "sdb", "vd*", "/dev/disk/by-id/nvme-eui.00123deadc0de123"]
  # devices = &#91;"*"]

  ## Skip gathering of the disk's serial numbers.
  # skip_serial_number = true

  ## Device metadata tags to add on systems supporting it (Linux only)
  ## Use 'udevadm info -q property -n &lt;device>' to get a list of properties.
  ## Note: Most, but not all, udev properties can be accessed this way. Properties
  ## that are currently inaccessible include DEVTYPE, DEVNAME, and DEVPATH.
  # device_tags = &#91;"ID_FS_TYPE", "ID_FS_USAGE"]

  ## Using the same metadata source as device_tags, you can also customize the
  ## name of the device via templates.
  ## The 'name_templates' parameter is a list of templates to try and apply to
  ## the device. The template may contain variables in the form of '$PROPERTY' or
  ## '${PROPERTY}'. The first template which does not contain any variables not
  ## present for the device is used as the device name tag.
  ## The typical use case is for LVM volumes, to get the VG/LV name instead of
  ## the near-meaningless DM-0 name.
  # name_templates = &#91;"$ID_FS_LABEL","$DM_VG_NAME/$DM_LV_NAME"]


&#91;&#91;inputs.kernel]]
  ## Additional gather options
  ## Possible options include:
  ## * ksm - kernel same-page merging
  ## * psi - pressure stall information
  # collect = &#91;]


&#91;&#91;inputs.mem]]
  # no configuration


&#91;&#91;inputs.processes]]
  ## Use sudo to run ps command on *BSD systems. Linux systems will read
  ## /proc, so this does not apply there.
  # use_sudo = false


&#91;&#91;inputs.swap]]
  # no configuration


&#91;&#91;inputs.system]]
  # no configuration


#&#91;&#91;inputs.amd_rocm_smi]]
#  ## Optional: path to rocm-smi binary, defaults to $PATH via exec.LookPath
#  # bin_path = "/opt/rocm/bin/rocm-smi"

#  ## Optional: timeout for GPU polling
#  # timeout = "5s"


&#91;&#91;inputs.nvidia_smi]]
  ## Optional: path to nvidia-smi binary, defaults "/usr/bin/nvidia-smi"
  ## We will first try to locate the nvidia-smi binary with the explicitly specified value (or default value),
  ## if it is not found, we will try to locate it on PATH(exec.LookPath), if it is still not found, an error will be returned
  # bin_path = "/usr/bin/nvidia-smi"

  ## Optional: timeout for GPU polling
  # timeout = "5s"

</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://cgbeginner.net/windows-telegraf/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2404</post-id>	</item>
		<item>
		<title>Ubuntu(Linux)でSoftEther VPNクライアント構築 詳細メモ</title>
		<link>https://cgbeginner.net/ubuntu-softether-vpn-client/</link>
					<comments>https://cgbeginner.net/ubuntu-softether-vpn-client/#respond</comments>
		
		<dc:creator><![CDATA[CGBeginner]]></dc:creator>
		<pubDate>Sun, 23 Feb 2025 13:26:03 +0000</pubDate>
				<category><![CDATA[コンピュータ]]></category>
		<guid isPermaLink="false">https://cgbeginner.net/?p=2400</guid>

					<description><![CDATA[VPN(Virtual Private Network)は、仮想的な通信トンネルを構成したプライベートネットワークのこと。 通信内容を暗号化しつつ、仮想的にネットワークを接続できる技術です。VPNを使って通信の安全性を高 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>VPN(Virtual Private Network)は、仮想的な通信トンネルを構成したプライベートネットワークのこと。</p>



<p>通信内容を暗号化しつつ、仮想的にネットワークを接続できる技術です。VPNを使って通信の安全性を高めたり、自宅にVPNサーバーを設置することで、<strong>外にいるのに家のネットワークにつながることができたり</strong>します。</p>



<p>本記事は、別のコンピュータに構築したSoftEther VPNサーバーに対して、Ubuntuコンピュータ内にVPN Clientを構築して接続するまでのメモです。</p>



<p>VPNサーバー構築の記事は別記事です。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-cgbeginner wp-block-embed-cgbeginner"><div class="wp-block-embed__wrapper">

<a href="https://cgbeginner.net/ubuntu-softether-vpn/" title="Ubuntu(Linux)でSoftEther VPNサーバー構築 詳細メモ" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://cgbeginner.net/wp-content/uploads/2023/01/softether-vpn-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://cgbeginner.net/wp-content/uploads/2023/01/softether-vpn-160x90.png 160w, https://cgbeginner.net/wp-content/uploads/2023/01/softether-vpn-120x68.png 120w, https://cgbeginner.net/wp-content/uploads/2023/01/softether-vpn-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Ubuntu(Linux)でSoftEther VPNサーバー構築 詳細メモ</div><div class="blogcard-snippet internal-blogcard-snippet">VPN(Virtual Private Network)は、仮想的な通信トンネルを構成したプライベートネットワークのこと。通信内容を暗号化しつつ、仮想的にネットワークを接続できる技術です。VPNを使って通信の安全性を高めたり、自宅にVPNサ...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://cgbeginner.net" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">cgbeginner.net</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2023.01.05</div></div></div></div></a>
</div></figure>



<p>なお、本記事は主に自分用の備忘録を兼ねているというかそれが主目的なので、いろいろと記載が足らないことがありますがご了承ください。</p>



<p>使用OSはUbuntu 24.04 LTSです。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-20" checked><label class="toc-title" for="toc-checkbox-20">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">インストールする</a></li><li><a href="#toc2" tabindex="0">サービス化</a></li><li><a href="#toc3" tabindex="0">クライアント設定</a><ol><li><a href="#toc4" tabindex="0">基本的な設定の流れ</a></li><li><a href="#toc5" tabindex="0">IPアドレス設定</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">インストールする</span></h2>



<p>公式サイトから、Linux用のパッケージを落としてきます。x86-64用やARM用などはマシンに合わせてください。</p>



<pre class="wp-block-code"><code>wget https://jp.softether-download.com/files/softether/v4.43-9799-beta-2023.08.31-tree/Linux/SoftEther_VPN_Client/64bit_-_Intel_x64_or_AMD64/softether-vpnclient-v4.43-9799-beta-2023.08.31-linux-x64-64bit.tar.gz
tar xzvf softether*tar.gz
cd vpnclient/
sudo apt install -y make gcc
make
cd ../
sudo mv vpnclient/ /usr/local/
cd /usr/local
sudo chown -R root:root vpnclient
cd vpnclient/
sudo chmod 600 *
sudo chmod 700 vpncmd
sudo chmod 700 vpnclient</code></pre>



<h2 class="wp-block-heading"><span id="toc2">サービス化</span></h2>



<p>VPN Clientをサービスにします。</p>



<pre class="wp-block-code"><code>sudo vi /etc/systemd/system/vpnclient.service</code></pre>



<p>下記の内容にして保存します。</p>



<pre class="wp-block-code"><code>&#91;Unit]
Description=SoftEther VPN Client
After=network.target network-online.target

&#91;Service]
ExecStart=/usr/local/vpnclient/vpnclient start
ExecStop=/usr/local/vpnclient/vpnclient stop
WorkingDirectory=/usr/local/vpnclient/
#ExecStartPost=dhclient vpn_vpn
Type=forking
RestartSec=3s

&#91;Install]
WantedBy=multi-user.target</code></pre>



<p>保存したら、下記コマンドで有効化します。</p>



<pre class="wp-block-code"><code>sudo systemctl daemon-reload
sudo systemctl start vpnclient
sudo systemctl enable vpnclient</code></pre>



<h2 class="wp-block-heading"><span id="toc3">クライアント設定</span></h2>



<p>vpncmdが、設定用のプログラムです。</p>



<pre class="wp-block-code"><code>sudo /usr/local/vpncmd</code></pre>



<p>こんな感じになります。</p>



<pre class="wp-block-code"><code>ctrluser@xxx:/usr/local/vpnclient$ sudo ./vpncmd
vpncmd command - SoftEther VPN Command Line Management Utility
SoftEther VPN Command Line Management Utility (vpncmd command)
Version 4.43 Build 9799   (English)
Compiled 2023/08/31 10:50:49 by buildsan at crosswin with OpenSSL 3.0.9
Copyright (c) 2012-2023 SoftEther VPN Project. All Rights Reserved.

By using vpncmd program, the following can be achieved.

1. Management of VPN Server or VPN Bridge
2. Management of VPN Client
3. Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool)

Select 1, 2 or 3:</code></pre>



<p>2を入力してエンター</p>



<pre class="wp-block-code"><code>Select 1, 2 or 3: 2

Specify the host name or IP address of the computer that the destination VPN Client is operating on.
If nothing is input and Enter is pressed, connection will be made to localhost (this computer).
Hostname of IP Address of Destination:</code></pre>



<p>Clientへの接続先ですが、自分自身なので、空白でエンター</p>



<pre class="wp-block-code"><code>Hostname of IP Address of Destination:

Connected to VPN Client "localhost".

VPN Client></code></pre>



<p>ここから、プロンプトがいろいろと記入できますが、いっぱいあるので詳細は公式マニュアル参照。</p>



<h3 class="wp-block-heading"><span id="toc4">基本的な設定の流れ</span></h3>



<p>ここからはやることは人によりますが、一番一般的な、仮想Nicを作り、接続設定を作って、接続するという流れをやっていきます。</p>



<p>Nicはなにもないことを確認します。</p>



<pre class="wp-block-code"><code>VPN Client>NicList
NicList command - Get List of Virtual Network Adapters
Item|Value
----+-----
The command completed successfully.</code></pre>



<p>vNICを作成します。名前は何でもいいです。名前は「vNIC-XXX」にします。</p>



<pre class="wp-block-code"><code>NicCreate vNIC-XXX</code></pre>



<p>接続アカウントを作ります。接続名は「Connect-XXX」にします。</p>



<pre class="wp-block-code"><code>AccountCreate Connect-XXX /SERVER:xxx.softether.net:443 /HUB:サーバー側のHUBの名前 /USERNAME:サーバー側のユーザーネーム /NICNAME:vNIC-XXX</code></pre>



<p>パスワードをセットします。</p>



<pre class="wp-block-code"><code>AccountPasswordSet Connect-XXX /PASSWORD:パスワード /TYPE:standard</code></pre>



<p>接続します。</p>



<pre class="wp-block-code"><code>AccountConnect Connect-XXX</code></pre>



<p>アカウントリストを確認します。</p>



<pre class="wp-block-code"><code>AccountList</code></pre>



<p>こんな感じになります。</p>



<pre class="wp-block-code"><code>VPN Client>AccountList
AccountList command - Get List of VPN Connection Settings
Item                        |Value
----------------------------+-------------------------------------------------
VPN Connection Setting Name |Connect-XXX
Status                      |Connected
VPN Server Hostname         |xxx.softether.net:443 (Direct TCP/IP Connection)
Virtual Hub                 |XXX-HUB
Virtual Network Adapter Name|vNIC-XXX
The command completed successfully.</code></pre>



<p>StatusがConnectedになってるので、成功です。<br>一応状況確認します。</p>



<pre class="wp-block-code"><code>AccountGet Connect-XXX</code></pre>



<p>このようになります。</p>



<pre class="wp-block-code"><code>VPN Client>AccountGet Connect-XXX
AccountGet command - Get Setting of VPN Connection Setting
Item                                                 |Value
-----------------------------------------------------+--------------------------------
VPN Connection Setting Name                          |Connect-XXX
Destination VPN Server Host Name                     |xxx.softether.net
Destination VPN Server Port Number                   |443
Destination VPN Server Virtual Hub Name              |XXX-HUB
Proxy Server Type                                    |Direct TCP/IP Connection
Verify Server Certificate                            |Disable
Device Name Used for Connection                      |vNIC-XXX
Authentication Type                                  |Standard Password Authentication
User Name                                            |cloud(自分で決めたもの)
Number of TCP Connections to Use in VPN Communication|1
Interval between Establishing Each TCP Connection    |1
Connection Life of Each TCP Connection               |Infinite
Use Half Duplex Mode                                 |Disable
Encryption by SSL                                    |Enable
Data Compression                                     |Disable
Connect by Bridge / Router Mode                      |Disable
Connect by Monitoring Mode                           |Disable
No Adjustment for Routing Table                      |Disable
Do not Use QoS Control Function                      |Disable
The command completed successfully.</code></pre>



<p>次に、これをスタートアップ設定にします。こうすることでコンピュータ再起動後も自動でVPNが張られます。</p>



<pre class="wp-block-code"><code>AccountStartupSet Connect-XXX</code></pre>



<p>設定は終わったので、vpncmdを終了します。</p>



<pre class="wp-block-code"><code>quit</code></pre>



<h3 class="wp-block-heading"><span id="toc5">IPアドレス設定</span></h3>



<p>上記で、接続は完了してますが、IPアドレスがちゃんと振られていないことがあります（私の場合、IPv6しか振られてなかった）。</p>



<p>IPアドレスの状況を確認します。</p>



<pre class="wp-block-code"><code>ip a</code></pre>



<p>このようになります。</p>



<pre class="wp-block-code"><code>～～～
58: vpn_vnic-xxx: &lt;BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    inet6 240b:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:1c29/64 scope global dynamic mngtmpaddr noprefixroute
       valid_lft 2592000sec preferred_lft 604800sec
    inet6 fe80::5cb8:63ff:fe7d:XXXX/64 scope link
       valid_lft forever preferred_lft forever
～～～</code></pre>



<p>このようにさっき作ったvNICがネットワークインターフェイスとして認識しています。「vpn_～～～」という名前ですが、長かったら丸められます。</p>



<p>ここから、netplanを使ってIP設定します。なお、netplanのコンフィグの状況は人によりますので注意。</p>



<pre class="wp-block-code"><code>sudo vi /etc/netplan/50-cloud-init.yaml</code></pre>



<p>50-cloud-initを勝手にいじっても問題ないですが、一応こいつはリネームしておいて、99-config.yamlを作っておきます。</p>



<pre class="wp-block-code"><code>sudo cp /etc/netplan/50-cloud-init.yaml /etc/netplan/99-config.yaml
sudo mv /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.bak</code></pre>



<pre class="wp-block-code"><code>network:
    version: 2
    ethernets:
        ens3:
            dhcp4: false
            match:
                macaddress: XX:XX:XX:0a:27:67
            mtu: 1500
            set-name: ens3
            addresses: &#91;XXX.XXX.72.39/24]
            routes:
                - to: default
                  via: XXX.XXX.72.1
            nameservers:
                addresses: &#91;8.8.8.8,1.1.1.1]
        vpn_vnic-xxx:
         optional: true
         dhcp4: false
         dhcp6: true
         addresses:
         - 192.168.100.252/24
         nameservers:
           addresses:
           - 192.168.100.1
           search: &#91;]</code></pre>



<p>こんな感じでvNICの設定を足します。</p>



<pre class="wp-block-code"><code>sudo netplan apply</code></pre>



<p>で適用します。失敗したらネットワーク切れるのでご注意。</p>



<pre class="wp-block-code"><code>ip a</code></pre>



<pre class="wp-block-code"><code>～～～
58: vpn_vnic-xxx: &lt;BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.252/24 brd 192.168.100.255 scope global vpn_vnic-yokoha
       valid_lft forever preferred_lft forever
    inet6 240b:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:1c29/64 scope global dynamic mngtmpaddr noprefixroute
       valid_lft 2592000sec preferred_lft 604800sec
    inet6 fe80::5cb8:63ff:fe7d:XXXX/64 scope link
       valid_lft forever preferred_lft forever
～～～</code></pre>



<p>ちゃんとIPv4アドレスも設定できてますね。</p>



<p>終了～～～</p>
]]></content:encoded>
					
					<wfw:commentRss>https://cgbeginner.net/ubuntu-softether-vpn-client/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2400</post-id>	</item>
	</channel>
</rss>
