2026年06月16日

devpath を使ったUSB機器のデバイスファイル名固定

同じ機器を複数つないだ場合、デバイスファイル名の数字は入れ替わることが普通にある。
devpath(物理ポートの番号)を使って、別途デバイスファイル名をつけて固定する方法を記載する。
※ここではシリアルデバイスと想定

まず、/dev/ttyACM0〜/dev/ttyACM2がすでに存在するとして。

目的は/etc/udev/rules.d/99-serial.rules(なければ作る)に以下のような内容を記載する。
ーーーーーーーーーーここから
SUBSYSTEM=="tty", ATTRS{devpath}=="4.2",   SYMLINK+="ttyTH0", GROUP="dialout", MODE="0660"
SUBSYSTEM=="tty", ATTRS{devpath}=="4.1",   SYMLINK+="ttyTH1", GROUP="dialout", MODE="0660"
SUBSYSTEM=="tty", ATTRS{devpath}=="4.3",   SYMLINK+="ttyTH2", GROUP="dialout", MODE="0660"
ここまでーーーーーーーーーー

ATTRS{devpath}の値は udevadm info -a -n (デバイスファイル名) | grep devpath を実行
例:
udevadm info -a -n /dev/ttyACM0 | grep devpath

Udevadm info starts with the device specified by the devpath and then
    ATTRS{devpath}=="4.2"
    ATTRS{devpath}=="4"
    ATTRS{devpath}=="0"
この最初のATTRS{devpath}=="4.2"をそのまま99-serial.rulesに記載することになる。
同様、/dev/ttyACM1がATTRS{devpath}=="4.1" /dev/ttyACM2がATTRS{devpath}=="4.3"だった場合が上記例となる。

記載して保存したら以下を実行
sudo udevadm control --reload-rules
sudo udevadm trigger



ーーーーーー
USBのデバイスリセット
一度クローズすると再オープンに失敗することがある。この場合はUSBリセットが必要。
その場合はUSB バスアドレス(bus/device 番号)が必要

/dev/ttyACM0 → /dev/bus/usb/003/013
/dev/ttyACM1 → /dev/bus/usb/003/008
/dev/ttyACM2 → /dev/bus/usb/003/009
のように、/dev/bus/usb/(バス番号)/(デバイス番号) で表現される。

バス番号は以下で取得
udevadm info -a -n (デバイスファイル名) | grep busnum
例:
udevadm info -a -n /dev/ttyACM0 | grep busnum
    ATTRS{busnum}=="3"
    ATTRS{busnum}=="3"
    ATTRS{busnum}=="3"
の先頭行の3が対象。3桁0パディングは単なる慣習みたいだけど従っておくのが無難

デバイス番号は以下で取得
udevadm info -a -n (デバイスファイル名) | grep devnum
例:
udevadm info -a -n /dev/ttyACM0 | grep devnum
    ATTRS{devnum}=="13"
    ATTRS{devnum}=="5"
    ATTRS{devnum}=="1"
の先頭行の13が対象。これも3桁0パディングは単なる慣習みたいだけど従っておくのが無難

USBデバイス初期化は以下のようなコードで行う。
ttyACM0を初期化したい場合octl(fd, USBDEVFS_RESET, 0)を使う。そのためにopenするが、openの為にUSB バスアドレスが必要だった、という話。

char devices[] =  "/dev/bus/usb/003/013";

int fd = open(devices, O_WRONLY);
if (fd < 0) 
    perror("open");
else
{
    if (ioctl(fd, USBDEVFS_RESET, 0) < 0)
        perror("ioctl");
     close(fd);
}

posted by すら at 22:44| Ubuntu

2026年01月22日

同一容量のSSDのコピー@Ubuntu

マスター側をsda、コピー先をsdbとする

前提
sda1   1MB      ← BIOS/GRUB 用の「bios_grub」領域(GPT用)
sda2   513MB    ← EFI(FAT32)
sda3   1.9TB    ← ext4(Ubuntu本体)


