自托管虚拟浏览器n.eko

本文介绍了n.eko,一个支持多种浏览器的Docker环境下的虚拟浏览器,特别强调了其WebRTC功能和高配置需求。文章详细讲述了在群晖上安装n.eko的方法,包括docker-cli和docker-compose的步骤,以及关键配置参数的含义。
摘要由CSDN通过智能技术生成

在这里插入图片描述

本文开始于 202010 月,但因为种种原因一直未完成,最近因为朋友需要,又重新捡起来了,最终完成了这篇横跨了 5 年的文档

什么是 n.eko ?

n.eko 是一个基于 docker 隔离环境的虚拟浏览器,支持 firefoxchromeopera 等多个版本的浏览器,内置了聊天/简单的用户管理功能。

这个应用程序使用 WebRTCdocker 容器中传输桌面视频流,所以需要比较高的配置,毕竟要对桌面进行编码/传输,而且浏览器本身还要消耗性能,以下数据来自官方的文档,https://neko.m1k1o.net/#/getting-started/quick-start

分辨率核心数内存建议
1024×576 @ 3022GB不建议
1280x720 @ 3043GB还行
1280x720 @ 3064GB推荐
1280x720 @ 3084GB以上最好

现在最高可以支持到 1920×1080@60,但没有找到新的关于性能的说明。

管理员可以在 GUI 上直接修改分辨率,后面有提到

官方 nurdism/neko2021 年就不再维护了,现在最新的分支是 m1k1o/neko

n.eko 有很多用例和场景,例如可以互动演示,远程协作,观看视频等等,更多的用例请看:
https://github.com/m1k1o/neko#use-cases-and-comparison

安装

在群晖上以 Docker 方式安装。

在注册表中搜索 neko ,选择第一个 m1k1o/neko,版本选择 latest

本文写作时, latest 版本对应为 firefox

因为涉及到连续 udp 端口的映射,所以我们用 SSH 客户端连到群晖主机,采用命令行方式安装

docker cli 安装

docker cli 会更快捷

# 运行容器
docker run -d \
   --restart unless-stopped \
   --name neko \
   --shm-size="2gb" \
   -p 4181:8080 \
   -p 52000-52100:52000-52100/udp \
   -e NEKO_PASSWORD='neko' \
   -e NEKO_PASSWORD_ADMIN='admin' \
   -e NEKO_NAT1TO1=192.168.0.197 \
   -e NEKO_SCREEN=1920x1080@30 \
   -e NEKO_ICELITE=1 \
   -e NEKO_EPR=52000-52100 \
   m1k1o/neko:latest

主要参数的说明

  • --shm-size=2gb 是必须要,表示将共享内存的大小设置为 2GB
  • --cap-add SYS_ADMIN :如果你采用的是 chromium 核心的浏览器版本,需要增加 --cap-add=SYS_ADMIN 参数
  • NEKO_PASSWORD :是普通用户的密码
  • NEKO_PASSWORD_ADMIN:是管理员 admin 的密码

用户名随便,通过匹配密码获得相应的权限,记得将上面两个参数修改成你自己的密码

  • NEKO_NAT1TO1
    1. 如果你在局域网使用,设置为群晖的局域网 IP 即可;
    2. 如果你在公网使用,可以忽略这个参数,它会自动获取您的公网 IP
  • NEKO_SCREEN:设置分辨率
  • NEKO_ICELITE:使用 Ice Lite 协议
  • NEKO_EPRWebRTC 所需的 UDP 端口范围
  • NEKO_FILE_TRANSFER_ENABLED:如果要启用文件传输功能,需设置为 true

更多参数说明,请参考官方文档:https://github.com/m1k1o/neko/blob/master/docs/getting-started/configuration.md

或者 https://neko.m1k1o.net/#/getting-started/configuration

