![如果 wvdial 正在运行,则不会显示 Okular 窗口](https://linux22.com/image/1520927/%E5%A6%82%E6%9E%9C%20wvdial%20%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%EF%BC%8C%E5%88%99%E4%B8%8D%E4%BC%9A%E6%98%BE%E7%A4%BA%20Okular%20%E7%AA%97%E5%8F%A3.png)
我目前正在使用内核为 4.6.0-1-amd64 和 Cinnamon Desktop 3.2 的 Debian Testing (Stretch)。我首选的 PDF 阅读器是 Okular,它是一款 KDE/Qt 应用程序。
Okular 运行良好除了正在运行时wvdial
,在这种情况下,进程将在启动时运行,但无论我如何启动它(从 ALT-F2 启动器、从 Cinnamon 菜单或终端),窗口都不会显示在任何地方。任务管理器(HTOP、ps
等)将列出该进程,但窗口根本不会出现。从统计上讲,这种情况 100% 都会发生。
重现步骤:
- 以 root 身份运行
wvdial
,通过 USB 蜂窝调制解调器连接到互联网。 - 连接建立后,运行 Okular。
- 无论你调用它多少次,窗口都不会出现。
wvdial
使用 CTRL-C终止。- 再次运行 Okular。窗口将会出现。
有人知道这里发生了什么事吗?
PS:我需要使用wvdial
Network Manager 而不是 Network Manager,通过简单的配置文件和包装器脚本轻松地在 3G 和 4G 网络之间进行选择。我的提供商对 3G 和 4G 网络应用了不同的数据上限,因此我需要能够根据需要按需使用任一网络。我通常使用 3G 网络进行 Web 浏览,使用 4G 网络进行大量下载、视频会议以及更新/升级操作系统。
strace okular
编辑:这些是运行中的最后三行wvdial
:
socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) = 15
bind(15, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
connect(15, {sa_family=AF_INET, sin_port=htons(111), sin_addr=inet_addr("127.0.0.1")}, 16
答案1
使用strace
查找 Okular 停止的系统调用,结果发现它想要连接本地主机上的 portmapper 服务(端口 111)。无论出于什么原因,环回接口都没有 IP 地址,为其分配 IP 地址解决了问题。