修复ubuntu22.4无法上网

如图,正常的 VMware 里 Ubuntu22.4, 在用桥接网络/NAT 时是这样的。有一个网络标志。

如果没有,则按照如下操作修复:

  1. 终端中,输入命令,如下
1
ip addr

输出如下图:

图中,ens33,没有出现 ip,则网络配置有问题

  1. 修改 01-network-manager-all.yaml 文件
    sudo gedit /etc/netplan/01-network-manager-all.yaml
    打开后,如果只有前面 4 行,则补充

    1
    2
    network:
    version: 2

Let NetworkManager manage all devices on this system

1
2
3
4
5
6
7
8
network:
version: 2
renderer: NetworkManager
ethernets:
ens33: #根据自己配置的网卡名称改,使用 ip addr 查看得到
dhcp4: true #dhcp4 开启
addresses: [] #设置本机 IP 及掩码,空
optional: true
  1. 修改 NetworkManager.conf 文件
    sudo gedit /etc/NetworkManager/NetworkManager.conf
1
maneged=false改为true
  1. 重启网络
1
2
3
4
sudo service network-manager stop
sudo rm /var/lib/NetworkManager/NetworkManager.state
sudo service network-manager start

  1. 经过上述步骤还是不能上网,则检查网卡是否开启

    没有开启,则输入如下:
1
2
3
sudo ip link set ens33 up
sudo dhclient ens33

  1. 重启电脑
    reboot

通过repo管理Android源码

以下操作,都是基于 ubuntu 22.4 系统

准备资源

  1. repo
  2. python3

安装

  1. repo
    sudo apt-get install repo

  2. python3.8.5

建立 repo 配置

常见问题

Apple ID提示“这个人不在激活状态”或者“被停用”的解决方案

不论是国内 ID 还是国外 ID,解决未激活或者停用,都有一定的失败几率。不能保证 100%成功,但是之前我教了很多人,成功率也有 80%以上。

Apple ID 出现“个人不在激活状态”或者“停用”是触发到苹果自检系统的机制。

为了避免这个情况,尽可能的保存好自己的密保和完善账户资料。比如:绑定安全邮箱、修改出生年月日、修改密保问答,让自己的账户变得安全,这样可以减少苹果自检系统的排查!(从 iCloud 登录会大大增加苹果自检系统的排查,所以不要从 iCloud 登录。)

当然完善了这些也有可能排查的到,毕竟你是在大陆使用海外 ID,这本来就不符合苹果的条款规定,对于想下载海外 APP,这一点是无法避免的。甚至就在 6 月份的时候,我 2 个用了近 4 年的海外老账号也被封了,大势已去,我也无法阻挡!

如果是大陆 Apple ID 出现这种情况,直接联系苹果客服 400-666-8800,把自己的事情如实跟客服说,客服能解决就解决,解决不了也没办法。

如果是海外 ID,目前有两种解决方法,第一种是直接电话联系美国苹果总部,电话号码是 001 800 275 2273(需要开通国际漫游、而且需要非常熟练说英语),第二种就是下面我即将要讲解的方法!

不论是国内 ID 还是国外 ID,解决未激活或者停用,都有一定的失败几率。不能保证 100%成功,但是之前我教了很多人,成功率也有 80%以上。

准备工具
1、PC 电脑一台,MAC 也行!

2、谷歌浏览器。(谷歌浏览器带有自动翻译功能,所以这里推荐谷歌,整个过程不需要翻墙)

3、出现问题的海外 Apple ID。(必须记得出生年月日和密保问答资料)

开始解决:
第一步:在谷歌浏览器中打开苹果官网:https://www.apple.com进入官网,把浏览页面滑动到最下面,找到「管理你的Apple ID」点进去。(大家可以看到右下角的国家是“美国”,只有这样进入,才能让联系美国客服,不这样进入,联系的基本是国内客服了。)

第二步:在 Apple ID 管理中心,选择“忘记了 Apple ID 或者密码”!

第三步:选择「FAQ」,这个就是中文的“常见问题”!

第四步:到了常见问题的页面,在最下面点击「请访问 Apple 支持」

第五步:到了 Apple 支持的页面后,继续滑动到最下面,然后点击“得到支持”!(有可能我和你的页面显示的不一样,你可能是英文,所以你可以参考我图片点击也一样的效果)

第六步:进入了“得到支持”的页面后,点击「禁用的 Apple ID」。

第七步:选择“主题未列出”!然后再框框中填写你出现的问题。框框之中必须得使用英文填写,美国客服看不懂!(不会英语的就用“在线汉译英”)

然后再框框中填写你出现的问题。框框之中必须得使用英文填写,美国客服看不懂!(不会英语的就用“在线汉译英”)

第八步:点击聊天室!(有时候可能没有聊天室的时候,那么就是美国苹果客服下班了!美国客服在线时间是:9:00-21:00,以美国加利福利亚现在的时间为准!然后等待时间一般显示 5 分钟的基本是美国客服,如果提示的是 2 分钟,那么就是中国客服,如果是中国客服,你再把之前的操作重新再操作一次)

第九步:把自己出现“个人不在激活状态”通过汉译英后表述给美国苹果客服看!他们问你什么,你就如实回答即可!他们会一步一步的帮你解决!

我并不懂英语!但是他们每问我一个问题。我会立刻使用汉译英来进行翻译,并做出相应的回答!然后客服帮我解封了,之后挂断客服了后,我立刻登录了 ID 到苹果管理中心,发现能正常的登录了,不再提示“未激活”,但是在手机上面登录上后,发现无法下载 APP。提示“在 App Store 与 iTunes Store 里禁用”。之后我又再次以上面的方式联系上了美国客服,他们又帮我解决了这个问题!

