通过 VS Code 的 Remote-SSH 连接到服务器时如何显示服务器端 GUI

文章目录

  • 一、vscode下载
  • 二、连接服务器
    • 1. 安装remote development套件
    • 2. 配置ssh
    • 3. 连接服务器
    • 4. 打开服务器文件路径
  • 三、支持GUI显示
    • 1. windows系统安装xserver服务:可以用xming或VcXsrv
    • 2. windows系统(安装了vscode的系统)下安装插件
    • 3. vscode实现免密登录远程服务器
    • 4.配置
      • 4.1 客户端(windows系统)配置
      • 4.2 服务器(ubuntu系统)配置
        • 第一步:确认$DISPLAY变量的值
    • 5. 整体运行步骤
      • 5.1 运行VcXsrv
      • 5.2 打开vscode连接到服务器
      • 5.3 验证GUI是否正常显示
        • 5.3.1 验证终端terminal使用GUI
        • 5.3.2 在服务器要使用GUI的工程中设置.vscode/launch.json (使得工程中的程序能使用GUI)
  • 四、使用上常见一些问题
    • 1. 代码中文显示乱码问题

参考链接:
利用VScode连接远程服务器进行代码调试及可视化界面
VSCode『SSH』连接服务器『GUI界面』传输
当通过 VS Code 的 Remote-SSH 连接到服务器时如何显示服务器端 GUI(以 Windows 本地 → Ubuntu 远程为例)
VScode远程调试C++工程含X11(局域网)

一、vscode下载

vscode官网,下载页面如下,根据需要下载
在这里插入图片描述
对于windows系统,有两个版本:

  • User Installer版:会安装在当前计算机帐户目录,意味着如果使用另一个账号登陆计算机将无法使用别人安装的vscode。
  • System Installer版:安装在非用户目录,例如C盘根目录,任何帐户都可以使用。(建议使用此版本)
    vscode默认提供的User Installer版,大多数人都是用的这个版本。

我这里选择System Installer版。

二、连接服务器

1. 安装remote development套件

在这里插入图片描述

2. 配置ssh

在这里插入图片描述
并选择ssh配置文件
在这里插入图片描述
在配置文件中设置你的服务器信息,输入 HostName 服务器IP地址和 User 服务器用户名,保存以后左侧会出现对应机器名称。我C:\Users\chenky190417.ssh\config内容如下:

Host 192.168.162.103
  HostName 192.168.162.103
  User firefly

3. 连接服务器

在这里插入图片描述
在这里插入图片描述
连接过程需要输入服务器对应用户的密码。

4. 打开服务器文件路径

打开服务器文件,只需要在文件菜单下,点击 Open Folder,就能在右侧窗口查找自己想要打开的文件路径了,点击 OK 打开。此时对文件的编辑就可以实时同步到服务器上。
在这里插入图片描述
连接成功并打开服务器代码路径后如下图:
在这里插入图片描述

三、支持GUI显示

调试以及运行一些GUI显示项目会碰到
Error: Can’t open display:

  • 问题描述

vscod提供了优秀的远程连接插件(Remote-SSH),我们可以方便地连接远程服务器进行编程。但是如果我们程序涉及到操作显示图像,由于程序运行在服务器上,无法直接将图像显示到我们的本地系统。或者我们想使用gedit这中需要图形化界面支持的linux命令,也会报错。

  • 解决思路

使用X协议进行转发,也就是把显示在远程服务器上的图像转发到我们的本地系统。具体原理如下:
在这里插入图片描述

  • 操作步骤

(1) 在本地系统中安装并开启x11服务(这里使用X ming)
(2) 本地vscode安装Remote-SSH 和Remote X11插件(在前面顺便装了)
(3) ssh免密的设置
(4 )在服务器中设置DISPLAY的环境变量(使得terminal也能使用GUI)

1. windows系统安装xserver服务:可以用xming或VcXsrv

参考链接:
VScode远程调试C++工程含X11(局域网)
VScode环境搭建+远程连接服务器+x11

微软官方推荐安装VcXsrv下载地址
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. windows系统(安装了vscode的系统)下安装插件

vscode上安装Remote X11(SSH)和 Remote X11 插件
在这里插入图片描述

3. vscode实现免密登录远程服务器

(1) 在windows中按下win+R快捷键进入cmd命令框中运行命令

ssh-keygen

会在C:\Users\chenky190417.ssh生成两个文件

id_rsa.pub # 公钥
id_rsa # 私钥

(2) 登录linux服务器,将windows用户的公钥文件追加到~/.ssh/authorized_keys
登录服务器,如果当前用户目录下没有.ssh目录,用ssh-keygen方法生成,在.ssh目录下生成authorized_keys,该文件包含一系列允许登录该服务器的公钥,如没有就新建该文件。将公钥内容追加到~/.ssh/authorized_keys中,追加的方法可以是:

