防砂林メモ

自分用のメモを書くだけ

Lenovo ideapad 320のマイク不具合を直す(Linux)

Lenovo ideapad 320-15AST。性能がクソ雑魚なのでLinuxを入れて使ってるのですが、マイクが機能しません。 設定を直します。試したディストーションLinux Mint 20.3です。

まず
/usr/share/pulseaudio/alsa-mixer/paths/analog-input-internal-mic.conf
/usr/share/pulseaudio/alsa-mixer/paths/analog-input-mic.conf
を次のように編集します。

[Element Internal Mic Boost]内のvolumezero
[Element Int Mic Boost]内のvolumezero
[Element Mic Boost]内のvolumezero

そしたら、コマンド打ってデバイス名みたいなの出すっぽいです。

$ pacmd list-sources | grep 'name:.*input'

alsa_input.pci-0000_00_1f.3.analog-stereoってな感じのが出てくるので、その部分をコピーしときます。

それで今度は/etc/pulse/default.paを編集します。この2行を一番下にでも追加してください。
load-module module-remap-source source_name=record_mono master=※ master_channel_map=front-left channel_map=mono
set-default-source record_mono
※さっきコピーしたやつ

以上で設定完了。

$ pulseaudio -k
$ pulseaudio --start

で、PulseAudioを再起動します。パソコンを再起動してもいいです。

参考というか翻訳元というか:
Fix microphone on Lenovo IdeaPad 320 on Ubuntu 18.04 · GitHub

なんかよく知らんけど自分はこれで直りました。ありがとうございました。

マイクラサーバーどケチシステムの構築

はじめに

どうも、筆者です。パソコン初心者です。なんか社会人になって半年くらいが経ったみたいです。未だに社会人になった実感が湧きませんが。まあそういうこともあるよね。

して、マイクラサーバーの話ですが。もともと、学生の時から仲間内でマルチプレイをしておりました。しかし、アパートに越してひとり暮らしを始めてからは、ネット回線の都合でサーバーのホスティングがいままでどおりできなくなってしまいまして。

いや、まあちゃんと回線を契約すればいいだけの話なんですけど。でもやっぱ、色々と費用は抑えたいじゃないですか。マイクラ以外のゲームはやらないし、マルチプレイする頻度もそう高くないので、ほとんど携帯回線で事足りるというか。マイクラのためだけに固定回線の契約はしたくないなぁ、ってことですよぅ。

回線は契約せず別の方法でなんとかできないか。パソコン初心者なりにちょっと色々考えてみた、って言うのがこの記事の内容です。

要件

費用を抑えたい

前述のとおり、あまりマルチプレイの頻度は高くありません。誰もヘビーなプレイヤーではないので、そこまでお金をかけたくありません。初期費用・ランニングコスト、共に抑えたい。

あくまで仲間内で

サーバーを不特定多数に公開して、大人数でやるとかそういうのは想定しません。あくまで仲間内でやります。

エディションはJava版で

前からJEでやってるし、JEの方が色々できる感じがするので。まあ統合版もいいですよね。サーバー建てる必要がそもそもないですから。

24時間運用にしたい

だいたい仲間内でマルチやるってなったときは、知識のある人がその都度サーバーを起動するっていう感じの運用になると思うんですけど。実際やってるとなかなか集まりが悪いというか。

仲間内で、サーバー建てれる知識があるのは自分だけなんで、マルチプレイする際は自分が起動の操作をする必要があるんですよね。だから、裏でちょっと建築進めとこうとか、ブランチマイニングしとこうとか、そういうことがしずらいんですよ。

なので、できれば24時間運用にしたい。やっぱりマイクラは作業ゲーなので。各位が任意のタイミングでログインできるような感じであってほしい。

以前までの運用(KiyoshiV1)

そもそも、引っ越し前はどんな運用をしていたのかって言う話です。実家は普通に光回線があります。なので、まあ普通にデスクトップパソコンでサーバーを建ててやってました。ただ、ちょっと工夫をしてて「各位が任意のタイミングでログインできるような仕組み」を不完全ながら実現しておりました。

