Windows2016配置OPC DA DCOM通信-转载

https://www.claves.cn/archives/5838

一、进入DCOM配置程序

1.1 运行 dcomcnfg 进入 DCOM 配置程序

img

1.2 “组件服务” >“计算机” >“我的电脑” >“DCOM 配置”进入 CCOM 配置程序

img

二、服务端配置

2.1 服务端DCOM配置

步骤1:右击“我的电脑”进行属性设置

img

1)、设置“我的电脑”默认属性

img

2)、设置“我的电脑” COM 安全机制之访问权限 -“编辑限制”

img

img

img

img

步骤 4:选择用户:

1
2
3
4
5
6
7
8
9
Administrator 
Administrators
ANONYMOUS LOGON
Distributed COM Users
Everyone
Guests
INTERACTINE
NETWORK
SYSTEM

步骤 5:设置以上 9 个用户访问权限为:

img

本地访问:允许
远程访问:允许
3)、设置“我的电脑” COM 安全机制之访问权限 -“编辑默认值”

img

同 设置“我的电脑” COM 安全机制之访问权限 -“编辑限制”步骤 1 到步骤 5
4)、设置“我的电脑” COM 安全机制之启动和激活权限 -“编辑限制”

img

增加用户:

1
2
3
4
5
6
7
8
9
Administrator 
Administrators
ANONYMOUS LOGON
Distributed COM Users
Everyone
Guests
INTERACTINE
NETWORK
SYSTEM

配置每个用户权限为:

img

5)、设置“我的电脑” COM 安全机制之启动和激活权限 -“编辑限制”

img

增加用户:

1
2
3
4
5
6
7
8
9
Administrator 
Administrators
ANONYMOUS LOGON
Distributed COM Users
Everyone
Guests
INTERACTINE
NETWORK
SYSTEM

配置每个用户权限为:

img

2、配置 OpcEnum
1)、选择“ DCOM 配置”

img

2)、选择“ OpcEnum”

img

注:若此处未找到 OpcEnum 插件,需安装一个 OPC Core Components Redistributable (x64) ,
可以自行百度查找安装,并注意需安装对应操作系统的安装包。

img

3)、右击配置 OpcEnum 属性之常规为无

img

4)、配置 OpcEnum 属性之“安全”

img

5)、对“配置权限”之“自定义”进行“编辑”
增加用户:

1
2
3
4
5
6
7
8
9
Administrator 
Administrators
ANONYMOUS LOGON
Distributed COM Users
Everyone
Guests
INTERACTINE
NETWORK
SYSTEM

配置每个用户名权限为:

img

6)、配置 OpcEnum 属性之“标识”

img

注:若此处交互式运用为灰色不能选择,按以下步骤进行操作。

①、在 C 盘中找 OpcEnum.exe 的安装位置
②、把安装位置拉到运行中: OpcEnum.exe 安装位置+空格+ //regserver 回车确定

img

3、配置 opc server

1)、选择 OPC Server 组件服务名称,本例 OPC Server 为 KEP Server

img

2)、配置 KEP Server 属性之“常规”为“无”

img

3)、配置 KEP Server 属性之“安全”

img

4)、对“配置权限”之“自定义”进行“编辑”

增加用户:

1
2
3
4
5
6
7
8
9
Administrator 
Administrators
ANONYMOUS LOGON
Distributed COM Users
Everyone
Guests
INTERACTINE
NETWORK
SYSTEM

配置每个用户名权限为:

img

二 服务端安全策略配置

1、进入安全策略程序
控制面板 >管理工具 >本地安全策略

img

2、配置安全策略之安全

img

网络访问:本地账户的共享和安全模式设置为“经典”

img

3、配置安全策略之匿名用户

img

网络访问:将 Everyong 权限应用于匿名用户设置为“已启用

img

三 服务端防火墙配置

1、进行防火墙“例外” (允许程序通过 Windows 防火墙通讯)

控制面板 >所有控制面板项 >Windows 防火墙 >允许的程序

img

2、添加 DCOM 端口

控制面板 >所有控制面板项 >Windows 防火墙 >高级设置

img

img

img

img

img

img

img

出站规则同入站规则设置

3、添加例外程序 OpcEnum

OpcEnum 路径程序在 C:\Windows\System32\OpcEnum.exe

img

4、添加例外程序 OPC Serve(本例为 KEP SERVE)

KEP SERVE 的路径程序在 C:\Program Files (x86)\KEPServerEx\servermain.exe

img

5、添加 MMC 控制台程序

img

6、打开文件和共享

img

最后确保下列所有项都在防火墙例外程序中

img

img

img

第三节 客户端配置

一 客户端 DCOM 配置

1、配置“我的电脑”
所有配置与服务端配置“我的电脑”相同

一 客户端防火墙配置

1、添加 DCOM 端口
所有配置与服务端配置“我的电脑”相同