@ GPT/パーティションテーブルをコピー(数秒)
sudo sgdisk --backup=table.gpt /dev/sda
sudo sgdisk --load-backup=table.gpt /dev/sdb

A sdb を一度読み直す(重要)
sudo partprobe /dev/sdb

B 1MB の bios_grub 領域(sda1 → sdb1)を dd でコピー
sudo dd if=/dev/sda1 of=/dev/sdb1 bs=1M status=progress

C EFI パーティション(sda2 → sdb2)を dd でコピー
sudo dd if=/dev/sda2 of=/dev/sdb2 bs=4M status=progress

D ext4 本体(sda3 → sdb3)を partclone で高速コピー
sudo partclone.ext4 -b -s /dev/sda3 -o /dev/sdb3

E 念のため fsck(任意)
sudo fsck -f /dev/sdb3


※Copilot出力

posted by すら at 10:59| Ubuntu

2025年09月24日

組込用Ubuntuに入れておくべきツール

※以下、/path/to や your_program は環境や実行ファイル等にあわせて書き換えること

1)socat (SOcket CAT:標準出力をTCP接続へ渡す)
<使用例>
/path/to/your_program | tee -a output.log | socat - TCP4:127.0.0.1:12345
・your_program 実行して、
・標準出力を 画面に表示しつつ、 outlput.logに 追記
・標準出力を TCP 接続で 127.0.0.1 port 12345  に送信。

※補足
接続は色々設定できる。
標準出力 → TCP へ転送
your_command | socat - TCP:192.168.0.10:5000
標準出力 → ローカルで待ち受け(他プロセスに渡す)
your_command | socat - TCP-LISTEN:5000,reuseaddr,fork
標準出力 → UDP で転
your_command | socat - UDP:192.168.0.10:5000
シリアルコンソール → TCP/UDP へ転送(双方向対応)
socat -d -d /dev/ttyUSB0,b115200 TCP-LISTEN:5000,reuseaddr,fork
TCP → 標準出力(逆方向)
socat TCP-LISTEN:5000,reuseaddr,fork -

リアルタイム性が重要でバッファリングを避ける場合、コマンドにstdbuf -o0を付ける
stdbuf -o0 your_command | socat - TCP:192.168.0.10:5000

途切れ対策
reuseaddr 同じポートで再起動許可の指定
fork 複数クライアント対応(TCPの場合)
を付ける。両方付けた方が無難
なお、 - は標準入出力(コンソール)へ接続を示す

UDPで送出先のポートが閉じるとICMP Port Unreachable が発生して送出側が止まる
止まらなくするには
SEND-TOを使う
socat - UDP-SENDTO:192.168.0.10:5000
raw UDP をs使う
socat -T0 - UDP-SENDTO:192.168.0.10:5000


<決定版>
stdbuf -oL -eL /path/to/your_program | tee -a "logfilename" | socat - UDP-SENDTO:192.168.166.70:5000

2) valgrind (メモリリーク、未初期化メモリの使用、無効なメモリアクセスなどを検出するツール)
<使用例>
 sudo -S valgrind -s --log-file=/path/to/logfile.log --track-origins=yes --leak-check=full --show-leak-kinds=all /path/to/your_program
・管理者権限でyour_program 実行して、
・エラーレポートを標準エラー出力にも表示
・ログを指定ファイルに保存
・未初期化メモリの「発生源」を追跡
・メモリリークの詳細を完全に表示
・すべての種類のメモリリーク(確実、疑わしい、一時的)を表示

3)usbreset    USBデバイスをソフトウエア的にリセット
usbutils をインストールするとついてくる(Ubuntu22.04以降)

4)procinfo    軽量な診断ツール
・procinfo システム統計情報の表示
・lsdev  ハードウエアデバイス情報の取得
・socklist ソケット情報の表示(つかえない環境あり)

