2018年1月31日 星期三

使用 XDMCP 的遠端登入

2021-05-28 補記: 使用 xrdp 好用多了,可以吏用 Windows 的遠端桌面登入。這篇文章就留著當紀念吧。

參考鳥哥的 X Window System 用在網路上的方式: XDMCP

以前都用 VNC 連上遠端的 Linux,它不用裝 X Window 就可以用,不過,用起來有點不順就是了。

直到最近,才開始學習如何用 XDMCP 來做遠端登入。自己的桌機,是用 Linux,本來就有 X Window server,所以遠端的電腦,用起來的效果應該就和用自己的電腦一樣。當然,要用到顯卡的加速功能,我就不清楚了。

 在 Gentoo Linux 安裝 x11-base/xorg-server 時,必須指定 xephyr 及 xnest 的選項。

我使用的 display manager 是 lightdm,要修改設定檔  /etc/lightdm/lightdm.conf,然後重新啟動 lightdm。
[XDMCPServer]
enabled=true
port=177


系統間資料複製

連接遠端桌面的指令如下
Xephyr -query 10.161.81.183 -ac -screen 1024x768 -br -reset -terminate -title 'if183' :6
要與遠端之間做 copy and paste,要繞一個彎。先在遠端 select and copy 資料,然後再自己的桌面按中間鍵貼上,將選取的資料放入剪貼簿的指令如下。
xsel --clipboard --display :6 | xclip -d :0

游標解鎖

假如滑鼠的游標被鎖在遠端桌面,可以按 Ctrl-Shift 來解鎖。

大概就如此吧


2018年1月21日 星期日

使用 Kindle

買了一台 Kindle 來看電子書,開始測試那種格式比較合適,發現 pdf 很難用。
後來找到網頁,What is The Best eBook Format For Kindle?。看來,最佳格式是 mobi,epub 也可,它會被轉成 mobi。

使用轉檔程式,calibre,可將 pdf 轉成 mobi,轉檔指令如下
ebook-convert document.pdf .mobi

其實,用 calibre 管理 Kindle 很方便。

另外,要挑那一台來用,可以參考 Kindle 有三種,價格大不同!到底該怎麼在三兄弟中選一個帶回家呢? 我是買最便宜的啦,沒用過,要試過才知道好不好用。

要將 pdf 轉成 .mobi 檔失敗,縮小試試看
How can I reduce the resolution of images in an epub or mobi file?

2018年1月19日 星期五

打造可在 Win 2003 的 PHP 7.0

需的工具是 MinGW,其為
MinGW is a collection of windows development tools including compilers such as GCC and G++.
下載 mingw-get-setup.exe
https://null-byte.wonderhowto.com/forum/set-up-mingw-kali-using-wine-0159622/

用 WINE 來安裝
$ WINEARCH=win32 WINEPREFIX=~/wine-mingw winecfg
$ export WINEPREFIX=~/wine-mingw
$ wine /path/to/file/mingw-get-setup.exe

依照說明,安裝 mingw32-base。

設定環境變數 PATH
https://forum.winehq.org/viewtopic.php?f=8&t=19457
https://wiki.winehq.org/Useful_Registry_Keys

執行,出現錯誤,待解決。
$ wine c:\\MinGW\\bin\\gcc.exe iatpatcher.cpp
gcc.exe: error: CreateProcess: No such file or directory

解決方法,要裝 mingw32-gcc-g++
http://pclevinblog.pixnet.net/blog/post/314560381-mingw---錯誤(createprocess%3A-no-such-file-or-directory)(五

然後,新的錯誤
iatpatcher.cpp:67:35: error: 'ARRAYSIZE' was not declared in this scope
 #define PATCHCOUNT ARRAYSIZE(patch)

只要把程式中,ARRAYSIZE(A) 定義前的註記拿掉即可
#define ARRAYSIZE(A) (sizeof(A)/sizeof((A)[0]))

執行下列指令,即可成功編譯執行檔
$ wine gcc -s -o iatpatcher.exe iatpatcher.cpp -lstdc++ -static

patch 後的 php-7.0.27,在命令視窗執行 php -i,會出現 "找不到 api-ms-win-crt-convert-l1-1-0.dll" 的錯誤。安裝 Visual C++ Redistributable for Visual Studio 2015 即可。

嗯,最終,phpinfo() 可以正常輸出結果了,但是我要用 sqlsrv 的 driver,還是沒辦法在 win 2003 面跑。

問題

可以跑,顯示 phpinfo(),但是 extension_dir 永遠都是 c:\php\ext,因此無法載入 extension。就算把所有的 extension 都 copy 到該目錄下,也無法載入。只好等有空再來處理了。

2018年1月7日 星期日

下載 HLS (m3u8) 影片的方法

m3u8 為 Http Live Streaming (HLS) 串流的副檔名,目前在小鴨影音看到此格式。小鴨影音的說明,在瀏覽器上觀看此影片,需要有 flash 的支援。若瀏覽器不支援 flash,只會出現串流的網址。

ffmpeg -i http://n.bwzybf.com/20171126/qtPkXl6h/index.m3u8 -c copy Kingsman2.mkv