Siemens wincc opc da 数据断流问题探索-转载

https://www.claves.cn/archives/6181

一、问题

项目场景

某行业DCS控制系统通过西门子WinCC系统实现,为了实现智能集控功能,需要从WinCC OA采集产线数据。

技术问题

频繁出现OPC DA Client采集连接断开问题,导致工业互联网平台数据断流,检查DCOM等配置后无果,无法直接排除原因。

分析过程

客户端 190.182.183.15 Administrator/Apef123456
服务端 190.182.57.71/72 Administrator/Apef123456!

1、客户端与服务端登录的用户名与密码不一致,新增了一个用户OpcUser/Apef123456

2、客户端可以ping通服务端IP、服务端不能ping通客户端IP

——————–服务端与客户端测试——————————————

3、190.182.183.15服务器仅远程服务端(190.182.57.71)时,190.182.183.15服务器上的客户端才能正常访问服务端(190.182.57.71)
的OPC服务
4、190.182.183.15服务器仅远程服务端(190.182.57.72)时,190.182.183.15服务器上的客户端才能正常访问服务端(190.182.57.72)
的OPC服务

——————–服务端与服务端测试——————————————

5、190.182.183.15服务器远程服务端(190.182.57.71/72)
时,两服务端的客户端都能正常访问各自的OPC服务,一旦190.182.183.15服务器断开其中一个远程,未断开远程的客户端不能访问已断开远程的OPC服务

初步分析结果

比较明显断流与远程桌面存在关系。

问题深入探究

咨询西门子业内专家后,转发提供URL资料。

1
https://support.industry.siemens.com/cs/mdm/109792613?c=133562653835&dl=zh&t=1&s=RDP&lc=en-DE

下面是上述URL链接的内容。

远程访问和远程桌面协议 (RDP)

远程访问 WinCC 站

有关远程访问的最新操作说明,请参见以下常见问题解答:

有关远程组态的详细信息,另请参见 WinCC 信息系统的“组态 > 多用户系统 > 远程组态”部分。

允许方案

以下方案已经过测试:

  • WinCC 作为单用户系统
  • WinCC 作为分布式系统
  • WinCC 在冗余模式下
  • WinCC/WebUX 服务器

也可以在允许方案中通过 OPC 进行通信。

使用 RealVNC

有关“RealVNC”使用方面信息,请访问 Internet 上的客户支持页面:

RealVNC 不支持键盘锁

请注意“RealVNC”不支持键盘锁。仅在使用远程桌面协议连接时,键盘锁才有效。

通过 RDP 对 WinCC 系统进行远程维护

仅当 WinCC 服务器或单用户系统运行在 WinCC ServiceMode 模式时,才允许使用远程桌面协议 (RDP)。

使用 RDP 时的限制

遵循下列限制:

  • 以本地“SIMATIC HMI”用户组成员的用户身份启动 WinCC
    项目。这意味着通过远程控制台操作时,可启动所有服务。详细信息请参见“组态 > WinCC ServiceMode”
  • 尚未允许在 SIMATIC 管理器中用于集成操作。
注意中断远程桌面连接后数据丢失当远程桌面连接中断(例如,由于从运行远程桌面客户端的计算机上拆下网络电缆)时,归档和 OPC 服务器等将不再从数据管理器接收值。该状态将维持到连接恢复或大约 35 秒的超时时间到时。

启动远程桌面

可利用“远程桌面”客户端通过控制台会话来访问 WinCC 系统。

只有同一用户通过控制台接管或初次登录,才可实现通过“远程桌面协议”访问。

用户组和访问权限

所有“远程桌面”用户都必须是目标 PC 上“SIMATIC HMI”用户组的成员。

操作步骤

  1. 要启动控制台会话,打开“运行”(Run) 对话框,例如使用 <Windows 按钮 + R>。

  2. 输入以下命令:

    • - mstsc /v: /admin

    输入计算机名称或 IP 地址作为服务器。

有关附加参数的详细信息,输入以下命令:

  • - mstsc /?

移植:仅通过 UNC 路径远程移植 WinCC 项目

仅使用 UNC 路径远程移植 WinCC 项目。

发布该项目的项目路径或文件夹。

在 WinCC 项目移植器中,将此 UNC 路径作为项目目录。

二、解决方法

解决方法:

  • WinCC 服务器配置成WinCC ServiceMode 模式;
  • 关闭RDP远程桌面服务;

OPC的DCOM配置-转载

源网址:https://www.cnblogs.com/tqianly/p/3749357.html

OPC的DCOM配置

关于OPC通讯做的比较多了。但是OPC的DCOM配置一直没认真去查资料,专心去整。这可能是因为我在测试程序的时候都是把服务器跟客户端在同一台电脑上运行,这样就不要配置DCOM。现在来记录一下下个人在网上查找的资料吧。