5)smartctl
smartmontools をインストールすると利用できる。
sudo smartctl -a /dev/sdX    sdXはsdaなど
•Reallocated_Sector_Ct  (代替セクタ数)
•Current_Pending_Sector(保留中の不良セクタ)     
•Offline_Uncorrectable(修復不能セクタ)     
それぞれが0でなければ交換検討対象

6)tio
シリアル通信専用計量ターミナル
使用例:
tio -t timestamp -l serial.log /dev/ttyUSB0 -b 115200

7)nmap
ネットワーク上の相手がどのポートで何を待っているかを外側から調べるツール
使用例:
nmap 192.168.0.10
出力例:
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
8080/tcp closed http-proxy
443/tcp  closed https

8)netstat
「今この機器がどのポートで通信しているか」を一覧表示するネットワーク診断ツール。
特に “どのポートが LISTEN(待ち受け)しているか” を調べるための道具。
インストールは net-tools
sudo apt install net-tools

使用例: 
netstat -tlnp
オプションは
-tTCP だけ表示
-uUDP だけ表示
-lLISTEN 中のポートだけ表示
-n名前解決せず数値で表示(高速)
-pどのプロセスが使っているか表示


(順次追記予定)
posted by すら at 08:49| Ubuntu

2025年06月17日

systemd 下での自動起動

systemdの下で自動起動する場合の特徴
・Root権限で実行される。
・起動のタイミングを選択できる。

以下、設定方法
自動起動の設定ファイルをauto.service とする

以下のファイルを作成する
/etc/systemd/system/auto.service 
内容 ------------------------------
[Unit]
Description=Auto Boot Script
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=root
ExecStart=/home/(ユーザー名)/auto.boot
WorkingDirectory=/home/(ユーザー名)
Restart=no

[Install]
WantedBy=multi-user.target

内容ここまで --------------------------
上記例は
ネットワークが使えるようになったら起動
起動は一度だけ(指定ソフトが終了してもリブートしない)
起動するのは/home/(ユーザー名)/auto.boot
起動時の作業ホルダは/home/(ユーザー名)
という設定内容。


有効化と起動は以下コマンドを発行
sudo systemctl daemon-reload
sudo systemctl enable auto.service
sudo systemctl start auto.service

ログ確認には以下コマンドを発行
journalctl -u auto.service

auto.boot はスクリプトファイルとしておけば
そのスクリプトファイルの中のアプリをコメントアウトすれば自動起動を暫定停止できる。

auto.boot でタイムサーバー(192.168.0.200)に自動同期させる例
ここから------------------------------
#!/bin/bash

DIRS=/home/(ユーザー名)
DDD=$(date "+%Y%m%d_%H%M%S")

STDOUT="${DIRS}/${DDD}_ntp.txt"
echo "Sync Time Server" >> "$STDOUT"
ntpdate -u -b 192.168.0.200 >> "$STDOUT" 2>&1
ここまで ------------------------------

2025.07.03 追記 --------
他サービスが自PCのポート123を保持してエラー(tpdate[20963]: the NTP socket is in use, exiting)となることがある。この対策として、ntpdate のオプションに -u を追加した。

2025.07.15 追記 --------
おっとどっこい、タイムサーバーに同期させるにはAfter=network-online.targetとしただけではだめでした。
(別記事にします)


posted by すら at 20:47| Ubuntu

2025年06月12日

マルチキャストDNS(mDNS)のホスト名

※以下、UbuntuでもRaspbianOSでも可

mDNS が動作していることで、ホスト名に.local を付けるとアクセスできるようになる。
(IPアドレスの代わりになる)

・マルチキャストDNSの確認
$sudo systemctl status avahi-daemon
Active: active (running)なら動作している。

ホスト名確認
$hostnamectl
レスポンス例
   Static hostname: raspberrypi
         Icon name: computer
        Machine ID: 
           Boot ID: b18df....
  Operating System: Debian GNU/Linux 11 (bullseye)
            Kernel: Linux 6.1.44-v8+
      Architecture: arm64

ホスト名変更
$sudo hostnamectl set-hostname (ホスト名)
$sudo reboot


