2022年12月23日 星期五

for ubuntu :把script安裝到開機後的工作,如同service一樣

 參考本文 
這次我們是把昨天做好的wireguard vpn 介面啟動安裝到開機程序裡
文件: /usr/local/bin/start_wg_vpn.sh  ,權限設定為744
-----------------------------------------------
#!/bin/bash
wg-quick up wg0   <--看你昨天設定好的config檔叫什麼
-----------------------------------------------
文件 /etc/systemd/system/start_wg_vpn.service 權限設定為664
----------------------------
[Unit]
After=network.target
[Service]
ExecStart=/usr/local/bin/start_wg_vpn.sh
[Install]
WantedBy=default.target
------------------------------
設定好文件及其權限後,還要裝入systemctl
-----
$ sudo systemctl daemon-reload
$ sudo systemctl enable start_wg_vpn.service
-----
重開機後,檢查網路有沒有起來,就john了

2022年12月22日 星期四

ubuntu 安裝wireguard client 時遇到的問題

 wireguard透過wg-easy的docker化安裝,一切變得方便多了
參考這則影音,一下子就裝好了.

不過,在ubuntu client安裝時就有那麼點小麻煩了
(我們已經先用「apt install wireguard」安裝了)

以root身份(指令 sudo -i )  在/etc/wireguard裡設定好了myWG.conf後(就是從剛才wg-easy自架的vpn server網頁加好的client定義下載的conf檔copy出來貼就好,別緊張),退駕回到正常的身份後

執行「sudo wg-quick up myWG」以啟動網路wg介面,出現以下訊息:

----------------------------