http://blog.csdn.net/jinzhili/article/details/970233

http://www.cnblogs.com/johnpher/archive/2012/10/27/2742207.html

我首先是根据第一个博客提供的方法配置了一下,然后用OPC客户端连接的时候,没有成功。提示

“ 对 COM 组件的调用返回了错误 HRESULT E_FAIL。 ”

然后我又按照第二个博客的办法配置了一下,OPC客户端就可以连的上远程的OPC服务器了。所以只能说我这次成功了,但不知道我有没有多余的配置。

下面来说说我做的吧。

(1)服务器的配置

a)安装 NWLink IPX/SPX/NetBIOS Compatible Transport Protocol 协议

在“网络连接”里面找到你用的那个网络端口,比如说我用的是无线上网,选择“无线网络连接”,右击“属性”。

img

在以上页面中点击“安装” —— “协议”——找到那个协议安装。(我的那个协议已经装过了,所以在列表中可以看到)。

b)关闭防火墙跟杀毒软件。在服务器机跟客户端机都需要。

c) 运行dcomcnfg

img

在如下图的“我的电脑”的属性页中配置:

img

在以下的选项卡里面设置:

img img

在“COM安全”选项添加Administrator、ANONYMOUS、LOGON Guest、everyone、Eason(这个是我电脑的登陆名,这里也设置了)

然后每一个都把权限给勾上。

img

d)在OPC服务器上,还要回到“组件服务”界面,打开”DCOM配置”,找到注册的OPC服务器的名称选项,打开它的属性。

img

img img img

(注:有时做好dcom配置后,需要重新启动电脑才起作用。所以为了安全起见,建议最好重新启动一下电脑,再做下一步)。

e)本地安全策略配置**
**

1、OPC服务器和OPCClient服务器都要设置:打开“控制面版”——“管理工具”——打开“本地安全策略” 安全选项——”网络访问:本地帐户的共享和安全模式”——属性

img

注:如果不配置这个,那么在连接OPC服务器的时候,就会出现拒绝访问的现象。

(2)客户端的配置

**
**客户端按照以上服务器的

a)、b)、c)、e)配置,然后就可以连接的上了。

附一些可能的配置方法:

一、在装有某OPC SERVER的机器上。DCOM配置如下
\1. 运行服务器上的dcomcnfg程序,进行DCOM配置。
\2. 进入DCOM的总体默认属性页面,将“在这台计算机上启用分布式COM”打上勾,将默认身份级别改为“无”。
\3. 进入DCOM的总体默认安全机制页面,确认默认访问权限和默认启动权限中的默认值无EveryOne,
如果不去掉EveryOne,应用服务器不能正常启动。
4.在常规页面中,双击你的应用服务器,打开你的应用服务器DCOM属性设置。
5.将常规页面中的身份验证级别改为“无”。
6.位置页面中选上“在这台计算机上运行应用程序”。
7.将安全性页面设置中,均选择“使用自定义访问权限”,编辑每一个权限,将EveryOne加入用户列表中。
8.身份标识页面中,选择“交互式用户”。
注意NT的GUEST用户不能禁用。
二、在客户端机器上DCOM配置如下:
1后点”开始”->”运行”,输入”dcomcnfg”,然后回车,启动dcom配 置。
2. 常规页面中,双击你的应用服务器,打开你的应用服务器DCOM属性设置。
3. 将常规页面中的身份验证级别改为“无”。
4. 身份标识页面中,选择“交互式用户”。
5. 位置页面中,选择“在这台计算机上运行应用程序”。
进入DCOM的总体默认属性页面,将“在这台计算机上启用分布式COM”打上勾,将默认身份级别改为“无”。
两端配置好后,客户端机器就可以访问远方机器的OPCSERVER了

在Win11上离线安装 .NET Framework 3.5的方法

随 Windows 11提供的是.NET Framework 4.8,该环境可以运行任何 .NET Framework 4.x 应用。
而.NET Framework 3.5 支持为 .NET Framework 2.0 到 3.5 生成的应用,需要自行安装。

当Win11的应用软件需要.net framework3.5的运行环境时,就会提示“你的电脑上的应用需要使用以下Windows功能:.NET Framework 3.5(
包括.NET 2.0和3.0)。

在线安装耗时很长,下面是离线安装.NET Framework 3.5的方法:

1、下载离线安装包,Win 10安装net 3.5的方法都是先下载net 3.5的cab包,然后用dsim命令来安装。

2、关掉所有[杀毒软件]及电脑管理管家等如360安全卫士

3、将下载的安装包放到c盘windows目录下(根据需要放置)

6d10cfdc3c944de5b062d11f880507ec.png

4、用命令行安装:
以管理员身份打开cmd,输入以下命令:

1
dism.exe /online /enable-feature /featurename:netfx3 /Source:C:\Windows\sxs