使用上述指令,能夠在下載的同時,即可觀看,慢個十分鐘看,就比在瀏覽器上看還順。
曾碰到的問題是,下載到一半,就停了,重新下載,又沒辦法指定開始時間,必須重頭開始。這問題,也許能找到解決方法吧。

另外,使用 VLC 播放器,也可以將影片 [轉換/儲存],但是必須在儲存後,才能觀看,比較麻煩。

假如你使用 Linux 的話,也懂 PHP 的話,請參考這作法 d93921012/Download-HLS-Files,在中斷之後,可以重新下載,比較方便。

並且,在下載的同時,將已下載的檔串起來i成一個大的 ts 檔,因此可以邊下載邊看。我在 Linux 下,是以 mpv 來觀看,算蠻方便的。

併行下載

有時候伺服器反應很慢,久久才下載一個 segment,使用 PHP 的 curl_multi_func 功能,改進程式,可以同時下載 5 個 segment。當然,只要修改變數值,即可更多個 thread 同時下載。

另外,在 curl 的連線參數加上 keep-alive,不關閉 connection,可以進一步提升下載速度。

原本一次下載一個 ts 檔案,有些網站反應較慢,會來不及即時觀看。經過改進後,短短 10 幾分鐘就可以下載完一個檔案,可以很舒服的觀看。

檔案簡要說明

從小鴨影音找到影片的連結,長得像這樣
http://youku163.zuida-bofang.com/20180505/4747_5bd4685f/index.m3u8

用 mpv 或 vlc 程式可以直接播放。用 curl 取得的內容如下
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000,RESOLUTION=1080x608
800k/hls/index.m3u8

這代表它只有一個解析度的影片,自己組合新的 url 如下
http://youku163.zuida-bofang.com/20180505/4747_5bd4685f/800k/hls/index.m3u8

用 curl 取得的內容
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:9
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:4.170000,
9aaa1ce7281000.ts
#EXTINF:4.170000,
9aaa1ce7281001.ts
 ....
#EXTINF:4.128300,
9aaa1ce72812015.ts
#EXTINF:4.170000,
9aaa1ce72812016.ts
#EXTINF:2.126700,
9aaa1ce72812017.ts
#EXT-X-ENDLIST

每一段影片的 url 長得這樣下
http://youku163.zuida-bofang.com/20180505/4747_5bd4685f/800k/hls/9aaa1ce7281001.ts


把這些資料一段一段接回去,就成為完整的影音檔了。



2018年1月1日 星期一

PhpStorm 的 OpenGL 支援


參考
OpenGL Pipeline in Oracle Solaris, Linux and Windows
improving_text_antialiasing_and_gui_performance_in_intellij_idea_on_openjdk_8.md

Minimum Requirements

The OpenGL pipeline will not be enabled if the hardware or drivers do not meet the minimum requirements. If for some reason one of the following requirements is not met, Java 2D will fall back and use the default pipeline (X11 on Oracle Solaris/Linux, GDI/DirectDraw on Windows), which means your application will continue to work correctly, but without the OpenGL acceleration.

The minimum requirements for Oracle Solaris and Linux operating systems are the following:


  •     Hardware accelerated OpenGL/GLX libraries installed and configured properly
  •     OpenGL version 1.2 or higher
  •     GLX version 1.3 or higher
  •     At least one TrueColor visual with an available depth buffer
設定檔 /opt/phpstorm/bin/phpstorm64.vmoptions 加上
-Dsun.java2d.opengl=True

或者在  $IDEA_HOME/bin/idea.properties,加上
##---------------------------------------------------------------------
## Enable the OpenGL-based pipeline, which provides hardware acceleration.
##---------------------------------------------------------------------
sun.java2d.opengl=true


注意: 每次更新後,此設定會被覆蓋,需重新加入此設定