つまり、仕事場でDHCPで割り振られたIPの時でも、出張先のWifiルーターで割り振られたIPの時でも、同じ名前でアクセスできるということ。便利だねー。

たとえば
持ち運びサーバに名前をつけて、客先納品のCPUから以下のようにマウントすると
MOUNT_POINT="(納品PCのマウントしたい位置にあるホルダ)"
REMOTE="(自サーバーのマウントしたいホルダ)"
USERNAME="(自サーバのsambaログイン名)"
PASSWORD="(自サーバのsambaログインパスワード名)"
sudo mount -t cifs $REMOTE $MOUNT_POINT -o username=$USERNAME,password=$PASSWORD
などと客先納品のCPU上で実行すると、納品用PCにソースを残さず開発できる。

※sambaでguest 設定とかに注意(上記はsamba設定のセキュリティがザルの時の設定)。
 samba設定:ユーザー名/パスワードなどでさらにセキュリティ向上はできる模様。

なお、マウント解除は
sudo umount (自サーバーのマウントしたホルダ)


で、上記の為にcifs-utilsを客先PCに入れる必要があって。それがネットからオフラインのPCの場合は・・・と2つ前の記事につながる。

posted by すら at 23:33| Ubuntu

UbuntuなPCにモバイルルーターをUSBでデザリング

Ubuntu22.04で モバイルルーターをUSB接続で一時的にデザリングをしたいとき
パッと繋いで動いてくれなければ以下を確認する。

1)USB接続されているか確認
$lsusb
モバイルルーターのメーカー名や型番表示がされていればUSBで認識されている

2)モバイルルーターに割り当てられたインターフェース名を取得、状態を取得
$ip a
4: enxc025a: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT  (続く)
上記のenxc025a がインターフェース名、state DOWNが状態。DOWNなら有効化されていない。

3)state DOWN なので インターフェースを有効化
$sudo ip link set (インターフェース名) up
上記例のインターフェースなら
$sudo ip link set enxc025a up

4)有効化できたか?
$ip a show
4: enxc025a: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN (続く)
しばらく時間がかかったり。
UNKNOWN のままだったら
・モバイルルーターのUSBデザリング設定の確認
・ネットワークサービスの再起動
 $sudo systemctl restart NetworkManagere
・USB認識を確認
  $dmesg | grep -l usb
※モバイルルーターが携帯回線につながっていないときはUNKNOWNのままだったりする。

5)IPv4アドレス取得を確認
$sudo dhclient (インターフェース名)
上記例のインターフェースなら
$sudo dhclient enxc025a

6)IPアドレスとデフォルトゲートウェイの確認
$ip r
実行結果例
default via 192.168.100.1 dev enp3s0 proto static
192.168.3.0/24 dev enxc025a proto kernel scope link src 192.168.3.2
192.168.100.0/24 dev enp3s0 proto kernel scope link src 192.168.100.51

モバイルルーターの接続enxc025aには192.168.3.2というIPアドレスが割り当てられている。
有線enp3s0には192.168.100.51というアドレスが割り当てられている
が、デフォルトゲートウエイがenp3s0の192.168.100.1になっている。
→USBデザリングからインターネットに出ていけない

7)モバイルルーターのIPアドレスを調べる
$ip r の出力結果から、そのインターフェースにつながっているモバイルルーターのIPアドレスを推察する。

$ip rの実行結果に以下の行が含まれるなら
192.168.3.0/24 dev enxc025a proto kernel scope link src 192.168.3.2
ルーターのIPアドレスは192.168.3.1だろうと推測されるので、pingしてつながっているか試す。
$ping 192.168.3.1  
※このアドレスはルーター毎で違う

8)デフォルトゲートウェイの書き換え
現在のデフォルトゲートウェイの指定削除
$sudo ip route del default

デフォルトゲートウエイの指定
$sudo ip route add default via (IPアドレス) dev (インターフェース名)
上記例のインターフェースなら
$sudo ip route add default via 192.168.3.1 dev enxc025a
※USBデザリング機のIPは機器の設定だったりpingだったりで確認すること。