cat id_rsa.pub >> authorized_keys

并在配置文件config中添加如下内容:

IdentityFile "C:\Users\chenky190417\.ssh\id_rsa"

这样就可以免密登录远程服务器了。

4.配置

4.1 客户端(windows系统)配置

在配置文件C:\Users\chenky190417.ssh\config中添加如下内容:

    ForwardAgent yes
    ForwardX11 yes
    ForwardX11Trusted yes

4.2 服务器(ubuntu系统)配置

第一步:确认$DISPLAY变量的值

确认的方法是:服务器端输入下图命令,如果出现> echo $DISPLAY localhost:10.0

如果没有,需要设置DISPLAY的值,可以在~/.bashrc默认增加:

export DISPLAY="localhost:10.0"

修改完后要source ~/.bashrc,即可,下面的内容不容处理也可以:

vim /etc/ssh/sshd_config
 # 找到这一行 这条配置的意义是允许 ssh 的 x11 转发
 X11Forwrding yes
 PubkeyAuthentication yes
 RSAAuthentication yes  #没有找到这条,增加
 AuthorizedKeysFile      .ssh/authorized_keys  #没有找到这条,增加

保存退出
service sshd restart # 重启 sshd
echo $DISPLAY # 输出 localhost:10.0

5. 整体运行步骤

5.1 运行VcXsrv

Display number填写获取的$DISPLAY的值,我这里填10,Disable access control勾选,其它按默认即可
在这里插入图片描述
运行成功后将出现图标在任务栏右侧
在这里插入图片描述

5.2 打开vscode连接到服务器

连接后查看$DISPLAY变量,与VcXsrv设定一致

5.3 验证GUI是否正常显示

5.3.1 验证终端terminal使用GUI

在 VSCode Terminal 中输入 xclock,出现时钟则安装成功。
在这里插入图片描述

5.3.2 在服务器要使用GUI的工程中设置.vscode/launch.json (使得工程中的程序能使用GUI)

用vscode连上服务器,并打开一个工程,在.vscode/launch.json尾部添加红框内代码,如果已有env属性,则在里面添加"DISPLAY":"localhost:10.0"就可
launch.json
在这里插入图片描述

四、使用上常见一些问题

1. 代码中文显示乱码问题

  • 解决方法:改变编码设置

文件 --> 首选项 --> 设置 --> 输入 " encoding " 搜索 --> 找到 " Files: Encoding " --> 选择GB18030

然后把文件关闭再打开,就可以看到中文不是乱码了。这种方法不用每次打开新文件都重新操作。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/154093.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MM MSTA-STATM数据丢失问题

2001工厂的采购视图已经维护了,但是在MSTA里面找不到对应的记录 解决方案: 1、se38 执行程序 RMMMVERW 参考 data were lost in table msta | SAP Community 2、取数逻辑换位置,从marc 取数 附加:RMMMVERW 执行界面 执行后…

ESP8266跟ESP-01S区别

看到了吧:ESP8266是一个芯片;ESP8266芯片是由外国的乐鑫公司生产的 ESP8266 Wi-Fi SoC | Espressif Systems ESP-01包含了ESP8266芯片,并且有一些外围电路,这个模块(不是芯片)是由中国的安可信公司生产的。…

软件测试面试思路技巧和方法分享,学到就是赚到

面试技巧(不包含笔试部分): 一、面试前: 投递简历的第一建议是海投,经验不足的情况下切记,不要挑三拣四。 个人建议面试的安排周期,一天最多两家,如果不着急,就安排一家。当面试安排时间发生冲突…

Kafka的重要组件,谈谈流处理引擎Kafka Stream

系列文章目录 上手第一关,手把手教你安装kafka与可视化工具kafka-eagle Kafka是什么,以及如何使用SpringBoot对接Kafka 架构必备能力——kafka的选型对比及应用场景 Kafka存取原理与实现分析,打破面试难关 防止消息丢失与消息重复——Kafka可…

一文看懂TikTok养号

随着国内抖音红利的进一步释放,越来越多人涌入了TikTok国内外市场。而TikTok作为海外新兴的社媒平台,也在迅速的发展着,吸引了大批的跨境电商玩家入驻。然而,TikTok运营的一大难点就是养号,许多人还没开始转化号就被封…

【flink理论】动态表:关系查询处理流的思路:连续查询、状态维护;表转换为流需要编码编码

文章目录 一. 使用关系查询处理流的讨论二. 动态表 & 连续查询(Continuous Query)三. 在流上定义表1. 连续查询2. 查询限制2.1. 维护状态2.2. 计算更新 四. 表到流的转换1. Append-only 流2. Retract 流3. Upsert 流 本文主要讨论了: 讨论通过关系查询处理无界流…