discord.pyを利用してディスコードのボットを作ったんですよ。プレイヤーから命令を受けて、subprocessでマイクラサーバーを起動するっていう仕組みです。パソコンでボットを自動起動・常駐させておけば、パソコンの電源が入ってる限りはいつでもマルチプレイができます。マイクラサーバー自体を常駐させているわけではないので、リソースを無駄遣いすることはありません。

ちなみにこの頃は、ONUの都合でポート開放ができませんでした。管理画面にログインするためのパスワードが分からなかったんですよね。親は詳しくないので多分、業者が設定したんだと思います。開放くんもなんか効かないし。そのためngrokでポートフォワーディングをすることでサーバーを開いてました。サーバーを起動して、ngrokを起動して、アドレスをディスコードに送信して、って手動でやってるとなかなか手間なので、この流れをボットで自動化していたわけです。

このボットをディスコードでは「きよしくん」と呼んでいます。また、このスクリプトのことを「KiyoshiV1」と呼びます。

不採用案

①手元のデスクトップ環境でホスティング

新居でも、今まで通りデスクトップパソコンでKiyoshiV1を動かすっていうことですね。まあ厳しいですね。携帯回線なので。サーバーに接続するだけならなんとかなりますが、ホスティングとなると帯域幅的に無理があります。テザリングしっぱなしって訳にもいきませんし。

あと、携帯回線のプランがちょっと特殊なんですよね。通信費を抑えるために固定回線は契約したくない。そうなると携帯回線は無制限プランにしたい。パソコンにテザリングするとギガの消費が多くなる。しかし、無制限プランとなるとどれもお高い。そんな中、2,000円程度で無制限という謎のプランを発見しまして。マイネオの「マイそく」っていうプランなんですけど。内容的には、常に3Mbpsの速度制限(マイそくプレミアムの場合)がある、平日12時~13時は32Kbpsの速度制限がかけられる、など色々と制約があるけど無制限だよって言う特殊なプランです。昼休みは本でも読むかぁ、ってことで契約しました。

まず、3Mbpsでホスティングは無理なのでこの案はボツ。

②Aternos(無料サーバー)

Aternosっていうホスティングサービスがあるんですよ。無料だし、管理も容易なので便利。だけど、絶望的にラグいんですよね。海外のサービスですし。

マルチプレイを始めた当初はポートフォワーディングとかの知識がなかったため、これを使っていたんですが。まあラグくて。やってらんないっすね。

とにかくラグいのでボツ。

③レルムズ

イクラ公式のレンタルサーバーですね。金かかるので嫌です。8ドルですよ。ボツ。

④実家サーバー24時間運用

実家には古いデスクトップパソコンが転がってます。富士通のD582/Eです。これをサーバー用として24時間つけっぱにするということですね。

うーん。24時間かぁ。電気代はかかるし、ちょっと怖いですよね。火事とか。一応、24時間モデルって言うことですけれども、古いし。

自分の家ならまだいいですけど実家ですからね。流石にボツ。

VPS

自宅サーバーがだめなら、VPSはどうかと。「マイクラ サーバー 建て方」で検索すればVPSの広告がいっぱい出てくるじゃないですか。電気代や、火災リスクのことを考えればVPSの料金は全然安いって聞いたことがあります。

でも、やっぱりお金はかけたくないなぁ。もっと他に方法を模索したいと思います。ボツ。

⑥ラズパイ実家サーバー

ラズパイなら実家で放置してもいいよねぇ。消費電力は小さいし、燃える可能性も低いはず。

でもなんかラズパイ高騰してるらしいし、できれば買わずに済ませたいなぁ。ということでボツ。

⑥仲間にサーバーを建てさせる

KiyoshiV1を素人でもインストールし易いように調整して、実家ぐらししてる仲間のパソコンにぶち込むという案。これなら今まで通りの運用ができる。

けど、ちょっとなぁって感じ。あまり理解のない人にポート開放させるのはあんまり良くないよねぇ。マイクラ脆弱性に関しても、もちろん対応はしているけど100パーセント信頼できるものではないと思う。やっぱり筆者はパソコン初心者なので。KiyoshiV1のセキュリティにはあまり自信がないです。