等待进度到100%,显示操作成功完成: df868a68afad4c21846446c7d3b185f7.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
在Win11上离线安装 .NET Framework 3.5的方法

随 Windows 11提供的是.NET Framework 4.8,该环境可以运行任何 .NET Framework 4.x 应用。
而.NET Framework 3.5 支持为 .NET Framework 2.0 到 3.5 生成的应用,需要自行安装。
当Win11的应用软件需要.net framework3.5的运行环境时,就会提示“你的电脑上的应用需要使用以下Windows功能:.NET Framework 3.5(包括.NET 2.0和3.0)。
在线安装耗时很长,下面是离线安装.NET Framework 3.5的方法:

1、下载离线安装包,Win 10安装net 3.5的方法都是先下载net 3.5的cab包,然后用dsim命令来安装。
2、关掉所有杀毒软件及电脑管理管家等如360安全卫士
3、将下载的安装包放到c盘windows目录下(根据需要放置)
/4、用命令行安装:
以管理员身份打开cmd,输入以下命令:
dism.exe /online /enable-feature /featurename:netfx3 /Source:C:\Windows\sxs

等待进度到100%,显示操作成功完成即可。

Windows安装SSH-Win32-OpenSSH

ssh config配置文件

C:\ProgramData\ssh
C:\ProgramData\ssh\sshd_config
%programdata%\ssh\sshd_config

配置 sshd_config

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Port 22
ListenAddress 0.0.0.0
SyslogFacility LOCAL0
LogLevel DEBUG
PubkeyAuthentication yes
PermitEmptyPasswords no
PasswordAuthentication no
AuthorizedKeysFile C:/Users/Administrator/.ssh/authorized_keys
IgnoreUserKnownHosts no
IgnoreRhosts yes
Subsystem sftp sftp-server.exe

PermitRootLogin yes
GSSAPIAuthentication no
PubkeyAcceptedKeyTypes=+ssh-rsa

安装 GIT 配置 authorized_keys

C:/Users/Administrator/.ssh/authorized_keys

ssh-keygen需要配置为ISA

1
2
3
4
5
6
7
8
9
10
ssh-keygen -t rsa -m PEM
ssh-keygen -t rsa -m PEM

Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa):
Enter passphrase for "/c/Users/Administrator/.ssh/id_rsa" (empty for no passphrase):
Enter same passphrase again:

Your identification has been saved in /c/Users/Administrator/.ssh/id_rsa
Your public key has been saved in /c/Users/Administrator/.ssh/id_rsa.pub

ARMBoxLinuxBox盒子工控机

LinuxBox配置清单

序号 事项
1 安装chromium-browser ,命令sudo apt-get install chromium-browser -y
2 禁用ChromeBrower数据收集功能
1.打开 Chromium 浏览器。
2.点击右上角的菜单按钮,选择“设置”。
3.在“隐私和安全”部分,找到“帮助改进 Chrome 的功能和性能”选项并关闭
3 配置ChromeBrower开机自启动和全屏(/home/ubuntu/.config/autostart)
4 配置WiFi连接
5 桌面禁用锁屏和黑屏配置
6 配置Ubuntu时区
sudo timedatectl set-timezone Asia/Shanghai
sudo cat /etc/timezone
7 Chrome disable browser metrics
chmod -R 000 /root/snap/chromium/common/chromium/BrowserMetrics
d--------- 2 root root 16K 6月 12 22:00 BrowserMetrics

LinuxBox盒子图片

操作系统版本 lsb_release -a

1
2
3
4
5
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.10
Release: 24.10
Codename: oracular

连接地址 192.168.0.148

序号 账号 密码
1 ubuntu ubuntu
2 root As12345678

软件安装(Chrome/中文)

  • chrome安装(root安装)

    1
    sudo snap install chromium
  • 浏览器字体安装

    1
    2
    3
    4
    5
    6
    7
    8
    sudo apt update && sudo apt upgrade -y
    sudo apt install language-pack-zh-hans -y

    sudo locale-gen zh_CN.UTF-8 # 生成中文 locale
    sudo update-locale LANG=zh_CN.UTF-8 # 设置系统默认语言

    export LANG=zh_CN.UTF-8
    sudo apt install fonts-wqy-zenhei fonts-wqy-microhei fonts-noto-cjk -y

Chrome开机自启动

创建桌面启动文件

这种方法适合需要自定义启动参数的场景:

  1. 打开终端,运行以下命令创建启动文件:
1
2
3
mkdir -p ~/.config/autostart
cd ~/.config/autostart
nano chromium.desktop
  1. 在文件中输入以下内容:
1
2
3
[Desktop Entry]
Type=Application
Exec=/usr/bin/chromium-browser --start-maximized --disable-infobars --kiosk "http://192.168.0.190/hmi/dsfq"
  • --start-maximized:启动时最大化窗口。
  • --kiosk:全屏模式。
  • "http://www.example.com":替换为你希望打开的网页地址。
  • 配置URL地址:"http://192.168.0.190/hmi/dsfq"