9)確認
$ip r
デフォルトゲートウエイが指定のIPアドレスになっていることを確認ネームサーバー

GoogleのネームサーバーにPingしてみる。
$ping -c 4 8.8.8.8


※これらの設定はテンポラリなもので再起動だったり電源OFFで消失する。
 永続化したければnetplanで設定する。
posted by すら at 22:56| Ubuntu

パッケージ操作色々

オフラインのUbuntuにパッケージをインストールするときの色々

1)そもそもそのパッケージ、すでにインストールしてない?
パッケージがインストール済みかを調べる
apt list --installed | grep (パッケージ名)

2)そのパッケージが依存しているパッケージを調べる
apt show (パッケージ名)

3)パッケージ探し:ネットにつながったPCで
以下のサイトで必要なパッケージを調べる→ダウンロードページまでいける
https://packages.ubuntu.com/
Ubuntu22.04 は Jammy Jellyfish
※Distribution名(コードネーム)がいる。
cat /etc/os-release | grep VERSION_CODENAME

4)同じUbuntu をインストール済みのPCがある場合 
.deb ファイルをダウンロード&コピーしてインストールする
sudo apt update
sudo apt install --download-only (パッケージ名)
※--download-only を付けるとパッケージとその依存関係がすべて /var/cache/apt/archives/ に .deb ファイルとして保存される。インストールはされない。

5)パッケージをdebファイルからインストールする
パッケージのあるホルダへ移動したあと
sudo apt install ./(パッケージ名).deb

6)おっと要らないパッケージだった(アンインストール)
パッケージのみ削除、設定ファイルを残す
sudo apt remove (パッケージ名) 
完全に削除
sudo apt purge (パッケージ名) 
削除後に不要な依存関係を整理したいときは
sudo apt autoremove
sudo apt clean






posted by すら at 22:17| Ubuntu

2025年04月23日

ビルドと同時にコピーするmakefileの例

(AIからの情報取得、未検証)
AAAユーザー:開発者
BBBユーザー:使用者
としてAAAユーザーのobj/prg のビルド完了と同時にBBBユーザーのobj/progへコピーするmakefileの例
ポイントはパーミッションの設定とファイル/グループの所有者


TARGET = prog
SRC_DIR = /home/AAA/obj
DEST_DIR = /home/BBB/obj

all: $(TARGET)
 (従来のallの処理をここで)

    cp $(SRC_DIR)/$(TARGET) $(DEST_DIR)/$(TARGET)
    chmod 755 $(DEST_DIR)/$(TARGET)
    chown BBB:BBB $(DEST_DIR)/$(TARGET)

$(TARGET): main.o
    $(CXX) -o $(TARGET) main.o

clean:
    rm -f $(TARGET) main.o
posted by すら at 09:34| Ubuntu

2024年09月20日

Linuxの時刻関係の関数で思わぬエラーに悩まされたら

Linuxの時刻関係の関数でエラーが出る場合、構造体のクリア不足が原因かも。

たとえば
struct tm
struct timespec
などの構造体を使う場合は0クリアを必須としたほうが良い。

mktimeなど、tm構造体でごみが入っていて、それが範囲値を超えていると失敗するときがある。

まあこれに限らず、あらゆる構造体は0クリアを最初(宣言時)にしておくのが無難なようです。
(クラスメンバならコンストラクタ内でクリア、でしょうか)

構造体のクリアは = {0}; が簡単でよろしいです。
たとえば。
struct tm currentTime = {0 };
という感じ。

posted by すら at 13:43| Ubuntu

2024年09月18日

Linux系64bitの罠

C/C++でプログラミングの際、Linux系64bitの環境だと、long は 8byte サイズとなる。
(サイズ的にはlong long と同じ)

