20220615自行编译projector-client

编译client

gradle\wrapper\gradle-wrapper.properties这里可以修改gradlew的依赖地址distributionUrl,改成速度快的url就行,注意冒号要转义

distributionUrl=http\://xxxxx/generic-gradle-distributions/gradle-7.3-all.zip

修改projector-client-web\src\main\kotlin\org\jetbrains\projector\client\web\window\WebWindowManager.kt

注释掉stateMachine.fire DeactivationEvent后可以让projector一直处于前台,避免命令行调用idea失败

projector-client的electron和web的依赖还好,一次成功了

修改/root/.config/JetBrains/IdeaIC2021.2/idea64.vmoptions,增加

-Djava.awt.headless=true

可以在projector中正常使用命令行/projector/ide/bin/idea.sh

/usr/local/bin/idea软链到/projector/ide/bin/idea.sh可简化为idea

编写可执行文件i放到path下,内容为idea ${PWD},在项目根目录执行i可直接控制projector切换项目

projector-client-web\src\main\resources\manifest.webmanifest是静态的,当设置了连接密码后,edge默认的快捷方式会读取这个地址丢失query param,暂时通过–app参数代替–app-url可绕过。

TODO 考虑是否能动态生成start_url和manifest.webmanifest?

重新编译server

根目录新增local.properties,修改useLocalProjectorClient=true可使用本地的client依赖打包

projector-client必须和projector-server同级,程序默认使用../projector-client寻找上一步的产物

在projector-server-common\gradle.properties修改服务器版本

在projector-server根目录执行打包命令,不是第二层的projector-server

如果gradlew找不到正确的java11版本,手动修改脚本JAVA_HOME部分

projector-server的依赖不知道为啥有几率失败

待定位根本原因,基本是访问jetbrains服务器失败,在插件内部。debug显示jetbrans的依赖服务器不支持tlsv1.2和1.3,但curl手动测试是正常的,在根目录的gradle.properties里逐个尝试这几个版本直到所有依赖都下载成功后暂时绕过了问题

国内镜像

常用的环境变量如下表,其余的请参考smartide.cn
key
required
默认值
desc
LOCAL_USER_UID
0
1000
0代表root
1000代表内置的用户名smartide
LOCAL_USER_GID
0
1000
LOCAL_USER_UID!=0时有效,1000代表内置的用户名smartide
LOCAL_USER_PASSWORD
0
smartide123.@IDE
本地用户密码
PERSISTENT_HOME
0
0
是否持久化HOME目录
PERSISTENT_HOME_DIR
0
/data/root
HOME目录持久化物理路径
PROJECTOR_SERVER_TOKEN
0
读写token,不设置就不需要密码
PROJECTOR_SERVER_RO_TOKEN
0
只读token,设置了就允许通过此token观看

更新记录:

  • 支持vim和shell的中文显示编辑、tmux鼠标滚轮支持、idea命令行加入PATH
  • 修复vm下重启后$HOME目录的复用问题
  • after 2023.1,自动清理lock文件,修复异常重启后的CannotActivateException
  • 支持通过PERSISTENT_HOMEPERSISTENT_HOME_DIR持久化$HOME目录,同时兼容k8s pvc、虚机的docker runtime+volumn map,支持非root启动
  • 可选通过PROJECTOR_SERVER_TOKEN设置连接密码
  • 可选通过PROJECTOR_SERVER_RO_TOKEN设置只读密码
  • projector-client merge zhipengzuo/1.8.1,优化终端渲染速度tagv1.8.1.3
  • projector-server 修复部分情况下(如Getter Setter Selector) 被editor抢焦点的问题,tagv1.8.1.7
  • 修复了jcef的崩溃 client tag v1.8.1.8

vm命令示例

k8s的yaml示例

其他易用性处理

vm参数

这里也能加-Dxxx手动修改projector-server密码,重启后生效

/root/.config/JetBrains/IdeaIC2021.2/idea64.vmoptions增加idea启动参数开启开发者插件,开启tools里的psiviewer方便查看语法/语义树

其他IDEA vm参数均可通过菜单HelpEdit Custom VM Options...手动修改

剪切板

windows自带的端口转发,转发后使用localhost访问可避免剪切板无法使用的问题

处理中文显示问题

开启tmux鼠标滚轮

PWA快捷方式设置连接密码

参考资料

腾讯云gradlew mirror

distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-7.4.2-all.zip
阿里云mirror

附kts写法

https://github.com/JetBrains/projector-installer/blob/9d926fd75c5463585b900fa505f6b8e243331f46/projector_installer/config_generator.py#L148
https://github.com/JetBrains/projector-client/blob/master/projector-client-web/README.md
https://www.reddit.com/r/edge/comments/gcrq7n/location_of_edge_apps/
https://github.com/956237586/SmartIDE/releases/tag/2023101602_idea
https://github.com/956237586/projector-client/releases/tag/v1.8.0.2
0 Comments
Leave a Reply