docker-compose` 安装

将下面的内容保存为 docker-compose.yml 文件

version: "3.4"

services:
  neko:
    image: "m1k1o/neko:latest"
    container_name: "neko"
    restart: "unless-stopped"
    shm_size: "2gb"
    ports:
      - "4181:8080"
      - "52000-52100:52000-52100/udp"
    environment:
      NEKO_SCREEN: 1920x1080@30
      NEKO_PASSWORD: neko
      NEKO_PASSWORD_ADMIN: admin
      NEKO_NAT1TO1: 192.168.0.197
      NEKO_EPR: 52000-52100
      NEKO_ICELITE: 1

然后执行下面的命令

# 新建文件夹 neko 
mkdir -p /volume1/docker/neko

# 进入 neko 目录
cd /volume1/docker/neko

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:4181,就可以看到主界面了

title

普通用户

例如使用用户名 laosu,密码就是刚才设置的 NEKO_PASSWORD,只要密码对上就可以登录

如果你使用的是 chromium 版本

如果密码错误

title

管理员

例如使用用户名 admin ,密码就是刚才设置的 NEKO_PASSWORD_ADMIN

如果你使用的是 chromium 版本

聊天

打开网页

支持聊天

分辨率

管理员端的右侧电脑图标

最高分辨率为 1920*1080@60

最低可以到 640*360@60,其他端会同步分辨率

参考资料

nurdism/neko: A self hosted virtual browser (rabb.it clone) that runs in docker.
地址:https://github.com/nurdism/neko

m1k1o/neko: A self hosted virtual browser (rabb.it clone) that runs in docker.
地址:https://github.com/m1k1o/neko

n.eko
地址:https://neko.m1k1o.net

### 回答1: 题目描述: Eko 有一排树,每棵树的高度不同。他想要砍掉一些树,使得剩下的树的高度都相同。他希望砍掉的树的高度尽可能地少,你能帮他算出最少要砍掉多少棵树吗? 输入格式: 第一行包含两个整数 N 和 M,分别表示树的数量和 Eko 希望的树的高度。 第二行包含 N 个整数,表示每棵树的高度。 输出格式: 输出一个整数,表示最少要砍掉的树的数量。 输入样例: 9 5 2 3 4 7 8 9 10 11 12 输出样例: 3 解题思路: 二分答案 首先,我们可以发现,如果我们知道了 Eko 希望的树的高度,那么我们就可以计算出砍掉多少棵树。 具体来说,我们可以遍历每棵树,如果它的高度大于 Eko 希望的树的高度,那么就将它砍掉,否则就保留它。 然后,我们可以使用二分答案的方法来确定 Eko 希望的树的高度。 具体来说,我们可以将树的高度排序,然后二分一个可能的 Eko 希望的树的高度,然后计算砍掉多少棵树,如果砍掉的树的数量小于等于 M,那么说明 Eko 希望的树的高度可能更小,否则说明 Eko 希望的树的高度可能更大。 最后,我们可以得到最少要砍掉的树的数量。 时间复杂度:O(NlogN)。 参考代码: ### 回答2: 这道题目是一道模拟题,需要模拟机器人的移动过程以及得出最终机器人的位置和朝向。首先需要明确机器人的起始位置以及朝向,其次需要读取输入的指令,根据指令逐步移动机器人,并顺便判断是否会越界或者碰到障碍物。最后输出最终机器人的位置和朝向。 在本题中,需要按照从西向东、从北向南、从东向西、从南向北的顺序判断机器人的朝向。为了方便表述,我把机器人的朝向表示为0、1、2、3,分别代表从西向东、从北向南、从东向西、从南向北。 具体地说,机器人按照指令逐步移动时需要分情况讨论,比如: 1.当前机器人朝向为0,即从西向东: 若指令为F,则x坐标+1,但需要判断是否越界或者碰到障碍物。 若指令为L,则朝向变为3。 若指令为R,则朝向变为1。 2.当前机器人朝向为1,即从北向南: 若指令为F,则y坐标-1,但需要判断是否越界或者碰到障碍物。 若指令为L,则朝向变为0。 若指令为R,则朝向变为2。 3.当前机器人朝向为2,即从东向西: 若指令为F,则x坐标-1,但需要判断是否越界或者碰到障碍物。 若指令为L,则朝向变为1。 若指令为R,则朝向变为3。 4.当前机器人朝向为3,即从南向北: 若指令为F,则y坐标+1,但需要判断是否越界或者碰到障碍物。 若指令为L,则朝向变为2。 若指令为R,则朝向变为0。 最后输出最终机器人的位置和朝向即可。 在编写程序时需要注意判断边界和障碍物,以及要用scanf读取输入,不要用C++的cin,否则会TLE。此外,由于本题没有给出边界和障碍物,需要自己设置。最后,本题的思路不难,但是需要认真仔细地处理各种情况,多测试几组数据找出程序的漏洞,这样才能通过本题。 ### 回答3: 本题为一道组合数学题,需要运用排列组合知识进行分析。 题目要求将n个方块填入3*3的网格中,每个方块可以是红色、绿色或蓝色的一个。要求每行、每列和对角线上的方块颜色都不相同。求方案总数。 首先考虑对第一行进行颜色选取。由于第一行每个位置的颜色都不影响其他行和列,故第一行的颜色选取不影响总方案数。所以假设第一行颜色已经确定,考虑第二行的颜色选取。第二行中各位置的颜色受到第一行的限制,只有第一行某位置颜色的补集才能选取。例如,若第一行第一个位置是红色,那么第二行第一个位置不能选取红色。因为每行颜色不能相同,所以第二行受到第一行限制的位置只有3个。第三行同理,由于前两行的限制,只有2个位置可选。做完颜色选取后,再将每行的方块进行排列,此时我们可以使用错排公式得到方案数: D(n) = n!(1 - 1/1! + 1/2! - 1/3! + ... + (-1)^(n)/n!) 最终,方案总数即为每个第一行颜色选取方法下的错排方案数之和。按题意枚举第一行的颜色,就可以得到最终的方案总数了。 总结一下,本题所需要的知识点为:错排公式、颜色限制对组合数的影响、暴力枚举法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨浦老苏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值