[#] ip link add myWG type wireguard

[#] wg setconf myWG /dev/fd/63

[#] ip -4 address add 10.8.0.3/24 dev myWG

[#] ip link set mtu 1420 up dev myWG

[#] resolvconf -a myWG -m 0 -x

/usr/bin/wg-quick: line 32: resolvconf: command not found

[#] ip link delete dev myWG  <--網路介面被移除!!

----------------------------

這時候只要再一行指令「sudo ln -s /usr/bin/resolvectl /usr/local/bin/resolvconf」就可以解決這個問題了

參考出處在此

一起加油吧


2022年11月18日 星期五

在hyper-V修改了硬碟大小後,怎麼去調整ubuntu的作業系統磁碟空間

 在你把vm (ubuntu)關機,調整硬碟大小之後(如下圖步驟),空間不夠的問題就這樣完成了嗎?



不,還沒完:因為作業的是OS partition,所以有點不一樣,不能只用「Disks」或是gparted來作業

,以「Disks」而言,會「on-line shrinkig not supported (udisks-error-quark,0 )」錯誤

事實上這跟我們之前在用virtualbox的ubuntu調整partition的動作很像,參考以下步驟:

1.一樣,是去terminal,用「sudo -i」切換成root 角色

2.用「fdisk -l」(是list 的小寫L,不是數字1)查出你要調整的disk number

---舉例,以下只看「/dev/sda多少」那裡,其他的別看----

Device      Start       End   Sectors  Size Type

/dev/sda1  227328 125827071 125599744 12.9G Linux filesystem   <--我們要調整大小的硬碟

/dev/sda14   2048     10239      8192    4M BIOS boot

/dev/sda15  10240    227327    217088  106M EFI System

----
3.用「parted」去作業(GUI application就是差那麼一點點....)
然後就跟我們之前那篇resize vdisk的作法一樣
----
user@server:~# parted
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) resizepart
Partition number? 1  <--要調整的partition number「/dev/sda1」
End? [26.8GB]?   <--這地方要自己輸入,不能只按enter,
因為parted 是不知道你有多少空間可以用 
(在上一個指令「fdisk -l」裡「Disk /dev/sda: 30.25 GiB」就是我們可用(用步驟1改的vdi大小)的大小,
所以請在此填入32.25G)
(parted) quit
Information: You may need to update /etc/fstab.
-----
4.用「pvresize /dev/sda1」comfirm動作
(或許不用,因為它出現了錯誤訊息 
Failed to find physical volume "/dev/sda1".
  0 physical volume(s) resized or updated / 0 physical volume(s) not resized )
5.回去gparted看一下,硬碟空間就已經被調整了(也就是不因online狀態而無法調整了)
如果不滿意,再拉一拉,改改大小,apply 一下,就完成了

當然WSL2不是不好,只是我習慣在xwindow的desktop下做其他事(像是接一些設備啦、他機連入啦....)
所以還是不免加上了hyper-V vm了

   一起加油吧



2022年11月10日 星期四

好工具介紹:封鎖 ctrl + 空白鍵 以解決輸入法切換的小工具

 最近剛買台新筆電,也灌了win11,可是最麻煩的中文輸入法遇到ctrl + space就切換的問題

我真的找了很多地方試了很多方法都沒解,甚至連改registry key這事都做了,還是一樣

(沒辦法,新筆電很容易按錯鍵)

好在這問題一堆人問,也有熱心人士開發出這樣tweak工具--PowerToys ,參考這裡的設定




當然這軟體你也看出來他真的是包山包海了,有需要您再慢慢試了

至少解決我這手殘一族的中打打到一半出現「不知所云」的現象了 

請享用




2022年9月6日 星期二

For python--一直keyboard.Events() get key卻出現「Can't connect to display ...... : b'Maximum number of clients reached」問題

最近在試python的key board event ( in ubuntu) ,code如下
---------------------------
...
...
    while(True):
        with keyboard.Events() as events:    
            try:
                # Block at most 0.1 second
                event = events.get(0.1)
                if event is None:
                    if axnCode=="STOP"  or  axnCode=="":
                        continue
                    lastStopCount+=1
                    if lastStopCount>=2 :
                        lastStopCount=0
                        axnCode="STOP"
                else:
                    print('Received event {}'.format(event))
                    if(event.key==keyboard.Key.esc):
                        break
                    lastStopCount=0
                    if(event.key==keyboard.Key.left ):
                        axnCode="LEFT"    
                    if(event.key==keyboard.Key.right ):
                        axnCode="RIGHT"                        
                    if(event.key==keyboard.Key.down ):
                        axnCode="DOWN"                                            
                    if(event.key==keyboard.Key.up ):
                        axnCode="UP"                                                                            
            except:
                print("unknown exception")
---------------------------
鍵盤動作(上下左右)訊息是很正常地捕捉到,閒置也正常反應出來,
真的是「get key取碼 一時爽,一直get key一直爽」
不過....
剛開始跑是沒問題,不過....幾秒後卻出現這樣的錯誤訊息
--------------------------------
Traceback (most recent call last):
  File "/usr/lib/python3.10/threading.py", line 1009, in _bootstrap_inner
    self.run()
  File "/home/....../.local/lib/python3.10/site-packages/pynput/_util/__init__.py", line 210, in run
    self._run()
  File "/home/....../.local/lib/python3.10/site-packages/pynput/keyboard/_xorg.py", line 545, in _run
    super(Listener, self)._run()
  File "/home/....../.local/lib/python3.10/site-packages/pynput/_util/xorg.py", line 383, in _run
    self._display_record = Xlib.display.Display()
  File "/home/....../.local/lib/python3.10/site-packages/Xlib/display.py", line 80, in __init__
    self.display = _BaseDisplay(display)
  File "/home/....../.local/lib/python3.10/site-packages/Xlib/display.py", line 62, in __init__
    display.Display.__init__(*(self, ) + args, **keys)
  File "/home/....../.local/lib/python3.10/site-packages/Xlib/protocol/display.py", line 129, in __init__
    raise error.DisplayConnectionError(self.display_name, r.reason)
Xlib.error.DisplayConnectionError: Can't connect to display ":10.0": b'Maximum number of clients reached'
---------------------------------
真的是想不通,明明只是read key,跟Display有什麼關係啊...
是有關係,畢竟pynput是要連接到xwin(xserver), 才能接收事件.所以會有connect問題
這時,才萬別想去改「/etc/X11/xorg.conf」.問題不在那裡
(而且ubuntu 22.04 預設是沒有xorg.conf,想要用 Xorg -configure產生Xorg.conf很多程序要做....我放棄了,但也好在沒產出 & 修改xorg.conf,不然又被誤導,走不少冤枉路了)
「所以,要改用別的python module來read key 嗎?」
「不用,只要一個小小的步驟就解決了」
------Before----
    while(True):
        with keyboard.Events() as events:    
            try:
                ...
                ...
            except:
               ....
-----After---
   with keyboard.Events() as events:    
        while(True):
             try:
                 ...
                 ...
             except:
               ....
-----------------------------
是的,就這麼簡單,如同c#對於using(.....)資源總是放在迴圈外,
python的「with」也請儘量放在while/for 外面,否則資源來不及回收就又open新的,那一定會入不敷出的

2022年8月31日 星期三

For ubuntu 怎麼安裝gstream rtsp server?

  你應該知道用git clone的方式把git respostitory 複製到你的local來make & build

但面對gst-rtsp-server這個project 就沒看到configure檔,更別說make & make install了
事實上只是要多個步驟「git checkout 1.13.91」之後你便會看到「autogen.sh」這東西,接著就是照之前安裝的過程
詳細可以參考這篇 can't build gst-rtsp-server  裡面的answer那部分 (已親測 OK) 
 安裝後,請cd 到gst-rtsp-server/examples裡試用test-launch,
如:要使用usb camera來做stream的資料源
------------server--------------------------------
./test-launch "v4l2src device=/dev/video1 ! video/x-raw,format=YUY2,width=640,height=480 ! videoconvert ! x264enc ! rtph264pay name=pay0 pt=96"
---------------client------
gst-launch-1.0 playbin uri=rtsp://server所在的ip:8554/test
(別忘了server要開port --指令「 sudo ufw allow 8554 」)

基本上這樣就會出現stream player了
如果是 client (gst-launch)出現「"Missing element: H.264 (High 4:2:2 Profile) decoder"」錯誤的話
請安裝plug in 如
「sudo apt-get install gstreamer1.0-libav」
這樣基本上的 gst rtsp server & client就大功告成了,

只是.....辛苦了半天,跟螺絲兔(ROS2)的image message比起來,還是稍微慢了點(我指的是server & client nodes 在不同台的情況下),只是image view node要常常注意網路狀態,必時要重新訂閱topic就是了.
ROS2的USB camera 入門應用請參考這篇 ros2_v4l2_camera  
只是你要先會ROS2的基本功,別怕,學會了你就.....還是你自己就是了更上一層樓了





2022年7月27日 星期三

for Ubuntu 22.04 desktop : /dev/ttyUSB 找不到!? 明明設備有反應啊

 最近剛安裝了ubuntu22.04 x64 Desktop
找了一個舊的設備來試io,官網上是說它會出現在/dev/ttyUSB0

剛插入usb port也是有反應...只是一下子又沒反應了....應該是衝到了

這時要用這個指令「lsbus」來看看插拔前後出現了什麼差別了

---插入usb 設備前---
john@ros2:~$ lsusb
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
---插入usb設備有反應的那一刻---
john@ros2:~$ lsusb
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 10c4:ea60 Silicon Labs CP210x UART Bridge    <--差別在這
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
-------
這時,修改「/usr/lib/udev/rules.d/85-brltty.rules」,把這個address的設定comment掉
----用ctrl+W找「10c4:ea60」,把「ENV{PRODUCT}=="10c4/ea60/*...."這行開頭加個# ---























----存檔之後,別忘了重開機-----
之後,你再用「ls -l /dev | grep ttyUSB」就可以看到/dev/ttyUSB0 ,設備可以用了


2022年6月23日 星期四

在xrdp的xorg session登入中,如何使用mate-desktop(如果你已經在ubuntu裡安裝了)

 重灌了ubuntu 22後,也安裝了lightdm 切換到mate desktop了 (指令「sudo apt install ubuntu-mate-desktop」)
結果裝了xrdp以xorg登入後,卻還是Gnome模式
這時,別急著又在xorg session裡又啟重lightdm去做安裝mate的動作(都已經安裝了啊)

只要4個指令就又連回去第一個xwin的session了(先切到「~/」目錄去)

------------「$」者,表示這是一行指令的開始,不要輸入---------------------------------
(所以最後那個「cat.....EOF」是在同一行的指令)

$ echo "mate-session" > ~/.xsession
$ XDG_DATA_DIRS=/usr/share/mate:/usr/share/mate:/usr/local/share
$ XDG_DATA_DIRS=${XDG_DATA_DIRS}:/usr/share:/var/lib/snapd/desktop
$ cat <<EOF > ~/.xsessionrc
export XDG_SESSION_DESKTOP=mate
export XDG_DATA_DIRS=${XDG_DATA_DIRS}
export XDG_CONFIG_DIRS=/etc/xdg/xdg-mate:/etc/xdg
EOF

------------------

重開機,重登入xrdp xorg,你就可以得到mate desktop了
出處在此

一起加油了

(雖然是ubuntu 18.即便是到了ubuntu 22還適用)

2022年6月21日 星期二

設定python的預設的版本番號

最近在pi4上面安裝conan (用pip install conan指令)之後,試著執行 conan --help看看,結果出現以下的訊息 
pi@myPi4:~ $ conan --help
Traceback (most recent call last):
  File "/home/pi/.local/bin/conan", line 6, in <module>
    from conans.conan import run
  File "/home/pi/.local/lib/python2.7/site-packages/conans/conan.py", line 7, in <module>
    from conans.client.command import main
...
...
...
 from conan.tools.cmake.toolchain.blocks import ToolchainBlocks, UserToolchain, GenericSystemBlock, \
  File "/home/pi/.local/lib/python2.7/site-packages/conan/tools/cmake/toolchain/blocks.py", line 9, in <module>
    from conan.tools.apple.apple import is_apple_os, to_apple_arch
  File "/home/pi/.local/lib/python2.7/site-packages/conan/tools/apple/__init__.py", line 8, in <module>
    from conan.tools.apple.apple import fix_apple_shared_install_name
  File "/home/pi/.local/lib/python2.7/site-packages/conan/tools/apple/apple.py", line 170
    command = f"install_name_tool {dylib_path} -id {new_name}" 
                                                                                                  ^
SyntaxError: invalid syntax
-------------
這裡面完全沒有python3這樣的字樣,這表示安裝conan時它找錯python了
先以python --version check是否是真對應到python3
而不是預期的3.7.3

這時你需要指定順序才行
------
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 2
-------
這樣,我們再使用python --verion就會出現預期的 python 3.x
「那,我們之前已經安裝的conan怎麼辦?」
 「很簡單,就用pip uninstall conan就可以移除了」
之後再以pip install conan安裝,就不會出現error了
本篇技巧出處在此
一起加油吧
update : 2022/07/30 
如果python2 沒安裝而直接安裝python3的,但「python --version 」出現command not found的訊息的話,那就要安裝「sudo apt install python-is-python3」了
ref: 這裡的第67則回覆




for pi Buster 在進入xwin之後就執行一段程式....

 為什麼一定要註明這麼清楚?因為你也知道linux有一堆xwin版本,幾乎快跟南斗108個派別有的比了

所以我這次用最最精簡的buster做測試,

(雖然我也試過一堆其他方法,像是寫在rc.local裡....都不是我要的)

結果是要用這招「create .desktop file」

 -----------------------------------------

mkdir /home/pi/.config/autostart
nano /home/pi/.config/autostart/clock.desktop
-------------------------------------------------
[Desktop Entry]
Type=Application
Name=Clock
Exec=/usr/bin/python3 /home/pi/clock.py
----------------------------------------------------
(之後就是重開機治百病了)
這樣在系統登入xwin之後就會用python 執行clock.py這支程式了
很簡單也很實用,可以一試

2022年6月11日 星期六

在ubuntu 20.04的vscode裡試開發sqlite3 client程式(c++)

1. download the zip -- sqlite-autoconf-3380500.tar.gz   and extract it 

2.in to  the folder "sqlite-autoconf-3380500" execute commands:
 「./configure」-> 「make」 「sudo make install」
which will generate libsqlite3.a 、 libsqlite3.so.....  in "/usr/local/lib"
and "sqlite3.h" in the folder "/usr/include"

3. enjoy it in your vsocde !!
 please add 「  "-l","sqlite3" 」argument   into 「task.json」args:[....]」block
 (test by sample code here   )






2022年6月6日 星期一

以vs2022連接遠端linux以進行開發前的準備及設定

 1. 不用多說,一定是先把你的linux準備好,如果不知道要裝什麼套件,就比較一些YT上教的要給vscode開發用的那些,像是 build-essential啦 g++,gdb,gcc啦....  (基本上build-essential已經包括了g++ gcc了)


2.接著,參考這篇指令「sudo apt-get install openssh-server g++ gdb gdbserver」安裝之前沒裝到的gdbserver,也就是今天的主角

3.用vs2022 create一個c++ linux project,去tools用keyword找connection,加入一個remote connection

4.如有必要,別忘了設定C++ 版本等條件


5.let's code & build,之後,請到你在linux os,剛才連線的帳號下,有一個「projects」資料夾,裡面就有個你目前用vs2022建立的的專案名稱的資料夾,其中的bin就是build後的結果(.out檔就是輸出結果了)


現在有這vs2022+removte gdb.希望能幫到有跨平台開發需要的朋友
一起加油吧!!



2022年3月23日 星期三

for xamarin.form (IOS)--「 System.Drawing is not supported on this platform. 」

 最近有個繪圖的需求,是要在contentpage顯示一些類似stack chart

原先設計好了用system.drawing 套件的image/graphics的一些繪製工作(輸出byte array,跟xamarin form page無關)的元件.

然而....移植到xamarion.ios就現問題了

ex:

var image=Image.FromStream(byteArra);  

就會遇到平台不支援的問題

雖然是有找到類似從stream 取得native image的方式,但是那又衍生出UIImage /Android Bitmap如何轉換成system.drawing.image的問題

你或許會說「不是有libgdiplus了嗎?安裝那個套件應該可以了吧」答案是linux可以,可是ios就是不行

最後解決方式就是用skiasharp套件了

是可以用SKCanvasView直接在上面繪製,參考此例

(而且SkCanvasview也支援gesture!! 參考這個skcanvasview繪圖板範例)

可是之前寫的元件真的是不用傳入content page的東西,只是要收byte array再顯示到xamarin.form.image裡

如何改才行!?

答案,還是在canva裡,只是要用surface來作存檔輸出

----example------

          var skImg = SKImage.FromEncodedData(backgroundPngByteArray);

            var info = new SKImageInfo(472, 866);//底圖寬高

            using (var surface = SKSurface.Create(info, info.RowBytes)) {

                SKCanvas canvas = surface.Canvas;

                 //繪製底圖

                canvas.DrawBitmap(SKBitmap.FromImage(skImg), 0, 0, null);

                ...

                 ...人生如畫布,自己是畫家,精彩好壞盡在自我.....

                 ....

                canvas.Flush();

                canvas.Save();

                surface.Flush();

//以下兩行不能少,直接拿「surface.Snapshot().EncodedData」來用是null的,要小心

                var snapshot = surface.Snapshot();

                var encodeData = snapshot.Encode();

                return encodeData.ToArray(); 最後,輸出byte array,就可以給之前的imageview做source了

            }

---------------------

先前一直堅持一定要用system.drawing,試了一堆東西花了二個工作日,都沒有適合的

(實在不想動之前寫好的元件)

最後,長痛不如短痛,直接去元件裡下手,改用Skiasharp,把一些原本的System.Draw.Graphics.Draw...改用skcanvas.Draw....

一下子半天就改好了 .

早知道就用skiasharp了.

同場加映--在這次修改補完計畫中,無意間遇到一個類似手繪「繪圖板/簽名區」的元件--他叫「DrawingView」看起來不錯用,影音示範請看這裡

順便在此分享


2022年1月20日 星期四

in ubuntu :把網卡從固定ip改為DHCP

 在很久很久以前,有一個VM,裡面有一個烏托邦...不,是烏邦圖(ubuntu),裡面有一張網卡是固定ip

結果在那之後的很久很久以後,它吃土了...不,是出土了,被拿來用了

可是現在wifi已經改了,原本的ip也要改為DHCP,如何是好?

很簡單,先用ifconfig 查一下要改的網卡的id

然後,還是ifconfig,用以下指令:

----------------------------------------------------

ifconfig 那網卡的id 0.0.0.0 0.0.0.0 && dhclient  
------------------------------------------------
記得!!以上這指令是要用root權限,才能作業
所以要先用「sudo -i」切換身份下去做,
可是,一旦重開機,ip又回去那個固定ip去了,彷彿可以聽到阿土在竊笑(以你為故事就這樣結束了嗎?)
好啦,真正要改的,還是在/etc/netplan裡那個yaml檔,
把ip拿掉,改成這樣
----------------------------------------
# This is the network config written by 'subiquity'
network:
  ethernets:
    enp0s3:
      dhcp4: yes
      nameservers:
          addresses: [8.8.8.8, 168.95.1.1]
  version: 2	
----------------------------------------
(別忘了改完用「sudo netplan try」去給他跑一下)
於是,這個阿土(烏邦圖)它就又可上網了,過著無眠無日的網路伺服器的生活了,Ya....
(好爛的故事哦)
本篇技術參考


2022年1月17日 星期一

Winform--自動折行的Label

 原本想說Label這種元件是再普通不過的了,所以應該有自動折行的功能(至少在IOS的UIlabel有這樣的屬性,想不到在歷史悠久的winform架構居然沒有!?
(果然真的歷史悠久,以下的帖子是2006來的)

好在這鐵板已經有人踢過了參考這裡,怕雄雄找不到連結,我還是Ctl+C Ctl+V一下了

---------------------------------------------------------------------------------------------------

using System;
using System.Text;
using System.Drawing;
using System.Windows.Forms;

public class GrowLabel : Label {
  private bool mGrowing;
  public GrowLabel() {
    this.AutoSize = false;
  }
  private void resizeLabel() {
    if (mGrowing) return;
    try {
      mGrowing = true;
      Size sz = new Size(this.Width, Int32.MaxValue);
      sz = TextRenderer.MeasureText(this.Text, this.Font, sz, TextFormatFlags.WordBreak);
      this.Height = sz.Height;
    }
    finally {
      mGrowing = false;
    }
  }
  protected override void OnTextChanged(EventArgs e) {
    base.OnTextChanged(e);
    resizeLabel();
  }
  protected override void OnFontChanged(EventArgs e) {
    base.OnFontChanged(e);
    resizeLabel();
  }
  protected override void OnSizeChanged(EventArgs e) {
    base.OnSizeChanged(e);
    resizeLabel();
  }
}

-----------------------------------------------

可是我只想用拖拉的方式來設計,不想再一一填入座標、色彩等屬性了啊

輕鬆點,只要你把這東西編譯後,tools裡就可以找出來讓你拖拖拉拉了 (記得先設定MaxSize的width)

P.S.:

之前笑人家都什麼時代了還在寫winform,

結果現在客人就有要用winform,

真的是話別說太快的好



 




2022年1月11日 星期二

STM32板子雄雄無法連結(by st-link),如何重設?

 把東西搞當一直是我的才能之一,尤其是韌體相關的工作
最近在玩stm32F411CEU6 (black pill),範例程式沒改好,debug之後連Stm32CubeProgrammer用ST-Link也失連了(DEV_CONNECT_ERR ) 明明之前它還是可以連結的啊....

如何恢復最初的狀態?
先把它的「Boot0 」及「NRST」(即,低電位RESET)一起按著,這時,你在「Stm32CubeProgrammer」要連結它時,會出現以下訊息

(出現「DEV_TARGET_HELD_UNDER_RESET」)
出現這訊息後,放開那個女的放開那兩個按鈕,點左下角的橡皮擦圖示,就可以把板子重設了







遇到Stlink Upgrade視窗 (訊息:ST-Link is not in the DFU mode. Please restart it)要怎麼處理?

最近在玩Stm32,在debug燒錄時遇到stlink upgrade driver提示,「upgrade...好啊」我二話不說立即同意了,結果出現了這東西....

遇到這樣的視窗,首先,先點選視窗中「Open in upgrade mode」按鈕
之後,出現這樣的訊息 「ST-Link is not in the DFU mode. Please restart it」,如下圖











這時,別狂叫草泥馬狂點上面的Open in update mode按鈕, 一直點擊也沒有,你現在要做的,就只是把ST-Link重插拔就是了,

拔插後,聽到windows USB pnp-plugin的音效後,再點擊「Open in update mode」按鈕,這時畫面才會有所變動:



這時,「Upgrade」按鈕才會被enable,現在就點擊他,讓STLINK upgrade吧

stm32要學的真的太多了




2022年1月3日 星期一

用 Scaffold-DbContext 指令時遇到「Login failed. The login is from an untrusted domain and cannot be used with Integrated authentication.」錯誤訊息!?

 呃,應該是說之前為什麼沒遇到這問題吧

因為之前用Scaffold建置EF時是連到本機的資料庫,而這次是連接remote sql server的資料庫

所以原先的 connection string --「"Server=遠端DBIP;Database=資料庫;Trusted_Connection=True;"」

要改成「"Server=遠端DBIP;Database=資料庫;;User ID=帳號;Password=登入密碼;Trusted_Connection=True;"」 是的,題就出在trusted connection

以上參考這篇

老句話,要執行Scaffold指令前別忘了備份一下專案(最少DBcontext檔要備份)

新年快樂