慎重に行きましょう。ボツです。

一時採用案(実家サーバー1日4時間運用)

じゃあどうしよっかなということで、実家にある古いデスクトップパソコンをサーバー代わりにするという案をとりあえず採用。ただ、前述の通り24時間動かすのはあまり好ましくない。

ので、パソコンのBIOS設定をいじって、毎晩19時に自動起動するように。また、タスクスケジューラーによって23時に自動シャットダウンをするように設定しました。マルチプレイをする可能性の高い夜間のみKiyoshiV1をスタンバイさせるという仕組みです。

これなら夜間は自由にサーバーを使えます。なんかあったときはリモートデスクトップで管理。23時以降もやる場合はタスクスケジューラーを一時解除。こんな感じの運用です。

休日の日中とかにマイクラやるときは、仕方がないけど親にラインしてパソコンの電源ボタンを入れてもらうとか。これはちょっと不便ですね。パソコンのみならず親まで遠隔操作することになるとは。

それに、やっぱり無駄が多いですね。4時間なので24時間に比べればだいぶ良い感じがしますが、それでも「毎日」4時間。マルチプレイは毎日やるわけでもないのに。ほぼ毎日4時間、電力を浪費するんですから、無駄以外の何物でもありません。

実際のところ、実家の電気代を払うのは親ですので、筆者の財布からは1円も出ていかないのですが。親の知らないところで電気代を奪っていく、ステルススネカジリです。

とても不健全ですが、現状これが一番お金を使わずに済む方法だったので、ほかの方法を模索しつつとりあえずこの案を採用ということにしました。最終的にはこの方法で4ヶ月ほど運用しました。

現行採用案(マイクラサーバーどケチシステム)

状況の変化

8月くらいですね。親からラインがきまして、ワイファイがつながらなくなったと。困ったなぁと思いながら実家に帰り確認してみると、どうもワイファイにはつながる。ただ「インターネット接続がありません」との表示が。

これはあれだ、パソコン初心者の筆者にもわかるぞ。異常があるのは無線ルーターではなくONUに違いない。だって、20年近く使ってる化石(PR-200NE)なんだもの。

いやぁ、参ったなぁ。きっと面倒な手続きをして業者を呼んで(親が)金を取られることになるんだろうなぁ。って思っていたんですけど、プロバイダーに連絡したらすぐに新品のONUを無料で送ってくれて、あとは自分でやってね方式。

なんだぁ、意外とあっさりしてるじゃあん。ごめんね、ド○モ光さん、邪険に扱われると思って。交換したら無事ネット環境は復活しました。

それでです。自分で新ONUのセットアップをしたので管理画面にアクセスするためのパスワードもちゃんとわかります。つまり、これで自由にポート開放ができます。

思いつきました。この方法なら要件を完全に満たすサーバーを構築できるのでは……?

イクラサーバーどケチシステム

どういう方法でサーバーを運用していくかということですが、ちょっと複雑です。パソコン初心者なりに頑張って考えました。箇条書きでまとめます。

  • 適当なPaaSの無料枠でディスコードのボット「KiyoshiV2」を24時間動作させます
  • KiyoshiV2はKiyoshiV1と同じように起動命令を受け取ります
  • 起動命令を受け取ったKiyoshiV2は実家サーバー(停止中)に「マジックパケット」を送信します
  • 実家サーバーはマジックパケットを受信し、WoW(ウェイク・オン・ワン)により起動します
  • KiyoshiV2は実家サーバーの起動を確認すると、ユーザーから受け取った起動命令を実家サーバーへHTTPリクエストとして転送します
  • 実家サーバーでは、FastAPIを利用して作られたAPIサーバーが起動しています。このAPIサーバーを「Sekiguchi」と呼びます
  • SekiguchiはKiyoshiV2からリクエストを受信し、マイクラサーバーをsubprocessにより起動させます
  • プレイヤーはマルチプレイをします
  • プレイヤーはマルチプレイを終え、KiyoshiV2にサーバー停止命令をします
  • 停止命令がSekiguchiに伝わり、Sekiguchiはマイクラサーバーを停止します
  • Sekiguchiはマイクラサーバーが停止している状態で、一定時間リクエストがない場合実家サーバーをシャットダウンさせます
  • 実家サーバーは次にマジックパケットを受信するまで停止しています

