2019年8月19日 星期一

使用pytz為datetime物件加上時區的注意事項

使用Python的datetime產生的物件是不會包含時區資訊的,在網路上搜尋加上時區的方式,一般都是建議用pytz,大概類似以下的作法。
import datetime
import pytz

mytz = pytz.timezone('Asia/Taipei')
mytime = datetime.datetime.now().replace(tzinfo=mytz)

print(mytime)
2019-08-19 14:56:50.450396+08:06
結果的確會顯示時區,不過好像哪裡怪怪的?台北所在的時區應該是+08:00,怎麼會變成+08:06,多加了六分鐘?

pytz的文件在開頭有提到,因為與Python內建的tzinfo API有實做上的差異,如果要顯示當地的時區,需使用localize()這個方法,範例如下。
import datetime
import pytz

mytz = pytz.timezone('Asia/Taipei')
mytime = mytz.localize(datetime.datetime.now())

print(mytime)

2019-08-19 14:56:50.450396+08:00
這樣就會顯示正確的時區。

2019年5月21日 星期二

在Linux使用Ricoh多功能事務機,無法輸入使用者代碼的問題

使用環境
Kubuntu 18.04
Ricoh Aficio MP C3300

使用情境
印表機有設定使用者代碼來統計各部門的使用量,並限制彩色列印功能。

在Windows的印表機設定很容易設定使用者代碼,在Linux上頭並不是…好吧,現在可以看到設定選項,但是會發現怎麼設定都沒有效果,永遠都會選擇預設的選項,而且沒辦法改變預設的代碼。
搜尋網路找到這一篇,但是沒有效果。這篇文章裡頭有提到OpenPrinting網站的FAQ,可是裡頭的說明不是很清楚。

我最後解決的方式是從OpenPrinting網站下載PPD檔案修改,以C3300為例,網站上提供三種版本分別是PDF、Postscript、pxlcolor,PDF的版本按下列印就會被取消,我是用Postsciprt版本。

要修改以下兩行
*DefaultUserCode: None
*UserCode 1001/1001: "/usrcode(1001)def\n"
修改上面三個紅色的部份,填入正確的使用者代碼(這邊是用1011為例子)
*DefaultUserCode: 1011
*UserCode 1011/1011: "/usrcode(1011)def\n"
結果如下圖 
存檔,然後安裝印表機,要選擇用這個檔案安裝。安裝完成後進入設定選項應該會如同第一張圖,紙張大小與列印顏色也要改成正確的設定,不然還是無法列印。

2019年1月18日 星期五

Linux桌面多使用者登入,類似LTSP的作法 rev.2

上一篇是古早時代的作法,lightdm早就內建支援VNC,中間不需要透過XDMCP,這樣穩定性也比較好,而且還是支援多使用者。

作法:
  1. 安裝tigervnc-standalone-server
  2. 編輯/etc/lightdm/lightdm.conf,加上
    [VNCServer]
    enabled=true
    command=Xvnc -SecurityTypes None
    port=5900
    listen-address=0.0.0.0
    width=1024
    height=768
    depth=24
    SecurityTypes設定None代表不使用VNC的內建驗證方式與加密,但是在lightdm還是要輸入帳號密碼登入。參數的詳細說明
  3. (可選)把SecurityTypes改成TLSNone使用連線加密,或者使用SSH或VPN提昇安全性
  4. 重新啟動lightdm
  5. 使用vncviewer連入

2018年12月4日 星期二

試用WireGuard

我只用過IPSEC與OpenVPN,其他的沒用過,所以不確定其他VPN軟體的架構與設計理念如何,不過WireGuard與前兩者相比的確有明顯的差異。

在Linux上頭的WireGuard是核心模組加上用戶端工具軟體,核心模組包含網路卡界面與整個VPN功能實做,用戶端工具是設置VPN與檢視狀態用。IPSEC或OpenVPN在運作時都需要在背景運行必要程式,WireGuard不需要。不過在非Linux平台,還是需要執行背景程式。

使用者管理也和其他VPN實做不同,是使用非對稱金鑰,伺服器與用戶端都需要產生非對稱金鑰並交換公鑰,如果要解除某個用戶的權限,只需要從設定檔把對應的設定刪除。其他實做使用CA產生使用者的公鑰,要解除用戶權限需要撤除(revoke)對應的金鑰,不直覺也不方便。

性能部份因為沒有做測試所以不評論,不過WireGuard網站上的測試結果都顯示更高的Throughput與更低的延遲。

2018年10月30日 星期二

Linux桌面多使用者登入,類似LTSP的作法

LTSP就是Linux版本的Terminal Server,可以讓多個使用者共用一台伺服器的資源去使用桌面環境,但是Client端OS必須也要是Linux是缺點。

之後找的方案是在Ubuntu Mate 18.04中啟用LightDM的XDMCP功能,在Linux上使用Xephyr連線非常順暢,但是在Windows上試了好多種軟體(包含Xming),都會出現畫面顯示異常或卡住,程式啟動當掉的問題,只能放棄。

再來則是XDMCP + VNC,網路上許多文章都會提到這個替代方案,我參考這一篇做設定,但是不透過SSH連線。設定完成,連上去看起來都沒什麼問題,直到我發現fctix的選字框無法顯示。 Orz

根據Ubuntu社群WIKI關於VNC Server的文章,其中提到只有TigerVNC支援compositing window managers像是Gnome Shell,原本我安裝的是vnc4server,換成tigervnc-standalone-server問題就解決了。而且換成TighterVNC Server還有個好處,Client也使用TigerVNC的話,就支援動態變更桌面尺寸,變更TigerVNC Viewer視窗的尺寸就會連帶變更Linux桌面的尺寸。