Linux下运行Python代码遇到cannot connect to X server这个问题的解决办法

在Linux下运行Python代码遇到了这个问题。

调查后发现,X server是Linux系统上提供图形用户界面的服务程序。当客户端主机Client访问服务器Server上的图形程序时,需要Server对该Client赋能访问图形程序的权限。

所以原因是我在改opencv代码处理图片的时候,有一条cv2.imshow函数没有注释掉,这个函数在windows下可以直接调出窗口显示图片,在命令行下使用Linux就没法显示了,注意不要这样用即可。
参考链接:
https://www.jianshu.com/p/74b902950c4b?utm_source=oschina-app

### 解决方案 当遇到错误 `ERROR 2003 (HY000): Can't connect to MySQL server` 或者 `Error: 2002 Cannot connect to MySQL server`,这通常意味着客户端无法建立与MySQL服务器的TCP/IP连接。可能的原因包括但不限于网络配置问题、防火墙阻止端口访问以及服务未启动。 对于上述提到的情况,在尝试通过另一台机器连接时同样遇到了相同的错误提示[^1],表明这不是单一设备的问题而是更广泛的连通性障碍或者是目标地址上的MySQL实例本身存在问题。 #### 验证并调整防火墙设置 确认防火墙允许来自远程主机的数据流到达运行着MySQL数据库的服务端。如果是在Linux环境中操作,则可以利用iptables命令来查看当前规则列表: ```bash sudo iptables -L INPUT -v -n | grep --color=always 'dpt:mysql' ``` 这条指令会显示所有针对MySQL默认端口(即3306)的入站流量控制条目。如果没有看到任何匹配项,那么可能是防火墙正在拦截这些请求;此时应该添加相应的放行规则。 #### 检查MySQL Server状态和服务监听情况 确保MySQL进程正常工作并且确实绑定了正确的IP地址和端口号对外提供服务。可以通过netstat工具获取有关本地开放端口的信息: ```bash netstat -anp | grep mysql ``` 理想情况下,应当能看到类似于下面这样的输出行,表示MySQL正准备接受外部连接请求: ``` tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN ``` 如果不满足此条件,请核查my.cnf文件中的bind-address参数设定是否恰当,并重启mysqld使更改生效。 #### 修改用户权限及认证方式 考虑到可能存在旧版身份验证机制不兼容新版本客户端的情形[^2],建议更新用户的密码哈希算法至更加安全的形式。具体做法如下所示: 登录到具有管理员权限的MySQL shell之后执行以下SQL语句重置指定账户的凭证信息: ```sql ALTER USER 'beer'@'%' IDENTIFIED WITH mysql_native_password BY 'new_secure_password'; FLUSH PRIVILEGES; ``` 这里需要注意的是,替换掉示例里的用户名 `'beer'%` 和临时使用的强密钥 `'new_secure_password'` 成实际应用环境下的对应值即可。 另外,还需留意某些特定场景下可能会涉及到移除my.cnf里关于old-passwords标志位的相关定义以支持新的加密模式[^5]。 #### 测试连接稳定性 最后一步就是再次测试能否顺利建立起同远端MySQL instance之间的稳定链接关系了。假设一切恢复正常的话,先前报告过的那些异常状况就不应再重现出来。 ```python import pymysql.cursors connection = pymysql.connect(host='192.168.1.100', user='beer', password='your_new_password_here', database='test_db') try: with connection.cursor() as cursor: sql_query = "SELECT VERSION()" cursor.execute(sql_query) result = cursor.fetchone() finally: connection.close() print(f"MySQL version: {result}") ``` 以上Python脚本片段展示了如何借助PyMySQL库来进行简单的查询操作从而间接检验整个通信链路的质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值