Ubuntu22.04网络配置固定IP地址

1
2
cp  /etc/systemd/network/10-eth0.network /etc/systemd/network/10-eth0.network.bak
vim /etc/systemd/network/10-eth0.network

/etc/systemd/network/10-eth0.network

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Match]
Name=eth*

[Network]
DHCP=
Address=192.168.1.240/24
Gateway=192.168.1.1
#DNS=192.168.1.1

[DHCPv4]
RouteMetric=100

[IPv6AcceptRA]
RouteMetric=100

/etc/systemd/network/20-wlan0.network

1
2
3
4
5
6
7
8
9
10
11
12
[Match]
Name=wlan0

[Network]
DHCP=yes
IgnoreCarrierLoss=5 seconds

[DHCPv4]
RouteMetric=4096

[IPv6AcceptRA]
RouteMetric=4096

WiFi连接Linux盒子

序号 方式
1 你用命令nmtui 然后选择第二个
2 (如果没有这个nmtui命令)root目录下有一个wifi开头的脚本,执行这个脚本连接WIFI

操作方式/root/wifi-connect.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/root/wifi-connect.sh

Connect to wifi network wlan0: brcmfmac

1: CU_Jtyu
2: DIRECT-519BC577
3: DIRECT-49-HP Laser 136w
4: Cloud-Bird
5: kingdee
6: Cloud-bird5G
Choose wifi SSID: 6
Please enter password/pre shared key for [Cloud-bird5G]:
Trying to authenticate, please wait...
auth ok
Saving wifi config...
Try getting ip from DHCP...
Setting LLMNR support level "yes" for "3", but the global support level is "no".

Ready. Wifi address: 192.168.0.196

Linux盒子配置一直亮屏(禁用锁屏和黑屏)

在 Ubuntu 20.04 中,可以通过命令行禁用锁屏和黑屏功能。以下是具体步骤:

手工操作禁用锁屏(黑屏命令行无效)


禁用锁屏

  1. 禁用屏幕保护程序和锁屏

    • 打开终端(Terminal)。

    • 输入以下命令来禁用屏幕保护程序和锁屏功能:

    1
    2
    3
    4
    5
    6
    sudo gsettings set org.gnome.desktop.screensaver lock-enabled false
    sudo gsettings set org.gnome.desktop.screensaver idle-activation-enabled false

    sudo gsettings set org.gnome.desktop.screensaver enabled false
    sudo gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'off'
    sudo gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-type 'off'
  • 第一个命令禁用了锁屏功能,第二个命令禁用了屏幕保护程序的自动激活。
  1. 禁用电源管理中的屏幕关闭

    • 输入以下命令来禁用屏幕关闭:
    1
    2
    3
    sudo gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing'

    sudo gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-type 'nothing'
  • 这些命令分别设置了在连接电源适配器和使用电池时,系统不会自动关闭屏幕。

禁用黑屏

黑屏通常是由于屏幕保护程序或电源管理设置导致的。通过上述命令禁用了屏幕保护程序和电源管理中的屏幕关闭后,黑屏问题应该会得到解决。

验证设置

  • 你可以通过以下命令查看当前的设置是否生效:

    1
    2
    3
    4
    gsettings get org.gnome.desktop.screensaver lock-enabled
    gsettings get org.gnome.desktop.screensaver idle-activation-enabled
    gsettings get org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type
    gsettings get org.gnome.settings-daemon.plugins.power sleep-inactive-battery-type
  • 如果返回值为 false'nothing',说明设置已经生效。

注意事项

  • 如果你使用的是其他桌面环境(如 KDE、XFCE 等),可能需要使用不同的命令或工具来调整这些设置。
  • 如果你希望恢复默认设置,可以将上述命令中的 false'nothing' 改为 true 或默认值。

通过以上步骤,你应该可以在 Ubuntu 20.04 中通过命令行禁用锁屏和黑屏功能。

Chrome日志存储过大22G chromium/BrowserMetrics

/root/snap/chromium/common/chromium/BrowserMetrics 这个文件夹是什么东西,容量太大了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
sudo find / -type f -exec du -h {} + 2>/dev/null | sort -rh | head -n 20
sudo du -ah / | sort -rh | head -n 20

30G /
22G /root/snap/chromium/common/chromium/BrowserMetrics
22G /root/snap/chromium/common/chromium
22G /root/snap/chromium/common
22G /root/snap/chromium
22G /root/snap
22G /root
3.4G /usr
2.8G /snap
2.0G /var
1.6G /usr/share
1.5G /usr/lib
1.4G /var/lib
1.2G /var/lib/snapd
1.2G /snap/gnome-42-2204/201/usr
1.2G /snap/gnome-42-2204/201
1.2G /snap/gnome-42-2204
1.1G /usr/lib/aarch64-linux-gnu
1016M /var/lib/snapd/snaps
961M /snap/gnome-42-2204/201/usr/lib