大まかな仕組みは以上です。つまりプレイヤーから見れば、あたかもKiyoshiV1が常時稼働しているような感じになるわけです。

一応、仕組みについて補足です。

  • 実家の回線は動的IPなので、この仕組みを維持するためにDDNSを利用しています
  • Sekiguchiのセキュリティとして、トークンによる認証とSSL化がなされています
  • IPアドレスと証明書の更新のため、実家サーバーは毎朝定刻に自動起動します

こんな感じです。このシステムに関して、改めて要件と照らし合わせてみましょう。

まず「費用を抑えたい」ですが、何かを買った訳では無いので初期費用はゼロです。ランニングコストに関して、KiyoshiV2は無料枠なのでゼロ。実家サーバーは電気代がかかりますが、毎朝の処理とKiyoshiV2からのリクエストがあったときのみ起動するため、無駄がありません。完璧です。

次に「あくまで仲間内で」ですが、まあ問題なく仲間内でマルチができるようになっています。ヨシ。

それから「エディションはJava版で」ですが、Sekiguchiの方でJEのサーバーを起動できるようになってます。んで、ついでにBEのサーバーも起動できるようにしました。結局どっちも管理の方法は大差ないので、この際どっちもできるようにしちゃえってことでやりました。

そして「24時間運用にしたい」ですが、これもほぼ完璧です。ディスコードに命令を送信すればいつでもサーバーを起動できます。起動に時間はかかりますが、些末なことでしょう。実家のIPアドレスが変動した日は翌朝までサーバーにアクセスできなくなりますが、IPアドレスが変動する頻度は相当低いらしいし、マルチプレイをするタイミングでそうなった事は今のところありません。

おお、いいじゃんいいじゃん。ほぼほぼ完璧です。優勝。ということでこの案を採用し、「マイクラサーバーどケチシステム」として運用を始めました。ちゃんちゃん。

感想

「マイクラサーバーどケチシステム」を構築した感想としては、非常に勉強になったなぁ、といった感じです。なんかいろんな技術使ったじゃん。WebAPI、WoW、DDNSSSL、プロセスの扱い方(stdin、stdout)、PaaS、discord.py。実家サーバー1日4時間運用に比べればだいぶ進歩しましたね。

特にSSL化なんかはですよ。GitHub Pagesとか使ってると当たり前のようにhttpsになってるじゃないですか。自宅サーバーとかでないと手作業でSSL化する機会がないので、とても貴重な経験になりました。

あとは、お金をほぼ全くかけずに運用できていて満足ですね。電気代は親の支払いなので。ヘヘッ。筆者は1円もお金を使っていません。最高。

以上、パソコン初心者なりにマイクラサーバーの運用を考えてみた、という記事でした。

どうもです。

Java版Minecraft自宅サーバーの建て方(ngrokで公開)

はじめに

Windows向けの説明です。

ポートフォワーディングということをするので、セキュリティーが低下することになります。まあ、普通にやればどうってことないと思いますが、一応。とにかく、自己責任ってことでよろしくお願いします。

Minecraft脆弱性への対策について、注意すべき項目が2点あります。確実に設定しましょう。 www.minecraft.net

この方法では、仲間内での利用程度にとどめておくことを推奨します。不特定多数のプレイヤーを入れるような用途には不向きです。

目次

準備

  1. 適当なところにフォルダを作ります。名前は何でもいいです。ここでは「鯖」とします。

  2. 拡張子の表示をオンにしてください。 pc-karuma.net

  3. JDKをインストールします。「鯖」の中に「jdk-x.x.x」を配置してください。 www.javadrive.jp

  4. フォルダ名を「jdk-x.x.x」から「jdk」に変更します。

この時点でフォルダ構成はこのようになっています。

鯖フォルダ
 └ jdk
   ├ bin
   └ など

