2025年4月20日日曜日

サポートが終わってしまう初代 Surface GOにDebian GNU/Linuxをインストールしてみる

Surface GOのWindowsサポートが終わってしまうのでDebian GNU/Linuxを入れてみました。
趣味でデスクトップはMATEにしてましたがGNOMEに変えました。

いるもの。

USB Type CのUSBハブ
16GB程度のUSBメモリ2個
USBキーボード
USBマウス

RufusなどでUSBメモリを下記のisoイメージで起動可能にする。


あと、無線LANやBluetoothのドライバを動作させるためのファームウェアをダウンロードしておき、FAT32とかでフォーマットしておいたもう一つのUSBに展開しておく。


(インストール)

ファームウェアを要求されたら読み込むようにする。

インストール完了したらUSBメモリをすべて抜き、USBマウスとキーボードを挿した状態にする。

(以下インストール後の作業)

apt-get update

apt-get install curl

echo deb [arch=amd64 signed-by=/usr/share/keyrings/google-chrome.gpg] http://dl.google.com/linux/chrome/deb/ stable main | sudo tee /etc/apt/sources.list.d/google-chrome.list

apt-get install google-chrome-stable

apt-get install blueman

# Tangoアイコンが好き
apt-get install tango-icon-theme

# L2TPでVPNやりたいから
apt-get install network-manager-l2tp-gnome

# VPN越しにリモートデスクトップやりたいから
apt-get install remmina

--- 以下はMATEの場合 --
apt-get install xinput

apt-get install onboard

スクリーンセーバーでonboardを使えるようにする

gsettings set org.mate.screensaver embedded-keyboard-enabled 'true'
gsettings set org.mate.screensaver embedded-keyboard-command 'onboard -e'

/etc/lightdm/lightdm-gtk-greeter.conf でonboardを呼び出す設定を作成
keyboard=/usr/bin/onboard

/opt に rotate-screen.sh という名前で以下のシェルスクリプトを作る

#!/bin/bash
rotation=$(xrandr -q --verbose | grep eDP | egrep -o "(normal|right)" | head -1)
if [ "$rotation" = "normal" ] ; then
    xrandr -o right
    xinput set-prop 'ELAN9038:00 04F3:261A touch' 'Coordinate Transformation Matrix' 0 1 0 -1 0 1 0 0 1
else
    xrandr -o normal
    xinput set-prop 'ELAN9038:00 04F3:261A touch' 'Coordinate Transformation Matrix' 1 0 0 0 1 0 0 0 1
fi

作ったシェルスクリプトに実行権限をつける

chmod a+x /opt/rotate-screen.sh

MATEが起動したときに必ずrotate-screen.shを起動するように設定。
mate-session-propertiesを起動して/opt/rotate-screen.sh を登録する。
これをしておかないと起動したときに画面とタッチがずれて困るときがある。

デスクトップに以下の内容のファイル(rotate.desktop)を置く。
このアイコンをダブルクリックすれば画面が90度回転する。

[Desktop Entry]
Type=Application
Terminal=true
Name=rotate-screen
Exec=/opt/rotate-screen.sh
StartupNotify=false


2025年4月16日水曜日

原因不明だがWindows 10やWindows 11がUDPでブロードキャストしまくる件の暫定対応

組み込み系機器(Wi-Fi APなど)がネットワークに繋がらなくなったりフリーズしたりする症状が発生したのでWiresharkで覗いたところ、Windows 11マシンがやたら22222ポートと10004ポート、3289ポート宛にUDPでブロードキャストしていた。
Windows 10では起きていない感じだが詳細不明。

とりあえず発生しているマシンで以下のプログラムを管理者権限で動かしてもらい上記ブロードキャストを強制的に発信しないようにしてもらった。

下記のプログラムをコンパイルするにはVisual Studio 2022にて「コンソールアプリ(.NET Framework)Visual Basic」でプロジェクトを作ってCOMのNetFwTypeLibを参照する必要があります。

Imports NetFwTypeLib

Module Module1

    'Private Const NET_FW_IP_PROTOCOL_ICMPv4 = 1
    'Private Const NET_FW_IP_PROTOCOL_TCP = 6
    Private Const NET_FW_IP_PROTOCOL_UDP = 17
    Private Const NET_FW_ACTION_BLOCK = 0
    'Private Const NET_FW_ACTION_ALLOW = 1
    'Private Const NET_FW_RULE_DIR_IN = 1
    Private Const NET_FW_RULE_DIR_OUT = 2
    'Private Const NET_FW_PROFILE2_DOMAIN = 1
    'Private Const NET_FW_PROFILE2_PRIVATE = 2
    'Private Const NET_FW_PROFILE2_PUBLIC = 4
    Private Const NET_FW_PROFILE2_ALL = &H7FFFFFFF

    Public Sub BlockUDP(ByVal RuleName As String, ByVal RuleDescription As String, ByVal RulePort As Long)

        Dim fwPolicy2 As Object = CreateObject("HNetCfg.FwPolicy2")
        Dim NewRule As Object = CreateObject("HNetCfg.FWRule")
        Dim RulesObject As Object = fwPolicy2.Rules

        NewRule.Name = RuleName
        NewRule.Description = RuleDescription
        NewRule.Protocol = NET_FW_IP_PROTOCOL_UDP
        NewRule.Direction = NET_FW_RULE_DIR_OUT
        NewRule.RemotePorts = RulePort
        NewRule.Grouping = "@firewallapi.dll,-23255"
        NewRule.Profiles = NET_FW_PROFILE2_ALL
        NewRule.Enabled = True
        NewRule.Action = NET_FW_ACTION_BLOCK

        Try
            RulesObject.Add(NewRule)
        Catch ex As Exception
            WriteLine(ex.Message & vbNewLine & ex.StackTrace)
        End Try

    End Sub

    Sub Main()

        BlockUDP("Block 22222", "", 22222)
        BlockUDP("Block 10004", "", 10004)
        BlockUDP("Block 3289", "", 3289) 'ADD NEW
        
    End Sub

End Module