解决办法chromium/BrowserMetrics

—>解决办法

完全卸载snap安装的Chromium 应用,使用谷歌官方网站下载的浏览器。

1
2
3
4
5
6
sudo snap remove --purge chromium 
sudo snap remove --purge chromium-browser

#安装
sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb

禁用更新

1
2
3
4
5
sudo refresh chromium --unhold
sudo snap set chromium refresh.metered=unhold

sudo snap set system refresh.metered=hold
sudo snap get system refresh.metered
1).更新到最新版本
1
sudo snap refresh chromium
2).Disable chromium更新
2.1.第一种disable方式
1
2
3
4
5
6
7
8
9
10
11
12
1.移除snap对chromium的自动更新。
# snap refresh chromium --unhold
Removed general refresh hold of chromium。

2.保持snap对chromium的自动更新
# snap refresh chromium --hold
General refreshes of "chromium" held indefinitely

# snap refresh --time
timer: 00:00~24:00/4
last: today at 21:26 CST
next: tomorrow at 05:11 CST
2.2.第二种disable方式
1
2
3
4
5
1.移除snap对chromium的自动更新。
# sudo snap set chromium refresh.metered=unhold

2.保持snap对chromium的自动更新
# sudo snap set chromium refresh.metered=hold
2.3.Disable snap系统更新
1
2
# sudo snap set system refresh.metered=hold
# sudo snap get system refresh.metered

LinuxBox一键运行脚本编写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/bin/sh

sudo apt update
sudo apt upgrade -y

sudo timedatectl set-timezone Asia/Shanghai
sudo cat /etc/timezone

sudo mkdir -p /root/snap/chromium/common/chromium/BrowserMetrics
sudo chmod -R 000 /root/snap/chromium/common/chromium/BrowserMetrics

sudo apt update && sudo apt upgrade -y
sudo apt install language-pack-zh-hans -y
sudo locale-gen zh_CN.UTF-8
sudo update-locale LANG=zh_CN.UTF-8

export LANG=zh_CN.UTF-8

sudo apt-get install vim -y && sudo apt-get remove nano -y
sudo apt install fonts-wqy-zenhei fonts-wqy-microhei fonts-noto-cjk -y
sudo apt install -y fontconfig
sudo apt install -y fonts-dejavu-core fonts-liberation

sudo apt autoremove -y

sudo apt install snap -y
sudo apt install snapd -y
sudo snap install chromium

sudo mkdir -p /home/ubuntu/.config/autostart
sudo touch /home/ubuntu/.config/autostart/chromium.desktop

# 写入文件内容
sudo cat <<EOF > /home/ubuntu/.config/autostart/chromium.desktop
[Desktop Entry]
Type=Application
Exec=/snap/bin/chromium --start-maximized --disable-infobars --kiosk "$1"
EOF

sudo chown -R ubuntu:ubuntu /home/ubuntu/.config/autostart/chromium.desktop

sudo mkdir -p /etc/gdm3/
sudo cp -f /etc/gdm3/custom.conf /etc/gdm3/custom.conf.backup

sudo touch /etc/gdm3/custom.conf

# 写入文件内容
sudo cat <<EOF > /etc/gdm3/custom.conf
[daemon]
AutomaticLoginEnable=True
AutomaticLogin=ubuntu
EOF

# Ubuntu自动登录和开机锁屏取消
## 禁用自动锁屏:
gsettings set org.gnome.desktop.screensaver lock-enabled false
gsettings set org.gnome.desktop.lockdown disable-lock-screen true

# 禁用屏幕休眠
gsettings set org.gnome.desktop.session idle-delay 0

红米电视投屏运维问题解决

ubuntu 外接显示器只有桌面,不进入看板问题

https://blog.csdn.net/qq_45911550/article/details/111399277

如上图,选择镜像,不过这个时候笔记本的屏幕也是在使用中,可以将笔记本设置为合上盖子仍然运行就可以了。

img

1
2
3
4
5
6
7
8
9
10
11
sudo cat /etc/systemd/logind.conf

#HandleLidSwitch=suspend 找到这句

HandleLidSwitch=ignore 改为这句

sudo systemctl restart systemd-logind
# 或者
sudo service systemd-logind restart
# 或者
sudo shutdown -r now

Ubuntu系统初始化后配置清单ToDoList

ToDoList清单

配置时区 sudo timedatectl set-timezone Asia/Shanghai && sudo cat /etc/timezone

配置时区

1
2
sudo timedatectl set-timezone Asia/Shanghai
sudo cat /etc/timezone

配置Limit

编辑/etc/security/limits.conf文件,添加或修改相应的行来增加限制。例如:

1
2
3
4
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535

确保 IP 转发已启用

确保内核启用了 IP 转发功能。可以通过以下命令启用:

1
sudo sysctl -w net.ipv4.ip_forward=1

为了使设置永久生效,可以编辑 /etc/sysctl.conf 文件,添加以下内容:

1
net.ipv4.ip_forward = 1

然后运行以下命令应用配置:

1
sudo sysctl -p

增加sudo权限

sudo vim /etc/sudoers

1
user ALL=(ALL:ALL) NOPASSWD: ALL

配置高并发服务器调小TCP协议的time_wait时间

查看网络节点的tcp连接状态,如果发现系统存在大量的TIME_WAIT状态的连接,通过调整内核参数解决:
然后执行以下命令让参数生效: sudo /sbin/sysctl -p

limits.conf 和sysctl.conf区别在于limits.conf是针对用户,而sysctl.conf是针对整个系统参数配置

linux下ulimit参数调整

sudo vim /etc/security/limits.conf

1
2
3
4
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535

临时配置

1
2
ulimit -SHn 65536
ulimit -n

limits.conf 和sysctl.conf区别在于limits.conf是针对用户,而sysctl.conf是针对整个系统参数配置

改变系统最大打开文件数,需要修改 /etc/sysctl.conf 文件

sudo vim /etc/sysctl.conf

1
fs.file-max = 1048576

设置服务最大文件句柄数:

sudo vim /etc/systemd/system.conf

1
DefaultLimitNOFILE=1048576

配置网络参数修改

sudo vim /etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service

1
2
[Service]
TimeoutStartSec=5sec

Linux 操作系统参数

系统全局允许分配的最大文件句柄数:
2 millions system-wide

1
2
3
sudo sysctl -w fs.file-max=2097152
sudo sysctl -w fs.nr_open=2097152
sudo echo 2097152 > /proc/sys/fs/nr_open

TCP 协议栈网络参数

1
2
3
sudo sysctl -w net.core.somaxconn=32768
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=16384
sudo sysctl -w net.core.netdev_max_backlog=16384

可用知名端口范围:

1
sudo sysctl -w net.ipv4.ip_local_port_range='1000 65535'

TCP Socket 读写 Buffer 设置:

1
2
3
4
5
6
7
8
9
sudo sysctl -w net.core.rmem_default=262144
sudo sysctl -w net.core.wmem_default=262144
sudo sysctl -w net.core.rmem_max=16777216
sudo sysctl -w net.core.wmem_max=16777216
sudo sysctl -w net.core.optmem_max=16777216

#sysctl -w net.ipv4.tcp_mem='16777216 16777216 16777216'
sudo sysctl -w net.ipv4.tcp_rmem='1024 4096 16777216'
sudo sysctl -w net.ipv4.tcp_wmem='1024 4096 16777216'

TCP 连接追踪设置

1
2
3
sudo sysctl -w net.nf_conntrack_max=1000000
sudo sysctl -w net.netfilter.nf_conntrack_max=1000000
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=30

Failed to allocate directory watch: Too many open files

解决办法:
vim /etc/sysctl.conf
sudo vim /etc/sysctl.conf


1
2
3
fs.file-max = 1048576
fs.inotify.max_user_instances=25120
fs.inotify.max_user_watches=262144

生效

sudo sysctl -p

Ubuntu Date-CST-UTC > CST修改时区时间的最好方法 timedatectl set-timezone Asia/Shanghai

UTC > CST

查看 /etc/timezome 的內容

1
2
sudo cat /etc/timezone

用timedatectl set-timezone Asia/Shanghai 可以快速地更新时区和时间

1
2
sudo timedatectl set-timezone Asia/Shanghai
sudo timedatectl set-timezone Asia/Shanghai

使用 timedatectl 命令顯示當前的系統時區。

1
timedatectl

輸出畫面

1
2
3
4
5
6
7
 Local time: Fri 2021-01-07 22:45:47 UTC
Universal time: Fri 2021-01-07 22:45:47 UTC
RTC time: Fri 2021-01-07 22:45:48
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
systemd-timesyncd.service active: yes
RTC in local TZ: no

250605-AngularJS-Button防止重复点击解决办法

范式

1
2
3
4
5
6
7
8
9
10
11
12
13
let isProcessing = false;


if (isProcessing) {
return false; // 防止重复点击
}
isProcessing = true;


// 模拟异步操作完成后恢复按钮状态
setTimeout(function() {
isProcessing = false;
}, 2000);

方案一

angularjs 能不能实现一个组件,放到所有的按钮上面,控制ng-click防重复提交策略

在 AngularJS 中,可以通过创建一个自定义指令来实现一个通用的防重复点击组件,这个指令可以附加到任何按钮上,以控制 ng-click
的防重复提交策略。