設定 debug level
$ export J2D_TRACE_LEVEL=4
$ phpstorm
[I] GLXGC_FindBestVisual: scn=0
[I] GLXGC_InitGLX
[I] OGLFuncs_OpenLibrary
[I] OGLFuncs_InitPlatformFuncs
[I] OGLFuncs_InitBaseFuncs
[I] OGLFuncs_InitExtFuncs
[I] GLXGC_InitGLX: client GLX version=1.4
[I] GLXGC_InitFBConfig: scn=0 vis=0x0
[V]   candidate fbconfigs:
[V]     id=0x29 db=0 alpha=0 depth=24 stencil=0 valid=true
[V]     id=0xbf db=0 alpha=0 depth=24 stencil=0 valid=false (large depth)
[V]     id=0x74 db=0 alpha=0 depth=24 stencil=0 valid=false (large depth)
[V]     id=0x25 db=0 alpha=0 depth=24 stencil=8 valid=false (large depth)
[V]     id=0xbb db=0 alpha=0 depth=24 stencil=8 valid=false (large depth)
[V]     id=0x70 db=0 alpha=0 depth=24 stencil=8 valid=false (large depth)
[V]     id=0x27 db=1 alpha=0 depth=24 stencil=0 valid=false (large depth)
[V]     id=0xbd db=1 alpha=0 depth=24 stencil=0 valid=false (large depth)
[V]     id=0x72 db=1 alpha=0 depth=24 stencil=0 valid=false (large depth)
[V]     id=0x21 db=1 alpha=0 depth=24 stencil=8 valid=false (large depth)
[V]     id=0x23 db=1 alpha=0 depth=24 stencil=8 valid=false (large depth)
[V]     id=0x22 db=1 alpha=0 depth=24 stencil=8 valid=false (large depth)
[V]     id=0x2a db=0 alpha=8 depth=24 stencil=0 valid=false (large depth)
[V]     id=0xc0 db=0 alpha=8 depth=24 stencil=0 valid=false (large depth)
[V]     id=0x75 db=0 alpha=8 depth=24 stencil=0 valid=false (large depth)
[V]     id=0x26 db=0 alpha=8 depth=24 stencil=8 valid=false (large depth)
[V]     id=0xbc db=0 alpha=8 depth=24 stencil=8 valid=false (large depth)
[V]     id=0x71 db=0 alpha=8 depth=24 stencil=8 valid=false (large depth)
[V]     id=0x28 db=1 alpha=8 depth=24 stencil=0 valid=false (large depth)
[V]     id=0xbe db=1 alpha=8 depth=24 stencil=0 valid=false (large depth)
[V]     id=0x73 db=1 alpha=8 depth=24 stencil=0 valid=false (large depth)
[V]     id=0x24 db=1 alpha=8 depth=24 stencil=8 valid=false (large depth)
[V]     id=0xba db=1 alpha=8 depth=24 stencil=8 valid=false (large depth)
[V]     id=0x6f db=1 alpha=8 depth=24 stencil=8 valid=false (large depth)
[I] GLXGC_FindBestVisual: chose 0x29 as the best visual for screen 0
INFO: The version of libXrender.so is detected as 0.910
[I] GLXGraphicsConfig_getGLXConfigInfo
[I] GLXGC_InitFBConfig: scn=0 vis=0x29
[V]   candidate fbconfigs:
[V]     id=0x29 db=0 alpha=0 depth=24 stencil=0 valid=true
[E] GLXGraphicsConfig_getGLXConfigInfo: could not create shared context
Could not enable OpenGL pipeline for default config on screen 0
XRender pipeline enabled
Error parsing gtk-icon-sizes string: ''
Xrender: INFO: Jules library not installed.

測試,安裝 example
$ java -Dsun.java2d.opengl=True -jar /opt/oracle-jdk-bin-1.8.0.152/demo/jfc/Java2D/Java2Demo.jar

加入 video 的 group 之後。
[I] GLXGC_FindBestVisual: chose 0x29 as the best visual for screen 0
INFO: The version of libXrender.so is detected as 0.910
[I] GLXGraphicsConfig_getGLXConfigInfo
[I] GLXGC_InitFBConfig: scn=0 vis=0x29
[V]   candidate fbconfigs:
[V]     id=0x29 db=0 alpha=0 depth=24 stencil=0 valid=true
[I] OGLContext_IsExtensionAvailable: GL_ARB_fragment_shader=true
[I] OGLContext_IsExtensionAvailable: GL_ARB_multitexture=true
[I] OGLContext_IsExtensionAvailable: GL_ARB_texture_non_power_of_two=true
[I] OGLContext_IsExtensionAvailable: GL_ARB_texture_rectangle=true
[I] OGLContext_IsExtensionAvailable: GL_EXT_framebuffer_object=true
[I] OGLContext_IsExtensionAvailable: GL_ARB_depth_texture=true
[I] OGLContext_IsFBObjectExtensionAvailable: fbobject supported
[I] OGLContext_IsLCDShaderSupportAvailable: LCD text shader supported
[I] OGLContext_IsBIOpShaderSupportAvailable: BufferedImageOp shader supported
[I] OGLContext_IsGradShaderSupportAvailable: Linear/RadialGradientPaint shader supported
[I] OGLContext_IsExtensionAvailable: GL_NV_fragment_program=true
[I] OGLContext_IsExtensionAvailable: GL_NV_fragment_program2=true
[I] OGLContext_IsExtensionAvailable: GL_NV_texture_barrier=true
[I] GLXGraphicsConfig_getGLXConfigInfo: OpenGL version=4.6.0 NVIDIA 387.22
OpenGL pipeline enabled for default config on screen 0
Error parsing gtk-icon-sizes string: ''


$ glxgears
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  153 (GLX)
  Minor opcode of failed request:  3 (X_GLXCreateContext)
  Value in failed request:  0x0
  Serial number of failed request:  31
  Current serial number in output stream:  32

$ su ajax
密碼:
ajax@localhost ~ $ glxgears
Running synchronized to the vertical refresh.  The framerate should be
approximately the same as the monitor refresh rate.
303 frames in 5.0 seconds = 60.479 FPS

不曉得是否電腦太強了,不論 OpenGL 是否 enable,捲動文字時,並無明顯差別。

另外,
-Dawt.useSystemAAFontSettings=lcd
改成
-Dawt.useSystemAAFontSettings=on


網誌存檔