感觉整个过程有点复杂,其实自己操作一遍之后,就发现非常的简单了!如果觉得没必要去解除,也可以选择重新再买一个海外 Apple ID。

ParcelFileDescriptor使用说明

文件描述符,是一种程序读写已打开文件、socket 的对象。

FileDescriptor 对象,它代表了原始的 Linux 文件描述符
ParcelFileDescriptor 对象,是原始文件描述符的一个复制,对象跟 fd 不同,但都是操作同一个底层文件流以及文件位置指针

简单的 ParcelFileDescriptor 使用——pipe

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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
public class DemoParcefliledescriptor extends AppCompatActivity {

private static final String TAG = "DemoPFD";

private static final String[] PERMISSIONS = {
Manifest.permission.WRITE_EXTERNAL_STORAGE,
};
private static final int PERMISSIONS_CODE = 3006;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_demo_null);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(PERMISSIONS, PERMISSIONS_CODE);
}

FileOutputStream outputStream = new FileOutputStream(getStreamFd());
try {
outputStream.write(99);
outputStream.write(98);
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}


private FileDescriptor getStreamFd() {
ParcelFileDescriptor[] pipes = null;

try {
pipes = ParcelFileDescriptor.createPipe();
new TransferThread(new ParcelFileDescriptor.AutoCloseInputStream(pipes[0])).start();
} catch (IOException e) {
e.printStackTrace();
}

return pipes[1].getFileDescriptor();
}

static class TransferThread extends Thread {
InputStream in;
FileOutputStream out;

TransferThread(InputStream in, FileOutputStream out) {
this.in = in;
this.out = out;
}

TransferThread(InputStream in) {
this.in = in;

File outFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/zlq_pdf");
Log.i(TAG, "File: " + outFile.getAbsolutePath());

try {
out = new FileOutputStream(outFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}

@Override
public void run() {
byte[] buf = new byte[1024*2];

int len;
try {
while((len=in.read(buf)) > 0) {
out.write(buf, 0, len);
Log.i(TAG, "out:" + len);

}

in.close();
out.flush();
out.getFD().sync();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

openssl设置加密套件

一个加密套件指明了 SSL 握手阶段和通信阶段所应该采用的各种算法。这些算法包括:认证算法、密钥交换算法、对称算法和摘要算法等。
在握手初始化的时候,双方都会导入各自所认可的多种加密套件。在握手阶段,由服务端选择其中的一种加密套件。
OpenSSL 的 ciphers 命令可以列出所有的加密套件。openssl 的加密套件在 s3_lib.c 的
ssl3_ciphers 数组中定义。比如有:

1
2
3
4
5
6
7
8
9
10
11
12
13
/_ Cipher 05 _/
{
1,
SSL3_TXT_RSA_RC4_128_SHA,
SSL3_CK_RSA_RC4_128_SHA,
SSL_kRSA|SSL_aRSA|SSL_RC4 |SSL_SHA1|SSL_SSLV3,
SSL_NOT_EXP|SSL_MEDIUM,
0,
128,
128,
SSL_ALL_CIPHERS,
SSL_ALL_STRENGTHS,
}

其中 1 表示是合法的加密套件;
SSL3_TXT_RSA_RC4_128_SHA 为加密套件的名字,
SSL3_CK_RSA_RC4_128_SHA 为 加密套件 ID ,
SSL_kRSA|SSL_aRSA|SSL_RC4 |SSL_SHA1|SSL_SSLV3 表明了各种算法,
其中密钥交换采用 RSA 算法(SSL_kRSA),认证采用 RSA 算法(SSL_aRSA),对称加密算法采用 RC4 算法(SSL_RC4),摘要采用 SHA1,采用 SSL 协议第三版本,
SSL_NOT_EXP|SSL_MEDIUM 表明算法的强度。

在客户端和服务器端建立安全连接之前,双方都必须指定适合自己的加密套件。加密套件的选择可以通过组合的字符串来控制。
字符串的形式举例:ALL:!ADH:RC4+RSA:+SSLv2:@STRENGTH。
Openssl 定义了 4 中选择符号:“+”,“-”,“!”,“@”。其中,“+”表示取交集;“-”表示临时删除一个算法;“!”表示永久删除一个算法;“@“表示了排序方法。
多个描述之间可以用“:”、“,”、“ ”、“;”来分开。选择加密套件的时候按照从左到的
顺序构成双向链表,存放与内存中。

ALL:!ADH:RC4+RSA:+SSLv2:@STRENGTH 表示的意义是:首先选择所有的加密套件
(不包含 eNULL,即空对称加密算法),然后在得到的双向链表之中去掉身份验证采用 DH
的加密套件;加入包含 RC4 算法并将包含 RSA 的加密套件放在双向链表的尾部;再将支持
SSLV2 的加密套件放在尾部;最后得到的结果按照安全强度进行排序。
SSL 建立链接之前,客户端和服务器端用 openssl 函数来设置自己支持的加密套件。主要
的函数有:

int SSL_set_cipher_list(SSL *s,const char *str);
int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str);

比如只设置一种加密套件:
int ret=SSL_set_cipher_list(ssl,”RC4-MD5”);
如果服务端只设置了一种加密套件,那么客户端要么接受要么返回错误。加密套件的选
择是由服务端做出的。

vm-display-setting

  1. 启动 vm,然后点击菜单“虚拟机”-》“设置”-》“显示”
  2. 如下图设置