ASP.NET限流器的简单实现

一、滑动时间窗口 我为RateLimiter定义了如下这个简单的IRateLimiter接口,唯一的无参方法TryAcquire利用返回的布尔值确定当前是否超出设定的速率限制。我只提供的两种基于时间窗口的实现,如下所示的基于“滑动时间窗口”的实现类型SliddingWindowRateL…

4. hdfs高可用集群搭建

简介 前面把hadoop机器已经准备好了,zk集群搭建好了,本本就是开始搭建hdfs环境 hadoop环境准备 创建hadoop用户 三台机器都创建hadoop用户 useradd hadoop -d /home/hadoop echo "1q1w1e1r" | passwd --stdin hadoophadoop用户相互免密登…

【Spring】Spring中的DI(依赖注入)Dependence Import

由之前的IoC可以知道,我们写在具体对象后面的new方法肯定不能要了,这时候就要通过依赖注入的形式将Dao配置到Service中 Dependence Import的步骤如下: 1. 在Service类中给Dao提供setter方法 原本我们是直接给bookDao new了一个对象 public …

论文3写作技巧

目录 ⼩论⽂怎么写1 定位⽬标期刊2 写⼩论⽂的核⼼:模仿 ⼩论⽂怎么写 1 定位⽬标期刊 2 写⼩论⽂的核⼼:模仿

JS-项目实战-新增水果库存功能实现

1、fruit.js function $(name) {if (name) {//假设name是 #fruit_tblif (name.startsWith("#")) {name name.substring(1); //fruit_tblreturn document.getElementById(name);} else {return document.getElementsByName(name); //返回的是NodeList类型}} }//当…

HDRP图形入门:RTHandle未知问题

正好电脑看奥本海默,全程尿点十足,就一边看一边把之前整合HDRP遇到的问题说一下。 那就是RTHandle的未知问题,这是官方对RTHandle的说明: unity RTHandle 源代码如下: using System.Collections.Ge…

04-快速掌握Redis,了解Redis中常见的结构类型及其应用场景

Redis快速入门 Remote Dctionary Server Redis是用C语言开发的一个开源的、基于内存的(高性能)键值对(key-value)结构化NoSql数据库,每秒内查询次数可以达到100000的QPS 键值型: Redis中存储的数据都是以key、value对的形式存储,而value的形式多种多样(如字符串、…

2023年第九届数维杯国际大学生数学建模挑战赛A题

2023年第九届数维杯国际大学生数学建模挑战赛正在火热进行,小云学长又在第一时间给大家带来最全最完整的思路代码解析!!! A题思路解析如下: 完整版解题过程及代码,稍后继续给大家分享~ 更多题目完整解析点…

SpringCloud微服务:Nacos的集群、负载均衡、环境隔离

目录 集群 在user-service的yml文件配置集群 启动服务 负载均衡 order-service配置集群 设置负载均衡 当本地集群的服务挂掉时 访问权重 环境隔离 1、Nacos服务分级存储模型 一级是服务,例如userservice 二级是集群,例如杭州或上海 …

【AI视野·今日Sound 声学论文速览 第三十三期】Wed, 25 Oct 2023

AI视野今日CS.Sound 声学论文速览 Wed, 25 Oct 2023 Totally 8 papers 👉上期速览✈更多精彩请移步主页 Daily Sound Papers CDSD: Chinese Dysarthria Speech Database Authors Mengyi Sun, Ming Gao, Xinchen Kang, Shiru Wang, Jun Du, Dengfeng Yao, Su Jing W…

jQuery【事件处理器、鼠标事件、表单事件、键盘事件、浏览器事件、事件对象、jQuery遍历】(三)-全面详解(学习总结---从入门到深化)

目录 事件之绑定事件处理器 事件之鼠标事件 事件之表单事件 事件之键盘事件 事件之浏览器事件 事件对象 jQuery遍历 事件之绑定事件处理器 1、 .on() 在选定的元素上绑定一个或多个事件处理函数 $("#button").on("click", function(event){console…

Android---网络编程优化

网络请求操作是一个 App 的重要组成部分,程序大多数问题都是和网络请求有关。使用 OkHttp 框架后,可以通过 EventListener 来查看一次网络请求的详细情况。一次完整的网络请求会包含以下几个步骤。 也就是说,一次网络请求的操作是从 DNS 解析…

第四代智能井盖传感器:万宾科技智能井盖位移监测方式一览

现在城市化水平不断提高,每个城市的井盖遍布在城市的街道上,是否能够实现常态化和系统化的管理,反映了一个城市治理现代化水平。而且近些年来住建部曾多次要求全国各个城市加强相关的井盖管理工作,作为基础设施重要的一个组成部分…

Python windows安装Python3环境

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …