首页 > 解决方案 > 在 Ubuntu 20.04 中使用 ruby​​ 生成 GNU 屏幕会话的问题

问题描述

我有一个安装了 Ubuntu 20.04 的工作站,我在 ruby​​ 脚本中生成 GNU 屏幕会话时遇到了问题。

ruby 脚本必须生成一个具有自定义名称的新 GNU 屏幕会话,并将新会话附加到 VNC 服务器进程。

这是代码:


when 'screen'
 sd=options[:screen_dir]
    if sd then
       FileUtils.mkdir_p(sd)
       FileUtils.chmod 0700, sd
       ENV['SCREENDIR']=sd
    end
    if !options.has_key?(:screen_exe) then
       raise Error.new(:ExecuteRun, :option=>"screen_exe",:screen_dir=>sd, :mode => mode)
    end
    if !options.has_key?(:screen_conf) then
       raise Error.new(:ExecuteRun, :option=>"screen_conf", :screen_dir=>sd, :mode => mode)
    end
    command="#{options[:screen_exe]} -L -c #{options[:screen_conf]} "+
            " -dmS sessionname #{command}"
    output=%x{#{command}}
    status=$?.exitstatus
    so1=%x{#{options[:screen_exe]} -ls}.
    split.
    find { |x| x =~ /^[0-9]+\.sessionname$/ }
    if so1.kind_of?(Array) then
       so=so1.map { |x| x.gsub(/^([0-9]+)\.sessionname$/,'\\1') }
    else
       so=[ so1.gsub(/^([0-9]+)\.sessionname$/,'\\1') ]
end
{ :output => output, :status => status, :pid => so[-1]}

在创建复制 screen_rc 配置并存储 GNU 屏幕日志的文件夹后,将生成一个新的屏幕会话,其中包含日志记录 (-L)、自定义名称 (-S)、分离模式 (-d)、跳过 STY 环境变量 (-米)。

我介绍了一些调试消息(例如 screen ls 命令),这些消息显示在发出命令后没有生成会话。

这种行为很奇怪,因为相同的 ruby​​ 脚本在以前的 Ubuntu 版本(16.04 和 18.04)中运行良好。我注意到这些发行版之间的 GNU 屏幕版本不同: Ubuntu 16.04: 4.03.01 Ubuntu 18.04: 4.06.02 Ubuntu 20.04: 4.08.00

同样在重新启动工作站后,脚本立即运行......但只是第一次运行......似乎有些事情仍然悬而未决,但没有悬而未决的进程......

我找到了一个临时解决方法,将屏幕版本降级到 4.03.01(Ubuntu 16.04),使脚本也可以在 Ubuntu 20.04 中运行……但我想用新版本的 GNU 屏幕解决这个问题,以便完全移植最新版本的 Ubuntu 上的脚本。

提前感谢您的帮助!

标签: rubylinuxubuntugnu-screen

解决方案


推荐阅读