サーバーを作る

  1. 「鯖」の中に新しいフォルダを作ります。名前は何でもいいです。ここでは「新しいフォルダー」とします。

  2. Minecraftランチャーを起動します。「起動構成」「新規作成」をクリックします。

  3. 任意のバージョンを指定して「サーバー」をクリックします。

  4. ダウンロードされたファイル「server.jar」を「新しいフォルダー」に移動します。

  5. 重要項目1/2 Minecraftのバージョン1.7~1.16.5を使う場合、次のサイトにアクセスして、バージョンに対応するファイルをダウンロードする必要があります。ファイルは「新しいフォルダー」に配置します。
    www.minecraft.net ※ダウンロードするファイルがブラウザ上で開かれる場合は、Ctrl+Sで保存します。

  6. メモ帳を起動します。 pc-karuma.net

  7. 重要項目2/2 Minecraftのバージョンに応じたコマンドをコピペします。
    1.18.1以上、1.7未満
    ..\jdk\bin\java.exe -Xmx2G -Xms2G -jar server.jar --nogui
    1.17~1.18
    ..\jdk\bin\java.exe -Xmx2G -Xms2G -Dlog4j2.formatMsgNoLookups=true -jar server.jar --nogui
    1.12~1.16.5
    ..\jdk\bin\java.exe -Xmx2G -Xms2G -Dlog4j.configurationFile=log4j2_112-116.xml -jar server.jar --nogui
    1.7~1.11.2
    ..\jdk\bin\java.exe -Xmx2G -Xms2G -Dlog4j.configurationFile=log4j2_17-111.xml -jar server.jar --nogui

  8. 「起動.bat」の名前で、「新しいフォルダー」に保存します。

  9. 「起動.bat」をダブルクリックします。黒い画面が現れ、数秒経つと消えます。このとき「新しいフォルダー」内にいくつかファイル・フォルダーが追加されます。

  10. 追加された「eula.txt」を開きます。ファイル末尾の「false」を「true」に書き換え、上書き保存します。

この時点でフォルダ構成はこの様になっています。

鯖フォルダ
 ├ 新しいフォルダー
 │ ├ eula.txt
 │ ├ server.jar
 │ ├ server.properties
 │ ├ 起動.bat
 │ └ など
 └ jdk

サーバーの運用

サーバーの起動~停止

「起動.bat」をダブルクリックすると、黒い画面が現れます。これがサーバーです。

しばらくして、サーバーの起動が完了したら画面上に「Done」と表示されます。Minecraftからサーバーに接続してみましょう。アドレスは「localhost」です。

localhost」は特殊なアドレスで、サーバーを動作させているコンピュータでのみ機能します。他のプレーヤーに関しては、まだサーバーを公開していないため、サーバーにアクセスすることができません。

サーバーに接続できることが確認できたら、サーバーを停止しましょう。黒い画面にはコマンドを入力することができます。stopと入力してエンターキーを押します。ワールドが保存され、黒い画面は消えます。

※「このアプリの機能のいくつかが Windows Defender ファイアウォールでブロックされています」というダイアログが出ることがありますが、「キャンセル」で問題ありません。

コマンドについて

サーバーを停止する際stopと入力するように、コマンドによってサーバーを管理することができます。

よく使うコマンド 説明
difficulty (難易度) easy hard normal peaceful
gamemode (ゲームモード) (プレイヤー名) survival creative adventure spectator
help コマンドの一覧を表示
kick (プレイヤー名) プレイヤーを追い出す
op (プレイヤー名) オペレータ権限を与える deopで剥奪
stop サーバーを停止する
time set 0 時刻を朝にする
tp @a (プレイヤー名) 指定したプレイヤーのいるところに全員集合
weather clear 天気を晴れにする

コマンドについて詳細はこちら。 minecraft.fandom.com

サーバー設定について

フォルダ内の「server.properties」ファイルを編集することで、サーバーの設定を変えることができます。サーバー起動中に変更した場合、再起動するまで適用されません。

