2025年11月28日金曜日

SMB1.0で古くなったNASをバージョンあげて使う方法

NASのファームウエアをアップデートはさすがに聞かないので、代替案として、raspi2をproxyとして利用してみた。

sudo pico /etc/samba/smb.confで設定追加
[oldnas_proxy]
   path = /mnt/oldnas
   read only = no
   guest ok = no
   valid users = pi
   force user = pi
   force group = pi
   create mask = 0664
   directory mask = 0775
   min protocol = SMB2_02
   max protocol = SMB3

sudo smbpasswd -a pi
sudo systemctl restart smbd

sudo mkdir -p /mnt/oldnas
sudo mount -t cifs -o username=NASのユーザー名,password=NASのパスワード,vers=1.0,uid=pi,gid=pi,file_mode=0664,dir_mode=0775 //192.168.1.アドレス/disk /mnt/oldnas

上記のマウントは、シャットダウンで消えるので、再起動で保持するには
sudo nano /etc/samba/nas.credentials
username=ユーザー名
password=パスワード
sudo chmod 600 /etc/samba/nas.credentials

/etc/fstab に追加
//adress/disk  /mnt/oldnas cifs  credentials=/etc/samba/nas.credentials,vers=3.0,uid=1000,gid=1000,file_mode=0664,dir_mode=0775  0  0

マウントテスト
sudo mount -a
ls /mnt/oldnas

2025年11月25日火曜日

Qt 他のOSからのコードの取り込み

 Windowsで作成したコードをLinuxで使う手順:
最初、NewProject>プロジェクトのインポート>既存プロジェクトのインポート
だと思って操作した。しかし、コンパイラのバージョンが一致しないためかうまくいかない。
ChatGPTによるとコマンドラインだけでもできるようだ。
必要なものそろえるには
sudo apt update
sudo apt install qt6-base-dev qt6-base-dev-tools qt6-tools-dev qt6-tools-dev-tools
sudo apt install cmake build-essential ninja-build gdb
cd ~/qtkjog
rm -rf build
mkdir build
cd build
cmake ..
make -j4
これで、IDEに頼らず実行ファイルが動作した。

IDEの設定も、プロジェクト>ビルドと実行の中のDesktop Qt6.10.1というのができていたので、そこのビルド設定>一般マネージャを/home/user/qtkjog/buildと変更
また、実行時の設定>実行ファイルのところを/home/user/qtkjog/build/kjogとして、作業ディレクトリは空欄にしてみた。すると、立ち上げることができた。

ところが、これが、ビルドを消すとうまくいかなので、この方法は不完全なよう。configureがエラーでうまくいかない。

いろいろ、試行錯誤をしながらも、結局、正しくは、
・CMakeLists.txt を開く
・/home/user/qtkjog/build等の名称自動でつくので 必要なものにチェック入れる
・右下にconfigure projectのボタンが出てくるので、これをクリックでOk
・あとは、実行ボタンでOk
じつは、シンプルな操作でした。(ChatGPTはcmakeのconfigureがどっかにあるはずだと教えてくれるのだけど、新しいIDEにはそれは見つけられず、結局このconfigure projectのボタンがそれに該当するものだったらしい。configure>makeの手順はいつの時代になっても変わらないようだ。)

Windowsでは動作したのに、Ubuntuでは動作しないものもあった。C++の派生クラスの扱いがOSで微妙に違いがあるらしく、そのためらしい。こういうものは、なかなかバグを発見しずらく、気づくまで時間がかかったしまった。

2025年11月24日月曜日

Linux Mint へのMultiWriter5300のプリンタ追加(覚書)

 LinuxMint標準のドライバだけではうまくいかなかったが、次の手順で設定できた。CUPS を使用。

 NECの公式ウェブサイトからMultiWriter 5300向けのLinuxドライバーをダウンロードします。通常はRPM形式で提供されます。DEBパッケージを使用
