久しぶりにBlink.jlを使ってみようと思って,REPL上で実行してみると,
julia> using Blink julia> win = Window() ERROR: IOError: connect: connection refused (ECONNREFUSED) Stacktrace: [1] wait_connected(x::Sockets.TCPSocket) @ Sockets ~/.local/opt/julia-1.10.4/share/julia/stdlib/v1.10/Sockets/src/Sockets.jl:528 [2] connect @ ~/.local/opt/julia-1.10.4/share/julia/stdlib/v1.10/Sockets/src/Sockets.jl:563 [inlined] [3] connect(addr::Sockets.IPv4, port::Int64) @ Sockets ~/.local/opt/julia-1.10.4/share/julia/stdlib/v1.10/Sockets/src/Sockets.jl:549 [4] try_connect(::Sockets.IPv4, ::Vararg{Any}; interval::Float64, attempts::Int64) @ Blink.AtomShell ~/.julia/packages/Blink/tnO3a/src/AtomShell/process.jl:77 [5] try_connect @ ~/.julia/packages/Blink/tnO3a/src/AtomShell/process.jl:74 [inlined] [6] init(; debug::Bool) @ Blink.AtomShell ~/.julia/packages/Blink/tnO3a/src/AtomShell/process.jl:91 [7] init @ ~/.julia/packages/Blink/tnO3a/src/AtomShell/process.jl:85 [inlined] [8] #shell#6 @ ~/.julia/packages/Blink/tnO3a/src/AtomShell/process.jl:147 [inlined] [9] shell @ ~/.julia/packages/Blink/tnO3a/src/AtomShell/process.jl:138 [inlined] [10] Window() @ Blink.AtomShell ~/.julia/packages/Blink/tnO3a/src/AtomShell/window.jl:100 [11] top-level scope @ REPL[2]:1
と,全く動かない。別のPCのubuntu 22.04では正常に動いているので,
ubuntu 24.04のバージョンの影響があるのでは?と何となく思った。
Blink.jlのTroubleshooting
にもあるように,electronのバイナリに関係していることかもしれないと思い,
electronのバイナリが動作するかどうか確認してみる。
julia> Blink.AtomShell._electron "/home/ujimushi/.julia/artifacts/aad3f721351c9550129f625fc52f51f4d0726586"
でArtifactsの場所が分かるので,次のように単体で実行してみる。
ujimushi@ubuntu-24.04:~$ cd ~/.julia/artifacts/aad3f721351c9550129f625fc52f51f4d0726586/ ujimushi@ubuntu-24.04:~/.julia/artifacts/aad3f721351c9550129f625fc52f51f4d0726586$ ./electron [8372:0613/195303.455989:FATAL:setuid_sandbox_host.cc(157)] The SUID sandbox helper binary was found, but is not configured correctly. Rather than run without sandboxing I'm aborting now. You need to make sure that ~/.julia/artifacts/aad3f721351c9550129f625fc52f51f4d0726586/chrome-sandbox is owned by root and has mode 4755. Trace/breakpoint trap (コアダンプ)
と,ここで一回調査を中断した。
で,ubuntu 24.04 electron等でぐぐると,
Voiceboxのissueに
自分で体験したそのままの内容の記述があった。
対策は,
--no-sandboxをつける(electron起動時)sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0する/etc/apparmor.dにプロファイルを設定する
の三通りぐらいらしい。
とりあえず,--no-sandboxのオプションをつけるぐらいなら簡単に出来そうなのでやってみる。
Plots.jlのGRバックエンド用フォントパッチ(Windows用)
とかでお世話になっているパッチ方法である。
using Blink @eval AtomShell begin function init(; debug = false) electron() # Check path exists p, dp = port(), port() debug && inspector(dp) dbg = debug ? "--debug=$dp" : [] proc = (debug ? run_rdr : run)( `$(electron()) --no-sandbox $dbg $mainjs port $p`; wait=false) conn = try_connect(ip"127.0.0.1", p) shell = Electron(proc, conn) initcbs(shell) return shell end end
をincludeしてからwin = Window()を実行してみるとうまくいった。
原因はubuntuの24.04からセキュリティ設定が厳しくなっていて,それに引っかかっているということらしい。
--no-sandboxをするとelectronのセキュリティが弱くなるが,
自分がBlink.jlを使っている範囲ではあまり問題がない(ネットワークで他のサイト等にはアクセスしない)
のではないかと思っている今日この頃。