Linux系64bitはLP64データモデルというものになるそうです。
※Windowsの64bit は ILP32データモデルはint と long は32ビット(4バイト)で、ポインタは64ビット(8バイト)となる.

結果、他機器と構造体メモリイメージでやりとりしている場合、32bitでは動いていたが64bitOSにすると動かなくなったり。
この場合の解決案として
1)int に書き換え
  long を int に、unsigned long を unsigned int にそれぞれ書き換える
若しくは
2)stdint を使う。
  #include <stdint.h>
  として
  unsigned long  → uint32_t
  long  → int32_t
  と書き換える。

なお、uint32_t は単独の型であるため、 ほかの型から入れる場合や出す場合はキャストが必要となる。

ーーーーー
最近のサンプルコードで、やたらint32_t とかの stdint 定義の型が出てくる理由はここか!とわかった気がした。
LP64データモデルはintが32bit固定なのも気持ち悪い・・・。

posted by すら at 10:13| Ubuntu

2024年09月05日

バックグランドで起動

Ubuntuの端末でバックグランド起動は、コマンドの最後に " &" をつける。
端末を閉じても実行を続ける場合は nohup を先頭に付ける。

nohup sleep 60 > aaa.txt &

ほかにも
・screen や tmux を使う方法
・disown を使う方法
などがある
posted by すら at 14:14| Ubuntu

2024年04月10日

snapストアでUpdateが出るがインストールできない

Ubuntu22.04のsnapストアでアップデートが表示され、アップデートをクリックするも「アップデートをダウンロードできません:ソフトウエアをインストールする権限がありません」と断られてしまうときの処理。

端末で以下を実行する
sudo snap remove snap-store && sudo snap install snap-store

posted by すら at 10:43| Ubuntu

ハードに関係する色々

それぞれ sudo か su になって実行するのが無難っぽい。
(IOポートが0表示されたりする)

/procホルダ:メモリに作られるシステムホルダ、疑似的なファイルシステム。この中にあるファイルを使うもの。
cat /proc/cpuinfo          cpuの情報
cat /proc/meminfo      メモリ使用状態
cat /proc/iomem      IOメモリーマップ
cat /proc/ioports     IOポート領域リスト
cat /proc/interrupts       IOデバイス別割り込み回数記録
参照:https://manpages.ubuntu.com/manpages/jammy/ja/man5/proc.5.html
PCIバスおよびすべてのデバイスの情報を表示する
lspci -vvv
lspciの結果から(ほにゃらら)の内容だけ抜き出す
lspci | grep (ほにゃらら)
例:結果からEthernetの内容だけ抜き出す
lspci | grep Ethernet

参照
:https://manpages.ubuntu.com/manpages/bionic/ja/man8/lspci.8.html

USBの接続情報を表示する
lsusb -v -t
参照:https://manpages.ubuntu.com/manpages/noble/en/man8/lsusb.8.html

各デバイス情報(DMA,IRQ,Port)
lsdev

ハードウエア全体の情報
lshw

CPU1情報
lscpu

CPU利用率
top
※ctrl+C で止めるまで表示し続ける

ストレージ&パーティション
lsblk

システム情報 カーネルVerとか。
uname -a

ブート中にカーネルが出すメッセージの一覧
dmesg
シリアルポートに関係して色々
https://tldp.org/HOWTO/Serial-HOWTO.html

続きを読む
posted by すら at 10:03| Ubuntu

2024年04月09日

PCIバスとIPアドレス(PCM-3365)

忘れがちなのでメモ。

PCIバスに何か追加すると(結果的に)PCIバスにぶら下がっているイーサネットのデバイス名が再割り当てされ、結果デバイス名が違うので繋がらないという事態に。

PCIバスのデバイスに変更をぶちかましたときは、キーボード、マウス、ディスプレイ接続にを忘れずに、ということです。
※ISAバスは関係ないので変化しませんでした。
posted by すら at 09:08| Ubuntu

2024年03月06日

C言語から WatchDog(SoftDog)をコントロール

1.ネットにつなげてインストール
sudo apt install watchdog