よく使う設定項目 設定値
difficulty easy hard normal peaceful
gamemode survival creative adventure spectator
hardcore true(有効) false(無効)
max-players サーバーの定員
motd サーバーの説明(半角英数字のみ)
pvp true(有効) false(無効)

difficultyやgamemodeに関してはコマンドで設定することもできますが、「server.properties」には保存されないため、再起動すると設定が元に戻ります。

サーバー設定について詳細はこちら。 minecraft.fandom.com

ホワイトリストについて

これからサーバーを公開する上で、ホワイトリストを有効にすることを推奨します。ホワイトリストを有効にすることで、指定したプレイヤー以外サーバーに接続できないようになります。

  1. 「server.properties」の項目「white-list」を「true」に設定して保存します。

  2. サーバーを起動します。

  3. サーバーに接続できないようになっているか確認します。
    ※オペレータ権限のあるプレイヤーはホワイトリストに登録されていなくても、サーバーに接続できるようです。

  4. コマンドwhitelist add (プレイヤー名)を入力します。

ワールドを変更する

サーバーは「world」と名前のつけられたフォルダを読み込む事になっています。

シングルプレイで使っていたワールドや配布ワールドを使いたいときは、元からある「world」フォルダを削除などした上で、使いたいワールドフォルダを配置し「world」に改名することで、置き換えます。

シングルプレイのワールドデータは、エクスプローラーのアドレスバーに「%appdata%\.minecraft\saves」と入力することで見ることができます。

サーバーを複数作る

用途によってワールドや設定を使い分けたい場合は、上記の手順を繰り返して、サーバーを複数作ると良いでしょう。

フォルダの分け方の例です。

鯖フォルダ
 ├ サバイバル用
 │ ├ world
 │ ├ server.jar ※1.19.3
 │ ├ server.properties ※サバイバル、ノーマル
 │ ├ whitelist.json ※自分、Aさん、Bさん
 │ ├ 起動.bat
 │ └ など
 ├ PVP用
 │ ├ world ※配布ワールド
 │ ├ server.jar ※1.16.5
 │ ├ server.properties ※アドベンチャー、ピースフル
 │ ├ whitelist.json ※自分、Cさん、Dさん
 │ ├ 起動.bat
 │ └ など
 └ jdk

※現在の設定では、サーバーを複数同時起動することはできません

サーバーの公開

ngrok(エングロック)というサービスを利用してサーバーの公開をします。

  1. 次のサイトにアクセスして「Sign up for free」をクリックします。 ngrok.com

  2. 画面に従い、アカウントを作成します。

  3. ログイン後のページの「Download for Windows」をクリックします。

  4. ダウンロードされたデータを展開し、中身の「ngrok.exe」を「鯖」に配置します。

  5. ログイン後のページの「2. Connect your account」に記載されているコマンドをコピーします。
    ※ユーザーごとに違う内容になっています。

  6. メモ帳を開き、コマンドを貼り付け、「公開.bat」の名前で「鯖」に保存します。

  7. 「公開.bat」をダブルクリックします。一瞬黒い画面が表示されます。

  8. 「公開.bat」を右クリックして、「編集」をクリックします。メモ帳が開きます。

  9. 内容を次のコマンドに書き換えて、上書き保存します。
    ngrok tcp 25565 --region jp

以上で公開の準備が完了です。「公開.bat」をダブルクリックすることで、黒い画面が現れます。これと、サーバーの黒い画面の両方が起動している状態で、サーバーが公開されます。

画面上のアドレス「0.tcp.jp.ngrok.io:xxxxx」を他のプレイヤーに教えましょう。自分がサーバーに接続するときは、変わらず「localhost」でOKです。
※黒い画面でテキストをコピーする場合は、ドラッグで選択して、右クリックするだけでコピーされます。

上記の通り、ホワイトリストの設定をすることをお勧めします。忘れずにどうぞ。

この黒い画面を消すには、Ctrl+Cを押します。

この時点でフォルダ構成はこの様になっています。

鯖フォルダ
 ├ jdk
 ├ 新しいフォルダー
 ├ ngrok.exe
 └ 公開.bat

おわりに

統合版使えばいいよ。