以下是一个完整的示例:

1. 创建防重复点击指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// 增加按钮防重复点击组件
app.directive('preventRepeatedClick', function ($parse, $timeout) {
return {
restrict: 'A',
priority: 1000, // 确保指令在ngClick之后执行
scope: {
clickDelay: '@'
},
link: function (scope, element, attrs) {
var isProcessing = false;

var delay = parseInt(attrs.clickDelay) || 2000; // 默认延迟 2000 毫秒
delay = (delay >= 2000) ? delay : 2000;

element.on('click', function (event) {
// 如果正在处理事件,直接返回,防止重复点击
if (isProcessing) {
event.preventDefault();
event.stopPropagation();
return;
}

// 禁用按钮,防止重复点击
isProcessing = true;
element.attr('disabled', 'disabled');

// 延迟后启用按钮
$timeout(function () {
isProcessing = false;
element.removeAttr('disabled');
}, delay);
});
}
};
});

2. 使用自定义指令

在 HTML 中,将 prevent-repeated-click 指令附加到按钮上,并可选地指定 click-delay 属性来设置按钮禁用的时间(以毫秒为单位)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<title>AngularJS 防重复点击指令</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"></script>
<script src="app.js"></script>
</head>
<body>
<div ng-controller="myCtrl">
<button prevent-repeated-click click-delay="2000" ng-click="buttonClick()">点击我</button>
<p>{{message}}</p>
</div>
</body>
</html>

3. 控制器逻辑

在控制器中定义按钮的点击处理函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
app.controller('myCtrl', function ($scope) {
$scope.message = '';

$scope.buttonClick = function () {
console.log('按钮被点击了');
$scope.message = '按钮被点击,正在处理...';
// 模拟处理逻辑
setTimeout(function () {
$scope.message = '处理完成';
$scope.$apply(); // 触发 AngularJS 的 digest 循环
}, 2000);
};
});

解释

  1. **自定义指令 preventRepeatedClick**:
    • **restrict: 'A'**:指定该指令为属性类型。
    • **scope**:定义指令的隔离作用域,ngClick 用于绑定按钮的点击事件,clickDelay 用于设置按钮禁用的时间。
    • link 函数:在指令的链接函数中,监听按钮的点击事件。
      • **isProcessing**:标记按钮是否正在处理事件。
      • **delay**:从 click-delay 属性获取按钮禁用的时间,如果没有指定则使用默认值 2000 毫秒。
      • 禁用按钮:在点击事件发生时,如果 isProcessingtrue,阻止事件的默认行为并返回,防止重复点击。否则,将
        isProcessing 设置为 true 并禁用按钮。
      • **触发 ng-click**:调用绑定的 ngClick 函数。
      • 延迟启用按钮:使用 $timeout 在指定的延迟时间后将 isProcessing 设置为 false 并启用按钮。
  2. 使用指令
    • 在按钮上添加 prevent-repeated-click 指令,并可选地使用 click-delay 属性来指定按钮禁用的时间。
    • 绑定 ng-click 到按钮的点击处理函数。
  3. 控制器逻辑
    • 定义按钮的点击处理函数 buttonClick,在其中执行相关的业务逻辑。

通过这种方式,你可以将 prevent-repeated-click 指令附加到任何按钮上,以实现防重复点击的功能,而无需在每个按钮的控制器中重复编写相同的逻辑。

方案二

AngularJS 的双向数据绑定来实现。以下是一个示例:

  1. HTML 部分:使用 ng-disabled 指令来绑定按钮的禁用状态。
  2. JavaScript 部分:在控制器中定义一个变量来控制按钮的禁用状态,并在事件处理函数中修改这个变量。

HTML

1
2
3
4
5
<div ng-app="myApp">
<div ng-controller="myCtrl">
<button ng-click="buttonClick($event)" ng-disabled="isDisabled">点击我</button>
</div>
</div>

JavaScript

1
2
3
4
5
6
7
8
9
10
11
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
// 初始化按钮禁用状态为 false
$scope.isDisabled = false;

$scope.buttonClick = function($event) {
console.log('按钮被点击了');
// 修改按钮的禁用状态
$scope.isDisabled = !$scope.isDisabled;
};
});

在这个示例中,我们使用了 ng-disabled 指令来绑定按钮的禁用状态到 $scope.isDisabled 变量。当点击按钮时,buttonClick
函数会被调用,它会切换 $scope.isDisabled 的值,从而改变按钮的禁用状态。

  • 初始状态下,$scope.isDisabledfalse,按钮是启用状态。
  • 当按钮被点击时,buttonClick 函数将 $scope.isDisabled 设置为 true,按钮变为禁用状态。
  • 再次点击按钮时,buttonClick 函数将 $scope.isDisabled 设置为 false,按钮恢复启用状态。