2./etc/default/watchdog設定
sudo nano /etc/default/watchdog
watchdog_module="none"
→watchdog_module="softdog"
に変更して保存

3./etc/sysctl.conf設定
sudo nano /etc/sysctl.conf
末尾に以下追加して保存 ※設定内容はググって吟味のこと。
kernel.panic = 60
kernel.panic_on_oops = 1
kernel.panic_on_unrecovered_nmi=1
kernel.unknown_nmi_panic=0
kernel.panic_on_io_nmi=1
kernel.softlockup_panic=1
kernel.hung_task_panic=1
vm.panic_on_oom=2

4.sysctl反映
sudo sysctl -p

5.watchdog へ反映
sudo /etc/init.d/watchdog stop
sudo /etc/init.d/watchdog start

6.状態チェック
sudo /etc/init.d/watchdog status

7.プログラミング例
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

void  watchdog()
{
    int fd=open("/dev/watchdog",O_WRONLY);
    if(fd==-1)
    {
        perror("watchdog");
        exit(1);
    }
    while(1)
    {
        write(fd,"\0",1);
        fsync(fd);
        sleep(10);
    }
}

停止時は"\0"の代わりに"V"を書いてcloseして抜ける
write(fd,"V",1);
fsync(fd);
close(fd);

posted by すら at 18:18| Ubuntu

2024年03月04日

ioポートのアドレスを見る。sudoでみる。

dmesg でPCIバスをおっかけるのもありますが。

su になって(ここ重要)
cat /proc/ioports
で見る。
suでないときは、アドレスがすべて0で表示されるので注意。

ほかに
lsdev
(入ってなければ sudo apt install procinfo で入れる)
lspci、lsusb
なども使えるとええ感じかもしれません。

アドレスが0表示なのは su になれば解決する模様。

なお /proc シリーズも色々あるようだ。

[2024/04/10 注記]
以下に纏めなおしました。
http://slapper.sblo.jp/article/190850640.html


posted by すら at 23:45| Ubuntu

指定拡張子を纏めて書き換える

指定ホルダの拡張子を纏めてかきかえる場合。

まずは抽出。
/varホルダで拡張子がj_のものを探す場合の例
find /var -name "*.j_"

出てきたリストのホルダに移動して、まとめて書き換える。
例えば/var/www/html/に”.J_”拡張子のものがあった場合
cd /var/www/html/
rename "s/j_/js/;" *.j_

なお、renameは標準では入ってないので追加でインストールする必要がある
sudo apt install rename

posted by すら at 15:58| Ubuntu

2024年02月25日

Ubuntuの過去のバージョンのダウンロード

以前も記事にしたけど、改めて。

posted by すら at 22:26| Ubuntu

2024年02月09日

xrdp のインストール

Windowsからのリモートデスクトップ接続に対応するxrdpのインストール。

sudo apt install xrdp
sudo gedit /etc/xrdp/xrdp.ini
autorun= の行を探し、autorun=xorg とする。
[Xorg]セクションの port を port=ask-1 とする。

ーーーー
port=-1のデフォルトでは接続毎にセッション(画面)が生成される。
port=ask-1とすることで前回ログインしたときのセッションが表示される。
ーーーー
Ubuntu22.04.2で確認した。

posted by すら at 11:58| Ubuntu

2024年01月29日

Ubuntu22.04.2のC++コンパイルでの#if 0コメント

Ubuntu22.04.2でC++をコンパイルするとき、#if 0~#endif の間の文字コードでエラーが発生することがある。
どーせこのブロック中はコンパイルされんと思って全角でがりがりコメント記号使わずにコメント書いている場合がそう。
全角でコメントとか書いてるとUTF8で保存してても「・」とかでエラーになってうざい。
昔のバージョンはちゃんと#if0~#endifの間は完全に無視してくれてたのですが。

/* ~ */ で囲んだりで何とか対応するしかない模様。なんぎやな。


posted by すら at 16:20| Ubuntu