在Ubuntu服务器通过SSH运行Firefox遇Gtk-WARNING错误求助
解决SSH远程服务器上Selenium启动Firefox的Display错误
老哥,你碰到的这个cannot open display: :0问题我太熟了,本质就是远程服务器本身没运行X11图形显示服务,而且你的SSH连接没配置X11转发,导致本地的显示环境没法被远程的Firefox调用。下面给你几个靠谱的解决方案,按推荐程度排序:
方案1:用Firefox无头模式(最推荐,完美适配爬虫场景)
爬虫根本不需要可视化界面啊!Firefox从56版本开始就支持无头模式了,完全绕开X11的问题,速度还更快。
- 命令行直接启动无头Firefox:
./firefox --headless
- 要是用Selenium代码,只需要加几行配置就行(拿Python举例子):
from selenium import webdriver from selenium.webdriver.firefox.options import Options options = Options() options.add_argument("--headless") driver = webdriver.Firefox(options=options)
这个方案最省心,批量爬取也更高效,优先试试这个!
方案2:开启SSH X11转发(适合需要看界面调试的情况)
如果确实要看到Firefox的界面(比如调试爬虫逻辑),可以通过SSH把本地的X11显示转发到远程服务器:
- 本地连接服务器时,加上
-X参数(Linux/macOS用户直接这么敲):
ssh -X your_username@server_ip
Windows用户的话,要是用PuTTY,得在Connection -> SSH -> X11里勾选"Enable X11 forwarding",而且本地要装Xming这类X11服务器软件才行。
- 连接上之后不用手动设
DISPLAY变量,SSH会自动帮你配置好(一般是localhost:10.0这类,不是你之前设的:0)。直接启动Firefox就行,没必要用gksu——除非你真的需要root权限,不过爬虫一般用普通用户跑更安全。
./firefox
方案3:在服务器装虚拟X11服务器(Xvfb)
要是服务器没法升级Firefox到支持无头的版本,或者必须在服务器端有个虚拟显示,那就装Xvfb(虚拟帧缓冲X11服务器):
- 先装Xvfb(以Debian/Ubuntu为例,其他系统换对应的包管理器就行):
sudo apt-get install xvfb
- 启动一个虚拟显示窗口:
Xvfb :1 -screen 0 1024x768x16 &
- 把
DISPLAY变量指向这个虚拟显示:
export DISPLAY=:1
- 之后再启动Firefox或者运行你的Selenium代码就没问题了。
最后提一句:你之前用gksu完全没必要,那是图形化的sudo工具,远程SSH里用普通sudo就够了,而且尽量别用root跑爬虫,安全风险太高。
内容的提问来源于stack exchange,提问作者user2680293
相关产品推荐
相关产品推荐