sudo apt update
sudo apt install cups alien
sudo systemctl enable cups.service
sudo systemctl start cups.service
sudo usermod -aG lpadmin your_username(your_usernameを実際のユーザー名に置き換え) 
保存したディレクトリに移動  cd ~/Downloads
↓注!:x.x.xのところはダウンロードしたものに合わせて適宜変更
sudo alien -d nclinuxprint-x.x.x-1.i386.rpm
sudo dpkg -i nclinuxprint-x.x.x-1.deb
エラーあれば sudo apt install -f 
ウェブブラウザを開き、CUPSの管理画面 (http://localhost:631/) にアクセス
「管理」タブをクリック>「プリンターの追加」>認証を求められたら、lpadminグループに追加したユーザー名とパスワードを入力
接続方法を選択:USB接続の場合は**「Local Printers」から、ネットワーク接続の場合は「Network Printers」**からプリンターを選択
ネットワーク接続の場合、自分の場合、ipp://*.*.*.*:631/ippでうまくいった。(*は各自環境に合わせて設定)
「続ける」>プリンターの製造元(NEC)とモデル(MultiWriter 5300)を選択、またはインストールしたPPDファイルをアップロード>画面の指示に従って名前や場所を設定し、インストールを完了>最後にテスト印刷で確認

2025年11月23日日曜日

Qt6 Linuxへのデプロイ

 配布の前段階として、試しにフォームのみのテストコードをデプロイ試してみた。
sudo apt install ninja-build
sudo apt install qt6-base-dev qt6-base-dev-tools
sudo apt install  qt6-tools-dev-tools qt6-l10n-tools
何度か失敗したらrm -rf CMakeCache.txt CMakeFiles/
cd ~/デスクトップ/test           rm -rf build           mkdir build            cd build   でいったん削除
cmake -DCMAKE_PREFIX_PATH="/usr/lib/x86_64-linux-gnu/cmake/Qt6" -DCMAKE_BUILD_TYPE=Release ..  (..はひとつ上にCMakeLists.txtがあることを示している)
make -j8
情況としては
test/
 ├ build/  ←ここで上記コマンド
 │   ├ Makefile
 │   ├ CMakeFiles/
 │   └ myapp (実行ファイル) →これが、このPC環境でなら実行可能になった
 └ CMakeLists.txt   となる

2025年11月20日木曜日

Qt レイアウトについて

    auto *labelLayout = new QHBoxLayout;
    labelLayout->addWidget(new QLabel("削除(左列)"));
    labelLayout->addWidget(new QLabel("適用(右列)"));

    auto *container = new QWidget;
    auto *containerLayout = new QVBoxLayout(container);
    containerLayout->addLayout(labelLayout);
    containerLayout->addWidget(grid);

    scrollArea->setWidget(container);

container:大きいレイアウトの中に入れる対象、containerLayout:その container 内での並べ方の定義 と 考える。

2025年11月18日火曜日

Qt ComboBoxの更新時シグナルを一時的に無視

一時的にシグナルを無効化するには 
QString oldText = cb->currentText();  // 現在の文字を保存
cb->blockSignals(true);  // イベントを一時的に無効化
cb->clear();
cb->addItems(items);
cb->setCurrentText(oldText);  // 元の文字に戻す
cb->blockSignals(false);  // イベント再開

これは、いろんな場面で必要になってくる定石?
QString oldText = cb->currentText();
{
    QSignalBlocker blocker(cb);  // ブロック開始
    cb->clear();
    cb->addItems(items);
    cb->setCurrentText(oldText);
} // ブロック終了と同時に自動復帰
という方法もあるとのこと。

2025年11月17日月曜日

Qtでボタンをグリッド内でDrag&Dropするコード

 よく使いそうな機能なので、ChatGPTといろいろやりとりしながら、BugFixして完成したものです。グリッド内のボタンをDrag&Dropで動かせるので、対応関係の設定などに利用すると便利そうです。


DraggableButton.h

DraggableGridWidget.h

DraggableGridWidget.cpp

mainwindow内のダイアログ起動コード