Compare commits
1996 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
914da2b86f | ||
|
|
582db9d542 | ||
|
|
9a1fd1aa4f | ||
|
|
58ddac63d2 | ||
|
|
a8eff641b2 | ||
|
|
d723c10a3b | ||
|
|
bf5abdb520 | ||
|
|
0f44de7dc3 | ||
|
|
4f1a4dc6a5 | ||
|
|
8c108065eb | ||
|
|
5fdcc748e1 | ||
|
|
bf03156dd9 | ||
|
|
964c2ed2b5 | ||
|
|
e942c80afb | ||
|
|
d7dcb5feab | ||
|
|
39d41486d6 | ||
|
|
b85526ce54 | ||
|
|
2a0c081380 | ||
|
|
1db4236f23 | ||
|
|
6749595afe | ||
|
|
e65c43a292 | ||
|
|
00b13bf918 | ||
|
|
f7f3bc8bee | ||
|
|
51c603a3a6 | ||
|
|
5fb026b8d5 | ||
|
|
f7530b16b8 | ||
|
|
db47209362 | ||
|
|
f375cbd871 | ||
|
|
0474c8fb03 | ||
|
|
c00d23846a | ||
|
|
a3d5ea8fb8 | ||
|
|
7525a6ed6a | ||
|
|
dd93416cf7 | ||
|
|
73d429d064 | ||
|
|
4bf3764b5d | ||
|
|
236687ae53 | ||
|
|
0d708f64b9 | ||
|
|
222c9de19f | ||
|
|
72fc34cd40 | ||
|
|
3f7244f23f | ||
|
|
dc24868800 | ||
|
|
1f557888f5 | ||
|
|
16db977fd8 | ||
|
|
a19d4d6686 | ||
|
|
633076ddd4 | ||
|
|
5581248a1e | ||
|
|
a4393b8f90 | ||
|
|
406d8469d8 | ||
|
|
0cf4711515 | ||
|
|
a2ba50c4ff | ||
|
|
c97cc15c0e | ||
|
|
750f1a1884 | ||
|
|
2cf83b41cc | ||
|
|
1f16b5236b | ||
|
|
dd4b5349cb | ||
|
|
46b4e21e8c | ||
|
|
3899e4e12e | ||
|
|
f016281e30 | ||
|
|
1d755c705b | ||
|
|
a0d79dd26d | ||
|
|
e6734af64e | ||
|
|
0d8e3dc24f | ||
|
|
0e44aa1ada | ||
|
|
9f40a0b490 | ||
|
|
23430bee97 | ||
|
|
04691a3b6c | ||
|
|
db0f65eedd | ||
|
|
2118b6dd7d | ||
|
|
71d7398ae7 | ||
|
|
2e16a2be56 | ||
|
|
ed24f432c3 | ||
|
|
669e8d5f8e | ||
|
|
016f4abb32 | ||
|
|
b1a946ec20 | ||
|
|
2576b46f34 | ||
|
|
a42df9a27b | ||
|
|
48102e9c53 | ||
|
|
5770aeee26 | ||
|
|
cb102a5a61 | ||
|
|
28f01784c1 | ||
|
|
29eefbcc25 | ||
|
|
8679e55f6a | ||
|
|
846db4e689 | ||
|
|
68afb89b99 | ||
|
|
804f035a87 | ||
|
|
267342e7e6 | ||
|
|
9e3633f1e4 | ||
|
|
06b3894249 | ||
|
|
d39129887b | ||
|
|
e5379bb073 | ||
|
|
c8dded1108 | ||
|
|
44e6b7dbb0 | ||
|
|
80857c22c9 | ||
|
|
6548f9f0ed | ||
|
|
58fd8780e5 | ||
|
|
0cccbc438b | ||
|
|
558e7cb5ac | ||
|
|
286181ca04 | ||
|
|
ce0fc14a8a | ||
|
|
ebfbc8ce61 | ||
|
|
fdb038c7c9 | ||
|
|
467e6dfd16 | ||
|
|
8c40c28fe0 | ||
|
|
9e25049fe8 | ||
|
|
e170153090 | ||
|
|
99e8753629 | ||
|
|
d5b0829065 | ||
|
|
2c8a60e0ea | ||
|
|
352de75fdd | ||
|
|
f7b35defc9 | ||
|
|
e471c01269 | ||
|
|
5dfaa10709 | ||
|
|
7506f94a53 | ||
|
|
a2d08fa40d | ||
|
|
159c883bf3 | ||
|
|
396d7680d3 | ||
|
|
7e93a5d3cf | ||
|
|
955c55b6cc | ||
|
|
b2b30b0cf5 | ||
|
|
6352b3a594 | ||
|
|
5be684d2e5 | ||
|
|
8dda17d546 | ||
|
|
0f5aaac1f5 | ||
|
|
35fa75f9c9 | ||
|
|
19d43b3f62 | ||
|
|
2b4a72897e | ||
|
|
cdc31b7fc7 | ||
|
|
f4ef1455c4 | ||
|
|
fe94512dd1 | ||
|
|
ae25542ce9 | ||
|
|
6c030a5230 | ||
|
|
a145d6ebcc | ||
|
|
14676e9618 | ||
|
|
72e8476ded | ||
|
|
5888b051d9 | ||
|
|
215cf73072 | ||
|
|
7f7d4a77b6 | ||
|
|
7e3a0c4ded | ||
|
|
89150317e1 | ||
|
|
f47faa548b | ||
|
|
36ed8f3f73 | ||
|
|
ca1ca21cf8 | ||
|
|
c7df539b31 | ||
|
|
e873188775 | ||
|
|
6953efc2d8 | ||
|
|
3e78aacc7e | ||
|
|
20b4ce3213 | ||
|
|
4b581c385c | ||
|
|
bdf6f5c3b9 | ||
|
|
6d0953dca4 | ||
|
|
fc0fc5ea10 | ||
|
|
f7f2d84e1f | ||
|
|
57acadd52a | ||
|
|
26cebd2aeb | ||
|
|
9a652e789d | ||
|
|
f6509e3fd6 | ||
|
|
445fe6e714 | ||
|
|
dc8a70bb26 | ||
|
|
adf9b82d6b | ||
|
|
be212b5186 | ||
|
|
59ba461d83 | ||
|
|
004c2e069c | ||
|
|
c168b7e979 | ||
|
|
79411430a5 | ||
|
|
853d655a92 | ||
|
|
2d5fa9ebbf | ||
|
|
b2deab08ab | ||
|
|
8452a17d79 | ||
|
|
19851c8a47 | ||
|
|
6b8ec6ae16 | ||
|
|
d648e67eaf | ||
|
|
ebb14af488 | ||
|
|
80afa98d66 | ||
|
|
2797a28c0d | ||
|
|
03c8d94024 | ||
|
|
c061eddf2a | ||
|
|
2e146190e1 | ||
|
|
fc110c4988 | ||
|
|
6003003228 | ||
|
|
70e5bee519 | ||
|
|
4062d1920c | ||
|
|
50b81c2356 | ||
|
|
00fe3a76c8 | ||
|
|
d11a3b9683 | ||
|
|
7934fa24a2 | ||
|
|
f0d9dee6ce | ||
|
|
3a82bddcd3 | ||
|
|
ebe044aee8 | ||
|
|
674305ce29 | ||
|
|
b9a5c6ff31 | ||
|
|
bcb0a7822a | ||
|
|
93aac0bc99 | ||
|
|
7fe58afa9c | ||
|
|
9d0f8d9886 | ||
|
|
aa7d0471db | ||
|
|
6cd9227e8d | ||
|
|
213ef58959 | ||
|
|
2fa1124752 | ||
|
|
d00a0d6c75 | ||
|
|
2e225eb84f | ||
|
|
3c57ee89c4 | ||
|
|
b6f870ac5f | ||
|
|
570ce7d28d | ||
|
|
3958090e0f | ||
|
|
99ed1b729e | ||
|
|
d16db77b52 | ||
|
|
56c176add4 | ||
|
|
42a856c24a | ||
|
|
b662090d64 | ||
|
|
29e50a5f91 | ||
|
|
7885e07eed | ||
|
|
65fd682f2a | ||
|
|
cdecbb0857 | ||
|
|
68ee781f26 | ||
|
|
0f307e7ca2 | ||
|
|
7ac49287df | ||
|
|
83faf6025b | ||
|
|
4faf5e6d3e | ||
|
|
d300596ac1 | ||
|
|
a30dc5988e | ||
|
|
e43a0da9a6 | ||
|
|
83b74c0930 | ||
|
|
0d2a39267f | ||
|
|
f87f380bb0 | ||
|
|
ab28acd709 | ||
|
|
04b53f8e1e | ||
|
|
eb0e5c2de3 | ||
|
|
8cb9b910a6 | ||
|
|
bdac79c91b | ||
|
|
88081fc3c4 | ||
|
|
6be451e9f3 | ||
|
|
64ed25879c | ||
|
|
d66e087d94 | ||
|
|
b7b0a44c52 | ||
|
|
44cba7adf7 | ||
|
|
5a8a64d284 | ||
|
|
eac6835982 | ||
|
|
7992ca4c85 | ||
|
|
ead200ea5d | ||
|
|
e146c2606f | ||
|
|
db158e1ffe | ||
|
|
72ef3c3394 | ||
|
|
e17378c6b3 | ||
|
|
0e05f5305c | ||
|
|
58f43da23e | ||
|
|
4a9e7f29da | ||
|
|
1589209567 | ||
|
|
5c6017b0a9 | ||
|
|
4246fe5b92 | ||
|
|
c441d2f03f | ||
|
|
6c21529594 | ||
|
|
6fc4253d46 | ||
|
|
7a2590d1f9 | ||
|
|
4cbbb5b64f | ||
|
|
f11104fcb5 | ||
|
|
19e8ca6c06 | ||
|
|
13005e8242 | ||
|
|
d0dde6e572 | ||
|
|
5e103a5ccb | ||
|
|
0c4e6f0a8c | ||
|
|
03a89a5cdd | ||
|
|
e22d13be1f | ||
|
|
ef9c4d96b7 | ||
|
|
bb7300a055 | ||
|
|
2d456fd1fc | ||
|
|
97108e788f | ||
|
|
b8f7259fbd | ||
|
|
2de1c62daf | ||
|
|
f5d2eff8d3 | ||
|
|
dbcf1fdb6f | ||
|
|
bd81e4d0fb | ||
|
|
80786f692c | ||
|
|
177edfea3e | ||
|
|
b4b08db778 | ||
|
|
8abf2f768c | ||
|
|
8b14cd5aea | ||
|
|
84a21d72b9 | ||
|
|
fa8e0ed27b | ||
|
|
b6e403a3fb | ||
|
|
3d368f9aca | ||
|
|
414ac950e0 | ||
|
|
34fa82f72c | ||
|
|
4d5fdc4725 | ||
|
|
1c4f28e708 | ||
|
|
7bf555ce4c | ||
|
|
bb388628a7 | ||
|
|
a2920578a1 | ||
|
|
b41a73f08d | ||
|
|
c6ace470e3 | ||
|
|
cdbe79d3c1 | ||
|
|
493ec07ff2 | ||
|
|
ec15412755 | ||
|
|
191b6d5b4e | ||
|
|
8718152dba | ||
|
|
c585db7516 | ||
|
|
515c91a407 | ||
|
|
b615029304 | ||
|
|
3b0f4b1f82 | ||
|
|
4a2bf7a0c3 | ||
|
|
79212f8ef7 | ||
|
|
c57a596156 | ||
|
|
948db1451f | ||
|
|
06aa18bfab | ||
|
|
f076afb6e1 | ||
|
|
582402f4d9 | ||
|
|
0e04ff506b | ||
|
|
e9f757dccb | ||
|
|
f02d858646 | ||
|
|
3727cd401c | ||
|
|
f0c9deca4b | ||
|
|
f41a8bc355 | ||
|
|
3100930136 | ||
|
|
9abafafcdd | ||
|
|
0d127dff3b | ||
|
|
83dbf88ffb | ||
|
|
3a6f56ebbc | ||
|
|
3e8c5d3b79 | ||
|
|
2aaca0c54a | ||
|
|
c6d587f0c7 | ||
|
|
c85682de8d | ||
|
|
9c12c3ee4e | ||
|
|
2c432dbf4d | ||
|
|
0c8643837f | ||
|
|
3fd97f7e60 | ||
|
|
5064696480 | ||
|
|
6f0fbd1088 | ||
|
|
b535722421 | ||
|
|
60e96b637d | ||
|
|
7f29c7a601 | ||
|
|
060dfedb74 | ||
|
|
2907ed6029 | ||
|
|
5649fcc9ca | ||
|
|
85ddfc0739 | ||
|
|
7c98bfd363 | ||
|
|
c23f377039 | ||
|
|
af89fb52f1 | ||
|
|
98f56fd506 | ||
|
|
88ea1ea85b | ||
|
|
2a1e33f95c | ||
|
|
2fe55e2b55 | ||
|
|
d6f5887b1d | ||
|
|
dce045461a | ||
|
|
4ab0324bc9 | ||
|
|
b2bb69fe42 | ||
|
|
ad96f9aacd | ||
|
|
9847fc5c77 | ||
|
|
3f3bca753c | ||
|
|
c223d6a87d | ||
|
|
14a428467c | ||
|
|
efc84e53ec | ||
|
|
f9ee0189f0 | ||
|
|
d90580943f | ||
|
|
f6484b4e2b | ||
|
|
0b5f48b926 | ||
|
|
f2f649319d | ||
|
|
35eaa94228 | ||
|
|
e09a050d41 | ||
|
|
38182ba020 | ||
|
|
7960b2ca10 | ||
|
|
722c789448 | ||
|
|
faa4c36956 | ||
|
|
d3a33d786d | ||
|
|
1a2d60dbfc | ||
|
|
2aa5e685b8 | ||
|
|
512c7df37d | ||
|
|
57fddf1c85 | ||
|
|
afe4206782 | ||
|
|
02bc5e3111 | ||
|
|
5a51284550 | ||
|
|
2d995826ad | ||
|
|
92f3bf2999 | ||
|
|
bfe282c2db | ||
|
|
2d0b013af3 | ||
|
|
3df938ed61 | ||
|
|
d4b6cab742 | ||
|
|
8d327af0ac | ||
|
|
f135fbee26 | ||
|
|
d65977bd59 | ||
|
|
1e0242ede9 | ||
|
|
839d3365f8 | ||
|
|
182ee8f233 | ||
|
|
24eb6f8c38 | ||
|
|
13bade262f | ||
|
|
d2ff675fbc | ||
|
|
1905a81f9a | ||
|
|
e2382a1465 | ||
|
|
ec00cd2ae0 | ||
|
|
e0fad4eaa5 | ||
|
|
882b39b067 | ||
|
|
d15a641d88 | ||
|
|
90ac8b7b0b | ||
|
|
d64afdcff1 | ||
|
|
eb58a39f57 | ||
|
|
d12352d568 | ||
|
|
217a9808b2 | ||
|
|
1b08adb178 | ||
|
|
f113fda6d4 | ||
|
|
5a6a773583 | ||
|
|
627d21a00a | ||
|
|
44e13c84bc | ||
|
|
b96067cf2e | ||
|
|
b2fe5cce5e | ||
|
|
55775adba6 | ||
|
|
0500f56163 | ||
|
|
52e5d519ab | ||
|
|
bdfbb97bf8 | ||
|
|
cff117cb40 | ||
|
|
cf71adc7e1 | ||
|
|
0582f2a168 | ||
|
|
2721af3052 | ||
|
|
f9950639e8 | ||
|
|
8f8c9ddc25 | ||
|
|
58596ad1ab | ||
|
|
b17ea991a3 | ||
|
|
45d70f73bd | ||
|
|
7a6e483171 | ||
|
|
1792dd8d2c | ||
|
|
a4ea4b138f | ||
|
|
e2c6aedddd | ||
|
|
b91a03b602 | ||
|
|
27716f077e | ||
|
|
eaa054e599 | ||
|
|
e57d07f7d6 | ||
|
|
895831f46f | ||
|
|
6b16d7ee8a | ||
|
|
45dbea57f1 | ||
|
|
6ea0dbc70f | ||
|
|
30a5041799 | ||
|
|
35083724f6 | ||
|
|
959d5dd9c2 | ||
|
|
a24a261c36 | ||
|
|
75feb90b19 | ||
|
|
fd3cb1b0eb | ||
|
|
1902134f03 | ||
|
|
cce48c5030 | ||
|
|
0654b8e427 | ||
|
|
7df10b20a4 | ||
|
|
dbde5af545 | ||
|
|
85b4f0638f | ||
|
|
94f2751902 | ||
|
|
ffdfef0adc | ||
|
|
de7652836b | ||
|
|
59913bc6f3 | ||
|
|
d77a684b64 | ||
|
|
529c075fe1 | ||
|
|
5190589653 | ||
|
|
cb9a1b4bef | ||
|
|
a0beba4e20 | ||
|
|
d794425f2c | ||
|
|
1ba11fc3ef | ||
|
|
0dfb1ae776 | ||
|
|
c8a054f997 | ||
|
|
30c4e9cf00 | ||
|
|
c9fd2fc1c2 | ||
|
|
e9e3a436eb | ||
|
|
b9bd79895f | ||
|
|
36b574a5f8 | ||
|
|
fe90372b2f | ||
|
|
d47ddac94c | ||
|
|
854c374e2f | ||
|
|
7bafe142ca | ||
|
|
14ec8c4bea | ||
|
|
e9f2a77bf6 | ||
|
|
dcb4ce8d9a | ||
|
|
2702466cdf | ||
|
|
2016000d37 | ||
|
|
be0516c06c | ||
|
|
332a3635de | ||
|
|
9df4fa6a0e | ||
|
|
ddcb9ff819 | ||
|
|
7e9f5509ca | ||
|
|
c596d75e8c | ||
|
|
a0337d399c | ||
|
|
f0f52d7244 | ||
|
|
d55d796c00 | ||
|
|
6da36b27aa | ||
|
|
b4d3fc393e | ||
|
|
c4b68280fd | ||
|
|
97aeee7172 | ||
|
|
8bf57f1293 | ||
|
|
4584cebad5 | ||
|
|
557773144b | ||
|
|
32a29a5556 | ||
|
|
9f4a844c9b | ||
|
|
82b7650458 | ||
|
|
b7121c4447 | ||
|
|
b522de3b56 | ||
|
|
eb94caf4b6 | ||
|
|
0f59e0c950 | ||
|
|
05a254c682 | ||
|
|
576ba2c745 | ||
|
|
3dafda6ace | ||
|
|
2d048a3295 | ||
|
|
f2d345e7b1 | ||
|
|
6a0db02230 | ||
|
|
93f271912e | ||
|
|
55b78727ab | ||
|
|
69b555c059 | ||
|
|
07f327d641 | ||
|
|
c69f4ba4a2 | ||
|
|
d7e8d4d5c3 | ||
|
|
679a026e72 | ||
|
|
0db180a54f | ||
|
|
6c2de53e07 | ||
|
|
af132aa62e | ||
|
|
d528fd3762 | ||
|
|
663d355a48 | ||
|
|
27112e3480 | ||
|
|
482d3ff352 | ||
|
|
a444d4af94 | ||
|
|
6f77fda6fa | ||
|
|
8f7d653e80 | ||
|
|
e474b595ad | ||
|
|
b4c6292397 | ||
|
|
4aa994827c | ||
|
|
a521ccde47 | ||
|
|
03d280054b | ||
|
|
c0a3279856 | ||
|
|
e8643632bf | ||
|
|
6d8272472a | ||
|
|
409d5b124a | ||
|
|
0c1f3d056a | ||
|
|
0e702d8693 | ||
|
|
b155cd9a5a | ||
|
|
6a281fb7ba | ||
|
|
203891c957 | ||
|
|
1365df898f | ||
|
|
a2bc02b4c5 | ||
|
|
0d01aa4eea | ||
|
|
017c73132c | ||
|
|
534bfad50f | ||
|
|
429f44eb6a | ||
|
|
346c88b661 | ||
|
|
c49853e7b4 | ||
|
|
11232c6f23 | ||
|
|
9aa788f086 | ||
|
|
c35268c493 | ||
|
|
df0ad4486e | ||
|
|
d369385657 | ||
|
|
059e067bdc | ||
|
|
050759c1c2 | ||
|
|
6d264b4394 | ||
|
|
284330ed5f | ||
|
|
49205b604c | ||
|
|
c14c27970f | ||
|
|
b1682d5794 | ||
|
|
d0b9dd9ae7 | ||
|
|
0a94b7473d | ||
|
|
587a928b84 | ||
|
|
48dbc06b29 | ||
|
|
967515a34f | ||
|
|
8e0bce4da4 | ||
|
|
01078bd7b2 | ||
|
|
a97fbb2d48 | ||
|
|
6782f92703 | ||
|
|
9096c29fef | ||
|
|
100967c57b | ||
|
|
c871af2711 | ||
|
|
faf99ffe14 | ||
|
|
58d073b516 | ||
|
|
52a4d41c6f | ||
|
|
0805b00c50 | ||
|
|
c8f8bfd6f0 | ||
|
|
1f51d37ae6 | ||
|
|
f8a4b8de51 | ||
|
|
eaa64d7b70 | ||
|
|
4480fbf787 | ||
|
|
c2287033e3 | ||
|
|
0a0fb5287a | ||
|
|
52acbd7d2c | ||
|
|
af4f84a84b | ||
|
|
633241fcee | ||
|
|
f1f3d288cd | ||
|
|
7c98da85a0 | ||
|
|
36f7d64352 | ||
|
|
a4bbcbe5ff | ||
|
|
cbb4ec5aa1 | ||
|
|
84fc5f7d67 | ||
|
|
a4d84cdc21 | ||
|
|
1a422f318c | ||
|
|
8f202fd70d | ||
|
|
dfe96eb30c | ||
|
|
3d7c6c14b3 | ||
|
|
85a4e361d2 | ||
|
|
05b2fa97d3 | ||
|
|
47d57ddf70 | ||
|
|
9521ac6adb | ||
|
|
c2703d215b | ||
|
|
f5c1133fc5 | ||
|
|
f63d81826a | ||
|
|
fa39982a8f | ||
|
|
4b52414e03 | ||
|
|
29b0a7659f | ||
|
|
e69183ce12 | ||
|
|
009c088a64 | ||
|
|
2c1f948832 | ||
|
|
b83e007405 | ||
|
|
1d3ce2c029 | ||
|
|
5ad0730a26 | ||
|
|
52f1383903 | ||
|
|
12b8cbf3e0 | ||
|
|
de44f8565d | ||
|
|
7480ead76a | ||
|
|
e96ae7a650 | ||
|
|
ae524c4d0e | ||
|
|
5adce88c37 | ||
|
|
06dda24431 | ||
|
|
fa046df923 | ||
|
|
2432eb39b1 | ||
|
|
c211a2517f | ||
|
|
73ea0a57a0 | ||
|
|
f05f86dc80 | ||
|
|
e44b25c80f | ||
|
|
bc3acc2826 | ||
|
|
007fb34ca5 | ||
|
|
46a363cce4 | ||
|
|
3047ce57a3 | ||
|
|
7b9ce072d9 | ||
|
|
4d3e3f3aed | ||
|
|
62563ad8a1 | ||
|
|
6fdce63359 | ||
|
|
fdc4d6dda9 | ||
|
|
a3b06ee83f | ||
|
|
43aa62e212 | ||
|
|
70dd3f323e | ||
|
|
803509d952 | ||
|
|
30e85c8654 | ||
|
|
7b24835c9e | ||
|
|
7aee76f5de | ||
|
|
80200a9983 | ||
|
|
79f6b5c181 | ||
|
|
dc02ce3f97 | ||
|
|
845d5a548f | ||
|
|
14a8cf69ef | ||
|
|
c8a6e8005e | ||
|
|
e6bb2bfaae | ||
|
|
8ba2d1cf72 | ||
|
|
a168fc3719 | ||
|
|
fd1dc15576 | ||
|
|
0b82874a52 | ||
|
|
434242858f | ||
|
|
3dfa0525bd | ||
|
|
36d4baaa8e | ||
|
|
7880cba0f9 | ||
|
|
f8d64528b5 | ||
|
|
f6ee61f29e | ||
|
|
2bb1310094 | ||
|
|
f6a137cd43 | ||
|
|
a575fe4934 | ||
|
|
4cd8d8a4a5 | ||
|
|
7a802726fb | ||
|
|
251245d315 | ||
|
|
fbf5a84c4a | ||
|
|
55412b94d2 | ||
|
|
f61fd02ac7 | ||
|
|
dc96b473cd | ||
|
|
abe40c84b0 | ||
|
|
9976fc9723 | ||
|
|
f8092f924a | ||
|
|
075a877284 | ||
|
|
f748395bda | ||
|
|
12018360fd | ||
|
|
821b2fda85 | ||
|
|
4cb2b29187 | ||
|
|
bb59778313 | ||
|
|
ed0ded33b7 | ||
|
|
db19528c24 | ||
|
|
7d1fb0a238 | ||
|
|
11956d9e16 | ||
|
|
cef782c388 | ||
|
|
e87e371c14 | ||
|
|
877a455ae0 | ||
|
|
a47618e986 | ||
|
|
2bbd759c25 | ||
|
|
4dd19884e0 | ||
|
|
5ab0f499ce | ||
|
|
053723647b | ||
|
|
725a44abd8 | ||
|
|
625f2d2410 | ||
|
|
e32748daf2 | ||
|
|
8a2bd1cac3 | ||
|
|
9076f213e6 | ||
|
|
e77edc56fd | ||
|
|
de356304c7 | ||
|
|
8cc9e30f86 | ||
|
|
384323031b | ||
|
|
b40a7b24d4 | ||
|
|
67b2a433a8 | ||
|
|
07bdf02af4 | ||
|
|
35b470dbac | ||
|
|
42eb49b84c | ||
|
|
9d3d11755f | ||
|
|
0fbc546696 | ||
|
|
220422ba0d | ||
|
|
2c9bae8111 | ||
|
|
320f6ddc6e | ||
|
|
0da6d51150 | ||
|
|
65e3170cd9 | ||
|
|
ee3750121c | ||
|
|
9736a4ddd0 | ||
|
|
53e310ff77 | ||
|
|
17285720f1 | ||
|
|
aa690cb9ab | ||
|
|
6d3596087a | ||
|
|
0fe80e8e1f | ||
|
|
f853f20b0c | ||
|
|
39e6fa35e1 | ||
|
|
23b911297e | ||
|
|
6113d1e3eb | ||
|
|
55f3b93958 | ||
|
|
c522987b6f | ||
|
|
8fe64755ec | ||
|
|
cc35328f28 | ||
|
|
a824a7fb73 | ||
|
|
075d7e52df | ||
|
|
cadbae31e4 | ||
|
|
39b5a67040 | ||
|
|
30580b2c57 | ||
|
|
00ab830ad1 | ||
|
|
fcf3577f67 | ||
|
|
2cdfeb8dd0 | ||
|
|
ce300aa75f | ||
|
|
a52caaec75 | ||
|
|
3f3489b292 | ||
|
|
1e059c5649 | ||
|
|
d9e1b2df7f | ||
|
|
94e51a8041 | ||
|
|
81fe90f605 | ||
|
|
69f643447d | ||
|
|
d8355371e3 | ||
|
|
cbe9b9c455 | ||
|
|
dd33c0e582 | ||
|
|
009b0aa361 | ||
|
|
f438176544 | ||
|
|
be8e8a0521 | ||
|
|
1a8b31bdb4 | ||
|
|
8a47055273 | ||
|
|
feb6f7930e | ||
|
|
0271ea7dad | ||
|
|
505b73d20e | ||
|
|
dcad8a9f79 | ||
|
|
9ce58115ab | ||
|
|
1c9d139ff5 | ||
|
|
70794c8eb5 | ||
|
|
c90c4a2e78 | ||
|
|
6797e8af52 | ||
|
|
5109802dfb | ||
|
|
935297b9e8 | ||
|
|
dad209d1cd | ||
|
|
e1072cc8ca | ||
|
|
1a1ba80188 | ||
|
|
c878c91e11 | ||
|
|
c518521d74 | ||
|
|
ce9c9078e5 | ||
|
|
9fe525bca1 | ||
|
|
352865ddaa | ||
|
|
bc950ee40a | ||
|
|
5c23dfd633 | ||
|
|
4633a0450c | ||
|
|
842255766f | ||
|
|
827c32fafd | ||
|
|
f531cd23ee | ||
|
|
2408758360 | ||
|
|
4c792f6f17 | ||
|
|
802ab90d87 | ||
|
|
c268a0ab14 | ||
|
|
b12c7f21b3 | ||
|
|
b3948910ff | ||
|
|
9ee1261204 | ||
|
|
8e3aa0e9ce | ||
|
|
db62a01224 | ||
|
|
d900f2c47c | ||
|
|
82e1fe3f8b | ||
|
|
85eb82e69d | ||
|
|
c529f8099d | ||
|
|
aa3c58917b | ||
|
|
bc591a2399 | ||
|
|
11d996bb56 | ||
|
|
088a78455c | ||
|
|
869d9d487b | ||
|
|
db3978fd4e | ||
|
|
ae7e46fe5e | ||
|
|
4bd85e1804 | ||
|
|
01f4434f6b | ||
|
|
d8f808bf38 | ||
|
|
807dc7d220 | ||
|
|
b14d0c9f60 | ||
|
|
738a1a330c | ||
|
|
676b02c8de | ||
|
|
7136400a33 | ||
|
|
4651d9df68 | ||
|
|
00555a8e9e | ||
|
|
e8c4615ff6 | ||
|
|
763467058b | ||
|
|
c055ba2985 | ||
|
|
7666541905 | ||
|
|
f4b0b39beb | ||
|
|
cfc0925e75 | ||
|
|
4dcc368378 | ||
|
|
8207908d9e | ||
|
|
e08da096dd | ||
|
|
9a903a1ca3 | ||
|
|
1b22bf0e08 | ||
|
|
fc3187a781 | ||
|
|
7fbb4045e2 | ||
|
|
d0dc22794e | ||
|
|
0f235a80e0 | ||
|
|
2a28046382 | ||
|
|
169bbfd2db | ||
|
|
1f52bb35ba | ||
|
|
4a03b3d7d9 | ||
|
|
2544a7e4ea | ||
|
|
26e77ba2c3 | ||
|
|
28c11801f3 | ||
|
|
b3e2ab0f3b | ||
|
|
fb12ba8a2b | ||
|
|
7a5bc864fa | ||
|
|
2e85d4b55a | ||
|
|
80951a8e6e | ||
|
|
9acddede65 | ||
|
|
22165ec1a5 | ||
|
|
d7036aae48 | ||
|
|
fe3924b432 | ||
|
|
510cffb305 | ||
|
|
05c789ae50 | ||
|
|
5d95d61aef | ||
|
|
c61fa71a70 | ||
|
|
3145269f65 | ||
|
|
2d00a1e265 | ||
|
|
f7f178d6e3 | ||
|
|
18c591e0d0 | ||
|
|
749241f4e5 | ||
|
|
997c368604 | ||
|
|
ed28928c84 | ||
|
|
b55c916e77 | ||
|
|
4d537b2a9a | ||
|
|
21f7d6c9b9 | ||
|
|
c1b865d00e | ||
|
|
a32e740242 | ||
|
|
c4f09b5598 | ||
|
|
5a89aa3b32 | ||
|
|
149d57150c | ||
|
|
bbc241748b | ||
|
|
74ecea6307 | ||
|
|
2e829956f4 | ||
|
|
9e2c9cbba9 | ||
|
|
1ad740800b | ||
|
|
c00d4c1a7b | ||
|
|
e0985ebb1c | ||
|
|
d5706442de | ||
|
|
ad5a173f3f | ||
|
|
fbb1d9247f | ||
|
|
63591941b8 | ||
|
|
fdfeec54d7 | ||
|
|
b2404809fc | ||
|
|
f9f463e799 | ||
|
|
f1d3a553d1 | ||
|
|
e997b148e1 | ||
|
|
af906fac03 | ||
|
|
19945df0b3 | ||
|
|
bf83d552f8 | ||
|
|
f5d8e99fc7 | ||
|
|
975037c5a0 | ||
|
|
8b0b45e089 | ||
|
|
182f2ae26e | ||
|
|
26982787ee | ||
|
|
4a42e3ef1b | ||
|
|
4f4498666e | ||
|
|
8f9ba44c2c | ||
|
|
1f91d4fa7b | ||
|
|
cf97d090f3 | ||
|
|
9cd96a65d6 | ||
|
|
5fc75cb4cd | ||
|
|
27fe566412 | ||
|
|
a68c7bf019 | ||
|
|
11388849de | ||
|
|
aa8fb55b30 | ||
|
|
472bea2baa | ||
|
|
0a7a6c64ce | ||
|
|
fde8196874 | ||
|
|
ea8576d344 | ||
|
|
9adda25e00 | ||
|
|
2cc0bf22cb | ||
|
|
892ebc2e03 | ||
|
|
5c9ee03389 | ||
|
|
3702b0c694 | ||
|
|
451d662af4 | ||
|
|
7b8e0a2755 | ||
|
|
63ba4f4f91 | ||
|
|
5f92465d0f | ||
|
|
64c8c5a014 | ||
|
|
2d6322f799 | ||
|
|
8127ce18a3 | ||
|
|
7b5801920b | ||
|
|
c18c1e59df | ||
|
|
4959e664a9 | ||
|
|
fb5ba257ef | ||
|
|
0ed1c0aa6b | ||
|
|
a12fac780b | ||
|
|
0b16e13597 | ||
|
|
45a9e54631 | ||
|
|
b969307c5e | ||
|
|
20325e87be | ||
|
|
fc48d9047a | ||
|
|
16b4db5083 | ||
|
|
4c7487cd2e | ||
|
|
271033e79d | ||
|
|
d2ddcf2d38 | ||
|
|
8a2ab30302 | ||
|
|
3070b0019e | ||
|
|
68ef1fc9e0 | ||
|
|
c13d67dea5 | ||
|
|
b52cf070f5 | ||
|
|
e363cd9813 | ||
|
|
c10fc26cce | ||
|
|
3bb7123dd5 | ||
|
|
2f2a7d1f89 | ||
|
|
013d307bcd | ||
|
|
5e616dd502 | ||
|
|
f200bd2198 | ||
|
|
bd36ee4f67 | ||
|
|
e0e5cc076d | ||
|
|
95e3fb24f3 | ||
|
|
83d47aed2d | ||
|
|
bbd7cf306a | ||
|
|
f6b5c752f4 | ||
|
|
ff20acc367 | ||
|
|
46c2720fc7 | ||
|
|
cf0e3ec303 | ||
|
|
c6bb3d6ae2 | ||
|
|
b39ba92cfe | ||
|
|
deb1c190c9 | ||
|
|
5d0384f580 | ||
|
|
d3ce8203be | ||
|
|
6e80f0d93b | ||
|
|
c9a923decf | ||
|
|
1be5f2d647 | ||
|
|
a38bba80ee | ||
|
|
b15d84359b | ||
|
|
a3670b731e | ||
|
|
b89546de37 | ||
|
|
fad4314538 | ||
|
|
a331961ef3 | ||
|
|
e6f62dc95e | ||
|
|
bd6d863921 | ||
|
|
c11117b070 | ||
|
|
f387ccb9e4 | ||
|
|
fd49830c35 | ||
|
|
578ca6975f | ||
|
|
c0442edb8d | ||
|
|
1416197b62 | ||
|
|
e1dd53f146 | ||
|
|
73abd0f8b8 | ||
|
|
ab982e86c3 | ||
|
|
20a4cd49de | ||
|
|
387d712b67 | ||
|
|
3d9ec91b35 | ||
|
|
8892c8c883 | ||
|
|
c51c98d682 | ||
|
|
3f4ac84cfb | ||
|
|
c5a864e86b | ||
|
|
e945dceab9 | ||
|
|
f176832851 | ||
|
|
ab195ea520 | ||
|
|
e4b861e766 | ||
|
|
ead6d8d3a1 | ||
|
|
796e2ec825 | ||
|
|
a597c3f835 | ||
|
|
c14cb29334 | ||
|
|
a233d28efc | ||
|
|
c7bc2ca82d | ||
|
|
bd6323ccae | ||
|
|
4326bfa504 | ||
|
|
b7a4c0664b | ||
|
|
da7bcf89d4 | ||
|
|
3907cc679a | ||
|
|
8cc5aee528 | ||
|
|
d0b5c4de28 | ||
|
|
431150c262 | ||
|
|
ee994ea393 | ||
|
|
53cd259ffa | ||
|
|
c0ed44abf9 | ||
|
|
0807eec4cc | ||
|
|
aec7271f50 | ||
|
|
a723518346 | ||
|
|
5d6d8e68ed | ||
|
|
197a9330df | ||
|
|
8b807d7b50 | ||
|
|
03c0111017 | ||
|
|
e55752869b | ||
|
|
94830cffca | ||
|
|
8d4319ba5f | ||
|
|
06987c4ca9 | ||
|
|
70c0edcbe7 | ||
|
|
7a482fd22a | ||
|
|
022b8ec13a | ||
|
|
b02f169764 | ||
|
|
6c0254b5f4 | ||
|
|
0a60d7016d | ||
|
|
315a2a695f | ||
|
|
863c8de28e | ||
|
|
92213f9228 | ||
|
|
253c8118a2 | ||
|
|
290c980d5f | ||
|
|
6ead1f4bd9 | ||
|
|
6e4a5b64b7 | ||
|
|
6e3e60a44d | ||
|
|
b88fafe5ff | ||
|
|
17a56bbf48 | ||
|
|
d8e51c6b14 | ||
|
|
44554cb54b | ||
|
|
0bd86a8211 | ||
|
|
7fcb3d70bb | ||
|
|
563cd828ad | ||
|
|
3581e0beed | ||
|
|
da04de7b2d | ||
|
|
661ce29519 | ||
|
|
56bed3f297 | ||
|
|
79a8715c8b | ||
|
|
69062dca16 | ||
|
|
40d3085cc2 | ||
|
|
5e444de031 | ||
|
|
3e61b89499 | ||
|
|
76e9d749c9 | ||
|
|
3e47c352a3 | ||
|
|
6028cfc1a3 | ||
|
|
20f1a85e69 | ||
|
|
00d3d0f094 | ||
|
|
8756ae0fe6 | ||
|
|
bdb1fc2ed7 | ||
|
|
34d64fbcaf | ||
|
|
3eeb0628f5 | ||
|
|
3ed71fa21e | ||
|
|
731ecfda64 | ||
|
|
230eb76532 | ||
|
|
93f2b288b5 | ||
|
|
d9ee9ba238 | ||
|
|
e000fdfb50 | ||
|
|
4e97d2503b | ||
|
|
f21f793343 | ||
|
|
c470f2734d | ||
|
|
28ddf6cf07 | ||
|
|
e0302d1f09 | ||
|
|
a536f79f6d | ||
|
|
5c48fb9e66 | ||
|
|
994ba1edd9 | ||
|
|
ed90979417 | ||
|
|
4dc2172426 | ||
|
|
daa41f8664 | ||
|
|
4e93ffb924 | ||
|
|
f29363f56d | ||
|
|
23680ccb14 | ||
|
|
986e58aeec | ||
|
|
13da75c2b6 | ||
|
|
28b28cfef6 | ||
|
|
167bf70cd6 | ||
|
|
5236dcfe52 | ||
|
|
a437524c8f | ||
|
|
fcbd48648c | ||
|
|
3f29273f6e | ||
|
|
b78ffdad02 | ||
|
|
fd4cd3ed04 | ||
|
|
d8001fcaea | ||
|
|
9771c652c5 | ||
|
|
a0c7bbe213 | ||
|
|
6b43042828 | ||
|
|
73f0b1e8a3 | ||
|
|
fa1b61b3e3 | ||
|
|
c116e94cba | ||
|
|
7229652e31 | ||
|
|
03acf7a05c | ||
|
|
d83d8c18fc | ||
|
|
2080e56f87 | ||
|
|
90f0f27fca | ||
|
|
5837026e83 | ||
|
|
edc67e5da2 | ||
|
|
55b43f4612 | ||
|
|
32a32e4a72 | ||
|
|
0eae0da781 | ||
|
|
51b62ea467 | ||
|
|
462fa5999f | ||
|
|
82b730c5b8 | ||
|
|
492ea7264a | ||
|
|
a1c910e3aa | ||
|
|
bf5f58e0ce | ||
|
|
428bc9b419 | ||
|
|
a2742caa87 | ||
|
|
d2a5edda46 | ||
|
|
38f8956bd0 | ||
|
|
ec8deab454 | ||
|
|
cdc92fc552 | ||
|
|
53fb48fe7d | ||
|
|
73e4006447 | ||
|
|
c2ff269b5f | ||
|
|
c7310b64ad | ||
|
|
83daa702f9 | ||
|
|
cb1a06270e | ||
|
|
fd34f97120 | ||
|
|
2dc8f3b3e4 | ||
|
|
7e5b81ff4d | ||
|
|
f5b945c09b | ||
|
|
6014dd05a0 | ||
|
|
0c6aa381c5 | ||
|
|
0246f050e2 | ||
|
|
5f222c4df2 | ||
|
|
800f3f765f | ||
|
|
635f346b12 | ||
|
|
abe79dbf64 | ||
|
|
2b72622fe8 | ||
|
|
201c7a7e49 | ||
|
|
ef21283a61 | ||
|
|
4eb76cdc30 | ||
|
|
3b68f598b1 | ||
|
|
31db43dbb0 | ||
|
|
1efc4a03cc | ||
|
|
607c818879 | ||
|
|
6d5f044948 | ||
|
|
f24a8b3918 | ||
|
|
2e402098a2 | ||
|
|
3389c798f6 | ||
|
|
738ad474c1 | ||
|
|
86e2ac1497 | ||
|
|
b2a4f11e0b | ||
|
|
09d380ba8f | ||
|
|
12bfa72f31 | ||
|
|
b0990ac6ec | ||
|
|
6f1f07a1c4 | ||
|
|
f55fdae9eb | ||
|
|
b0225880de | ||
|
|
74be6af3e6 | ||
|
|
72f5fbd6ad | ||
|
|
ae3efa1151 | ||
|
|
348ed268c3 | ||
|
|
df19ccf998 | ||
|
|
db2e4f30a7 | ||
|
|
a1e1f5aab6 | ||
|
|
7ffe11b000 | ||
|
|
eb5ea17610 | ||
|
|
8657381dce | ||
|
|
55114082e3 | ||
|
|
64051e9cfa | ||
|
|
780d64a349 | ||
|
|
bcd1827d8a | ||
|
|
0097f5fc8d | ||
|
|
3766d2b97b | ||
|
|
f2b7bfc561 | ||
|
|
4d3484002d | ||
|
|
34f20f914a | ||
|
|
19444353b4 | ||
|
|
b4f0a13779 | ||
|
|
fa815af798 | ||
|
|
f1e2aa8c96 | ||
|
|
9fd24db257 | ||
|
|
73414f2ee1 | ||
|
|
7b37e5183c | ||
|
|
bb8438c770 | ||
|
|
3dd329a999 | ||
|
|
ab2672777e | ||
|
|
45aea4176f | ||
|
|
f8dfbbb0b9 | ||
|
|
48a348c4d1 | ||
|
|
870ff56629 | ||
|
|
b2ed8d8560 | ||
|
|
e8510ddc58 | ||
|
|
97f7575409 | ||
|
|
5220157b01 | ||
|
|
900f9ec9a9 | ||
|
|
52ec2c2538 | ||
|
|
31101221e0 | ||
|
|
ae37c2ab2a | ||
|
|
e8d014d80d | ||
|
|
b88f1dc79a | ||
|
|
dccc791c99 | ||
|
|
474d2402b7 | ||
|
|
7a9f1e9c6c | ||
|
|
98364e83b6 | ||
|
|
bf65f033dd | ||
|
|
2d9b430327 | ||
|
|
ec54443674 | ||
|
|
0fb84ccc49 | ||
|
|
0b4aad4931 | ||
|
|
ab470d4a4c | ||
|
|
88e1245d10 | ||
|
|
bc4dbd6194 | ||
|
|
b35df54c81 | ||
|
|
c53c7b1aaa | ||
|
|
0a0653358c | ||
|
|
e2ccaf2c91 | ||
|
|
75f5212661 | ||
|
|
1e548af987 | ||
|
|
2c2c828b47 | ||
|
|
19e49a7de7 | ||
|
|
18c9ad25be | ||
|
|
9e3f0304de | ||
|
|
55dbcb646b | ||
|
|
db0ab2e4a9 | ||
|
|
c254eebea2 | ||
|
|
45b0e7dc01 | ||
|
|
4c4c62c7e5 | ||
|
|
cb2038442c | ||
|
|
1d219eb8f2 | ||
|
|
7d33563010 | ||
|
|
e3d34c46c7 | ||
|
|
9129e82804 | ||
|
|
d4f4a64937 | ||
|
|
2b4a51ba24 | ||
|
|
6a8d755b27 | ||
|
|
754fea538a | ||
|
|
4d0b660c73 | ||
|
|
d0173fbdc5 | ||
|
|
62ae4aeac9 | ||
|
|
e98aa81794 | ||
|
|
a5dcac137f | ||
|
|
96215d32b7 | ||
|
|
4a20989028 | ||
|
|
f5fe6a36eb | ||
|
|
852bab6e0b | ||
|
|
52ec27f785 | ||
|
|
c6d617f190 | ||
|
|
1a6ef23ee7 | ||
|
|
759bbeac06 | ||
|
|
15c72fe7d3 | ||
|
|
f6973f9a70 | ||
|
|
f1d5afe72a | ||
|
|
e1f2cd21e7 | ||
|
|
ea5c60af7a | ||
|
|
558567d399 | ||
|
|
0c1899a0af | ||
|
|
28d8ad1e61 | ||
|
|
eb0a0662a3 | ||
|
|
3a21efbaae | ||
|
|
405363da59 | ||
|
|
e5bcfeaad5 | ||
|
|
8b8cfa7a1b | ||
|
|
af131cd1e5 | ||
|
|
a7bb90e7e6 | ||
|
|
25cf36a948 | ||
|
|
cc3ff284f7 | ||
|
|
0af6f271c6 | ||
|
|
441cddbde6 | ||
|
|
1ab09c65f0 | ||
|
|
b9892fc2d0 | ||
|
|
14bf3056de | ||
|
|
b3b9555daa | ||
|
|
db66ffc868 | ||
|
|
91decea302 | ||
|
|
065c19cbbc | ||
|
|
296ebd0341 | ||
|
|
5293e3b277 | ||
|
|
78f5b1e607 | ||
|
|
17af5622ec | ||
|
|
2afce3f1f4 | ||
|
|
dc29b4afa1 | ||
|
|
55fc0cb63b | ||
|
|
5e1eda9e97 | ||
|
|
d582af8cb2 | ||
|
|
0931341a7f | ||
|
|
92916d9820 | ||
|
|
12fbbbb5b3 | ||
|
|
0a603d022f | ||
|
|
2ada9fbee3 | ||
|
|
6e2132c65e | ||
|
|
71dbf0fab2 | ||
|
|
048e97e1ee | ||
|
|
f1c0f1d0a4 | ||
|
|
7242d03f56 | ||
|
|
58bbc33aa6 | ||
|
|
85e82d0bd5 | ||
|
|
d6c23bb5f3 | ||
|
|
8235bca664 | ||
|
|
cd2541a9d2 | ||
|
|
4f7036a405 | ||
|
|
227c9594db | ||
|
|
ea41a60057 | ||
|
|
eee47eae61 | ||
|
|
b6c1816833 | ||
|
|
4e359848d1 | ||
|
|
9cce56caf8 | ||
|
|
f5f0bae2ef | ||
|
|
4fc65aac84 | ||
|
|
bf32477f89 | ||
|
|
969eeff636 | ||
|
|
958607ba9b | ||
|
|
dcfcc1f271 | ||
|
|
bc3c6af95d | ||
|
|
701220246d | ||
|
|
e3b0cdaf69 | ||
|
|
c61cbfc581 | ||
|
|
58073484fe | ||
|
|
8ce1bb1b0b | ||
|
|
3fab42b8d1 | ||
|
|
5b802e9edd | ||
|
|
a9308dd992 | ||
|
|
937a3e7fd6 | ||
|
|
c9caa5687a | ||
|
|
d6950c680f | ||
|
|
4fe33db4f3 | ||
|
|
96d9604fe1 | ||
|
|
0c6eacb141 | ||
|
|
e83a97349f | ||
|
|
6c5f0aecb4 | ||
|
|
d9160f9126 | ||
|
|
1d93de8628 | ||
|
|
54de5b0300 | ||
|
|
b7145959a7 | ||
|
|
1d32a96b01 | ||
|
|
9cc02d6fcb | ||
|
|
5d18c04661 | ||
|
|
e88e17a4b0 | ||
|
|
a75d73b8ac | ||
|
|
bbac6b55d2 | ||
|
|
3eeed39f52 | ||
|
|
7356b7a104 | ||
|
|
54310b925d | ||
|
|
85b5c60d60 | ||
|
|
ab48ae6ca6 | ||
|
|
7a62eb0ebf | ||
|
|
c9423509a9 | ||
|
|
0c77d6d918 | ||
|
|
a0cc6afa7e | ||
|
|
8a08a0211f | ||
|
|
2c044d7262 | ||
|
|
9ff3160808 | ||
|
|
7671ed857d | ||
|
|
b9bbe7a432 | ||
|
|
76a18f5ed3 | ||
|
|
0ee2b02700 | ||
|
|
173984ffd4 | ||
|
|
f309ae0c67 | ||
|
|
26ef2539df | ||
|
|
bc7df4c841 | ||
|
|
26c95bab66 | ||
|
|
95b588f58e | ||
|
|
15e8f6ffb7 | ||
|
|
10cdd7640e | ||
|
|
f216287aee | ||
|
|
38871a98b4 | ||
|
|
9158bdfcf9 | ||
|
|
4dd694ab05 | ||
|
|
553e3ee758 | ||
|
|
a470bf127e | ||
|
|
52adf51d33 | ||
|
|
d688e34521 | ||
|
|
50b8744f24 | ||
|
|
3e6faf8364 | ||
|
|
720de651f3 | ||
|
|
3d382d0354 | ||
|
|
8fea5585e5 | ||
|
|
3f12a17246 | ||
|
|
087ff278aa | ||
|
|
301abcaa49 | ||
|
|
e33b8cc8e5 | ||
|
|
d1bc8a7202 | ||
|
|
77fa3bd7fc | ||
|
|
3162fcf154 | ||
|
|
c618bdfe91 | ||
|
|
dd5c9939a0 | ||
|
|
80082b0880 | ||
|
|
b7aa115bd2 | ||
|
|
0e9950638c | ||
|
|
a957acd893 | ||
|
|
a9244333fb | ||
|
|
63a19bc0a1 | ||
|
|
c25d648321 | ||
|
|
2f6711dd2d | ||
|
|
c450b41e8f | ||
|
|
9937650062 | ||
|
|
56ff88934f | ||
|
|
c1a577797a | ||
|
|
257227920d | ||
|
|
461633cd83 | ||
|
|
a0887e9285 | ||
|
|
23354d371f | ||
|
|
0e838d59d5 | ||
|
|
f305c9d96a | ||
|
|
226665403f | ||
|
|
88d0460e3c | ||
|
|
e09b4f878e | ||
|
|
a7ef3ce58a | ||
|
|
256f33b720 | ||
|
|
e17002c6da | ||
|
|
f2d96b895f | ||
|
|
dade589075 | ||
|
|
0d9cd25a71 | ||
|
|
cb73490107 | ||
|
|
535405521c | ||
|
|
8785c08861 | ||
|
|
0020a37029 | ||
|
|
33cbed592a | ||
|
|
28c0e15058 | ||
|
|
a316411f76 | ||
|
|
66ad519dbd | ||
|
|
2a8dc1d34a | ||
|
|
228b670b4f | ||
|
|
da9fb46b6a | ||
|
|
f4d120b11f | ||
|
|
bc954b75ce | ||
|
|
b787734913 | ||
|
|
fb5a6c20de | ||
|
|
3fda085cbb | ||
|
|
d87ea854bc | ||
|
|
f41cb0d81c | ||
|
|
8427b03a39 | ||
|
|
9cb7786182 | ||
|
|
6666dece5d | ||
|
|
efdd17fa9a | ||
|
|
7f7d5d9f4c | ||
|
|
9b542f7653 | ||
|
|
b27c3ff169 | ||
|
|
115221098a | ||
|
|
5a6a7e8d82 | ||
|
|
9383d4c97c | ||
|
|
39e3b136dc | ||
|
|
a48532d0b1 | ||
|
|
83d9cb55f1 | ||
|
|
d8ace7e38b | ||
|
|
8524192a91 | ||
|
|
23e2040797 | ||
|
|
afe12154a2 | ||
|
|
cabfdccfa4 | ||
|
|
16da5ccc91 | ||
|
|
24f8506740 | ||
|
|
e03399749a | ||
|
|
f8a6423bf4 | ||
|
|
ce993ea63a | ||
|
|
25e784fe8a | ||
|
|
b5411b686d | ||
|
|
71f136be20 | ||
|
|
1f0b9bf798 | ||
|
|
cff872dd07 | ||
|
|
662a768d83 | ||
|
|
c3abd3e2b3 | ||
|
|
7ec462737b | ||
|
|
ee8510cec7 | ||
|
|
3cc6ba005a | ||
|
|
7c9068cf17 | ||
|
|
e1ae3601c4 | ||
|
|
8ce51cbf53 | ||
|
|
0cffb3651c | ||
|
|
90e6c016a6 | ||
|
|
9cba0a0b89 | ||
|
|
f68ef1492f | ||
|
|
535e1bd2ce | ||
|
|
df02292338 | ||
|
|
e2d38208c4 | ||
|
|
cdb264d47b | ||
|
|
73c19803a2 | ||
|
|
622b2f3858 | ||
|
|
83061afe6f | ||
|
|
24547c11cb | ||
|
|
cfdc9ad03c | ||
|
|
a012414f9f | ||
|
|
ce5abfc3cd | ||
|
|
30b260ab21 | ||
|
|
15839d9815 | ||
|
|
08af0d4bf2 | ||
|
|
979203cbdb | ||
|
|
a7163c6a04 | ||
|
|
8b5f389cd7 | ||
|
|
d30a9b545e | ||
|
|
d26d680390 | ||
|
|
24e6b54650 | ||
|
|
d56356e595 | ||
|
|
be11c7127d | ||
|
|
cf557bc63e | ||
|
|
78c620126c | ||
|
|
17a6c697c7 | ||
|
|
2279c1ce70 | ||
|
|
7fa1bcfdfb | ||
|
|
5102adfd5c | ||
|
|
9f3a0699f6 | ||
|
|
81bf4bc028 | ||
|
|
d2c84c5fc2 | ||
|
|
8b6be8234d | ||
|
|
d7f0acd96d | ||
|
|
d805d74f05 | ||
|
|
37d540544a | ||
|
|
8651466cf2 | ||
|
|
90c55c0096 | ||
|
|
87d489207c | ||
|
|
6045b5fead | ||
|
|
1976fd6164 | ||
|
|
be4c64de71 | ||
|
|
443d9669b6 | ||
|
|
8dcb2e073a | ||
|
|
b34282e1f3 | ||
|
|
21bb40fce5 | ||
|
|
2a95d13eae | ||
|
|
b1331a6259 | ||
|
|
2e2b6555fa | ||
|
|
be55926cfe | ||
|
|
1ff94d1035 | ||
|
|
8e9f3e2b4d | ||
|
|
4aac3d076f | ||
|
|
014ce28e3a | ||
|
|
1ef2ca83a9 | ||
|
|
9adac5686b | ||
|
|
1dc96e4fd2 | ||
|
|
542d86b667 | ||
|
|
9ac4346850 | ||
|
|
df32e4e7b6 | ||
|
|
7ccd8e2c87 | ||
|
|
da4679f0ae | ||
|
|
416897994a | ||
|
|
fc8c1793f2 | ||
|
|
f9cd9a97ef | ||
|
|
b063740d3e | ||
|
|
c37732be9b | ||
|
|
1141b99cf4 | ||
|
|
6f8483aecd | ||
|
|
1e75b172d6 | ||
|
|
553a3798a1 | ||
|
|
29c661d919 | ||
|
|
309cb1010c | ||
|
|
1bcac047aa | ||
|
|
0e6bd87e19 | ||
|
|
1bb48e1979 | ||
|
|
f2381a34c7 | ||
|
|
4e20e9c91a | ||
|
|
124fc98116 | ||
|
|
3131d25de4 | ||
|
|
b8b1d9e991 | ||
|
|
4c25f94bd1 | ||
|
|
a1215749d2 | ||
|
|
d45def7cbe | ||
|
|
fb02334b46 | ||
|
|
923d76cf69 | ||
|
|
e01377e100 | ||
|
|
57b8ec178c | ||
|
|
b2f5e2f927 | ||
|
|
fad88c2718 | ||
|
|
e205577145 | ||
|
|
5112398ad3 | ||
|
|
e8d1d5f5fc | ||
|
|
91d091aaba | ||
|
|
cf1631130d | ||
|
|
d5a0d0cfa0 | ||
|
|
bf9ed4753e | ||
|
|
9eb1fd0151 | ||
|
|
96d46b4770 | ||
|
|
b60d2501cb | ||
|
|
a5bba37cae | ||
|
|
bbcb1e3d25 | ||
|
|
6f3af14623 | ||
|
|
0d6356c855 | ||
|
|
845fdec015 | ||
|
|
aeae2b3ef7 | ||
|
|
3d49909fc9 | ||
|
|
0bb03a083a | ||
|
|
ff3ca6f719 | ||
|
|
4b33ee6309 | ||
|
|
ae640dda56 | ||
|
|
722b82e1a5 | ||
|
|
089078472f | ||
|
|
214e4285be | ||
|
|
8870283f6f | ||
|
|
815f10876c | ||
|
|
591d631b0d | ||
|
|
a1780d43bb | ||
|
|
f722c6f684 | ||
|
|
d18250d1e7 | ||
|
|
85c149d8e4 | ||
|
|
0e6d368970 | ||
|
|
886fb73521 | ||
|
|
64dd1dc967 | ||
|
|
098df81754 | ||
|
|
53218409d7 | ||
|
|
a7a460a29d | ||
|
|
b4e34b6158 | ||
|
|
6608bf882f | ||
|
|
f5493ab0c4 | ||
|
|
f9f06e91f5 | ||
|
|
3c3d1a84ef | ||
|
|
e85c0d16b6 | ||
|
|
ef022c91bb | ||
|
|
d66b10b508 | ||
|
|
bea88f31e0 | ||
|
|
8b82db1220 | ||
|
|
14cbd842f5 | ||
|
|
26cd24d92f | ||
|
|
e2fdd69524 | ||
|
|
71996c9509 | ||
|
|
544cb203ea | ||
|
|
fdd24dcb72 | ||
|
|
ea12eccc90 | ||
|
|
87600d36e4 | ||
|
|
85e6ed32a1 | ||
|
|
c749ebff46 | ||
|
|
39f0edcb32 | ||
|
|
823632ccba | ||
|
|
86fa3928a7 | ||
|
|
7f6b18fc9c | ||
|
|
8301b4bf4e | ||
|
|
16c94fb1d0 | ||
|
|
1be383e50e | ||
|
|
66b90c2a08 | ||
|
|
f502eb0ea5 | ||
|
|
7921be45f5 | ||
|
|
a1095b8844 | ||
|
|
399af2fbf6 | ||
|
|
d54c96e455 | ||
|
|
eb8231af14 | ||
|
|
59c865293f | ||
|
|
72cfe05323 | ||
|
|
aaa03db69c | ||
|
|
6368ab691c | ||
|
|
5b2358c97f | ||
|
|
072430cef5 | ||
|
|
5f7055e282 | ||
|
|
be982d95ea | ||
|
|
b9c8df7019 | ||
|
|
e89ae475f6 | ||
|
|
9476d7fdbb | ||
|
|
da16a799fa | ||
|
|
9e0feb0b64 | ||
|
|
93a600a0a8 | ||
|
|
06ee68f836 | ||
|
|
d6f1abad95 | ||
|
|
933c99110c | ||
|
|
8999bbf297 | ||
|
|
200fc56a4a | ||
|
|
c4f642258b | ||
|
|
67c90eda4b | ||
|
|
d2413b1899 | ||
|
|
bc0a5bf6e1 | ||
|
|
54a396ed1b | ||
|
|
7e9084e10f | ||
|
|
db45552a05 | ||
|
|
46b3cf1871 | ||
|
|
96e3d9496d | ||
|
|
f3e13cd9dd | ||
|
|
8645e92951 | ||
|
|
3fd58bb69d | ||
|
|
5028b8a93d | ||
|
|
9d5027b932 | ||
|
|
064d00f136 | ||
|
|
723a1897b9 | ||
|
|
9a6c38f0e8 | ||
|
|
d3b305ced3 | ||
|
|
e6dd082b0f | ||
|
|
ebfebdffa7 | ||
|
|
0d2c46a893 | ||
|
|
6b17644d98 | ||
|
|
6c38dc7d4a | ||
|
|
714f191a9d | ||
|
|
28cbe0f464 | ||
|
|
09a6b3c30a | ||
|
|
0d16f54c2f | ||
|
|
47956871e8 | ||
|
|
de85c9448a | ||
|
|
f022cbb93f | ||
|
|
52bffd4030 | ||
|
|
a35635f4bb | ||
|
|
fbde794d39 | ||
|
|
9121de746f | ||
|
|
9a7a600407 | ||
|
|
3ecf0cc685 | ||
|
|
38d4f29e51 | ||
|
|
e830a59c2a | ||
|
|
6fbc23a096 | ||
|
|
9093d29ae4 | ||
|
|
7692dcd629 | ||
|
|
dcad52cf52 | ||
|
|
6a500f2ede | ||
|
|
312c6324d2 | ||
|
|
21cf2a01c7 | ||
|
|
3ba979a9d7 | ||
|
|
7defb54f15 | ||
|
|
a926cc0dce | ||
|
|
32fe330946 | ||
|
|
8dac38d844 | ||
|
|
28829ce671 | ||
|
|
bebe2b5282 | ||
|
|
db2ec7df8f | ||
|
|
4d3f5373d4 | ||
|
|
c9c1ad5829 | ||
|
|
8c8b5cbb1c | ||
|
|
d91d87b67f | ||
|
|
772548dbf9 | ||
|
|
9b614c8b32 | ||
|
|
836a2b0fbd | ||
|
|
b5679df7f9 | ||
|
|
ac88f55f25 | ||
|
|
6b375cb0a3 | ||
|
|
be45ec13c0 | ||
|
|
f56def14d2 | ||
|
|
d43af7d8ad | ||
|
|
b6abcaee7a | ||
|
|
6a818763fd | ||
|
|
9905695699 | ||
|
|
278ce0281d | ||
|
|
b34f745837 | ||
|
|
0c50feeb1b | ||
|
|
c44b641cce | ||
|
|
2c86fac208 | ||
|
|
4e1d7ca3de | ||
|
|
35c1cee18b | ||
|
|
0bf007e63c | ||
|
|
3f3c45b663 | ||
|
|
dab956fe85 | ||
|
|
d28d3baf05 | ||
|
|
897dc1c2ba | ||
|
|
dd97dc580b | ||
|
|
8d830382de | ||
|
|
e39be54afa | ||
|
|
7f7e8692a8 | ||
|
|
36d509238d | ||
|
|
a8cddb5b19 | ||
|
|
186f5ed39c | ||
|
|
46233a0f4c | ||
|
|
7dcb28ce33 | ||
|
|
f4b52890e0 | ||
|
|
99bcbaa601 | ||
|
|
d665d91920 | ||
|
|
70d16ab097 | ||
|
|
6111042907 | ||
|
|
0533f7c3d6 | ||
|
|
221fe6223a | ||
|
|
baf8d2511d | ||
|
|
9dd7b4d5d8 | ||
|
|
3edba4e2db | ||
|
|
3c1465692e | ||
|
|
68835586a9 | ||
|
|
26ba25d2ae | ||
|
|
7eec6e2cc0 | ||
|
|
be9cddcad8 | ||
|
|
fdfdbb3ffc | ||
|
|
5124cc49b3 | ||
|
|
a47db31d46 | ||
|
|
d02dc1797c | ||
|
|
7ddc706f2d | ||
|
|
755353dc0b | ||
|
|
2692c29519 | ||
|
|
e2228cc448 | ||
|
|
152616a261 | ||
|
|
21850b4444 | ||
|
|
bc039a31c5 | ||
|
|
2db8f1f9d1 | ||
|
|
5817e48e17 | ||
|
|
bf42d66171 | ||
|
|
30c2c92970 | ||
|
|
01ab0cf196 | ||
|
|
fd12f69afa | ||
|
|
53e87352da | ||
|
|
e12d0ef4aa | ||
|
|
e4ac34da0d | ||
|
|
e121ed8ecb | ||
|
|
1970795093 | ||
|
|
902f56c499 | ||
|
|
1a8463015f | ||
|
|
688ecef4cc | ||
|
|
773a74e2a9 | ||
|
|
f495bf105f | ||
|
|
72c198a1e9 | ||
|
|
bf2dbf5ff4 | ||
|
|
2f5ae54c08 | ||
|
|
7c36bb7b52 | ||
|
|
f5cf291f55 | ||
|
|
f000e05267 | ||
|
|
12e565fb03 | ||
|
|
a9c4bd4a30 | ||
|
|
56c8e00b8b | ||
|
|
5a0865559c | ||
|
|
0f611d03dd | ||
|
|
f64dd3794a | ||
|
|
bdc5cded22 | ||
|
|
cd5658f01d | ||
|
|
e12717fe5f | ||
|
|
7cd12f151c | ||
|
|
5cb4413655 | ||
|
|
e148cc7e51 | ||
|
|
17587bb299 | ||
|
|
4ecbf7aec6 | ||
|
|
c33dd8e2ef | ||
|
|
a7e73df801 | ||
|
|
2ffc528986 | ||
|
|
11595be199 | ||
|
|
7640a51726 | ||
|
|
d59be68e52 | ||
|
|
6fa48b4ada | ||
|
|
6c475bf02a | ||
|
|
d6cbcae08f | ||
|
|
e978d1d0fd | ||
|
|
897bfbaf0e | ||
|
|
bd914497c9 | ||
|
|
8595d3e569 | ||
|
|
4401ccd6fa | ||
|
|
5555cf8fbe | ||
|
|
cc9f69d63b | ||
|
|
9ca01b0898 | ||
|
|
9b7e5b38ad | ||
|
|
f47f2a9151 | ||
|
|
4c32bea702 | ||
|
|
4009fd77e8 | ||
|
|
433059f8a0 | ||
|
|
416cdac1fe | ||
|
|
e143493d7b | ||
|
|
f7c1b8d88f | ||
|
|
63ac61d920 | ||
|
|
3f1a4d581b | ||
|
|
ac60ba40a2 | ||
|
|
831a50e702 | ||
|
|
4bc7466da3 | ||
|
|
d649d13c97 | ||
|
|
086c48cea9 | ||
|
|
cf6fbae30a | ||
|
|
30c002831e | ||
|
|
2ab513893d | ||
|
|
a4600dd8a8 | ||
|
|
285387c4c1 | ||
|
|
c88219b769 | ||
|
|
50c737694f | ||
|
|
549dc05713 | ||
|
|
ac743ca2fe | ||
|
|
97f14d21e8 | ||
|
|
2c619cbe41 | ||
|
|
dd4f52b63d | ||
|
|
69f1969e60 | ||
|
|
64b680e7cf | ||
|
|
ddaefddc6e | ||
|
|
3343210e8b | ||
|
|
2e256c0fca | ||
|
|
5403166552 | ||
|
|
d761d2f00e | ||
|
|
19c8ba719a | ||
|
|
55972bfac5 | ||
|
|
c0ead118a2 | ||
|
|
c15e3c306e | ||
|
|
3c4852a254 | ||
|
|
61a48b5367 | ||
|
|
7f4548021b | ||
|
|
0a29fa87f0 | ||
|
|
8d92ee424f | ||
|
|
ceb78aa095 | ||
|
|
6dd476fecb | ||
|
|
e5bdbffbcf | ||
|
|
1de50e8170 | ||
|
|
27353f98ff | ||
|
|
ef097c7a7a | ||
|
|
33606eee9f | ||
|
|
ac2b9a6fc1 | ||
|
|
264b282f5c | ||
|
|
9321a4f486 | ||
|
|
ffbc6e0c8b | ||
|
|
fa420c4825 | ||
|
|
4d2036512a | ||
|
|
63bf4b5fa8 | ||
|
|
4b58f0b4dd | ||
|
|
029e6a015e | ||
|
|
5d6b1223cc | ||
|
|
813c51b0ca | ||
|
|
4d7a6dd661 | ||
|
|
954df86f3c | ||
|
|
da1126a5a9 | ||
|
|
0e1e8d2b16 | ||
|
|
9967bb993f | ||
|
|
8f851bc781 | ||
|
|
c6d0322080 | ||
|
|
6467b14486 | ||
|
|
88ce98e716 | ||
|
|
343bcbb363 | ||
|
|
5228b3490d | ||
|
|
0f40279060 | ||
|
|
731aa5e9f3 | ||
|
|
791645fa59 | ||
|
|
4fe85cdd4a | ||
|
|
8b8f50ed0f | ||
|
|
c711084807 | ||
|
|
88efd13acb | ||
|
|
f72eed064a | ||
|
|
6c0ca4cec8 | ||
|
|
71ffa21db0 | ||
|
|
bd6b7cdfc4 | ||
|
|
b7123c5be8 | ||
|
|
20b39c7215 | ||
|
|
5e9841e7ab | ||
|
|
09d2502f53 | ||
|
|
033645a7e0 | ||
|
|
eb8b264b18 | ||
|
|
b7c9c187e5 | ||
|
|
b543e6d143 | ||
|
|
4bbef031d5 | ||
|
|
006df4d20b | ||
|
|
0ef2ae4ac4 | ||
|
|
e70f3f2125 | ||
|
|
20cdb87e28 | ||
|
|
28ef64cba1 | ||
|
|
b89bf86f03 | ||
|
|
58e252a875 | ||
|
|
5cf2f47b12 | ||
|
|
088f4a76a7 | ||
|
|
7bff325a7d | ||
|
|
5e36710cde | ||
|
|
5639ce82bd | ||
|
|
29e3616237 | ||
|
|
9a28bab5b2 | ||
|
|
02456280d4 | ||
|
|
93a6410360 | ||
|
|
dc0f21298e | ||
|
|
aa740f4263 | ||
|
|
31b3c5d721 | ||
|
|
2133f91089 | ||
|
|
633c80d5e4 | ||
|
|
22ca7177a6 | ||
|
|
fd9f5475f3 | ||
|
|
96f367943c | ||
|
|
dfd5ea8a7f | ||
|
|
b80051bb35 | ||
|
|
d49dd9377e | ||
|
|
5662121cdb | ||
|
|
e4544d8a22 | ||
|
|
c763478f66 | ||
|
|
8c741bdfd3 | ||
|
|
ac9e4a5582 | ||
|
|
07137ac566 | ||
|
|
b52795bd59 | ||
|
|
893a88bb02 | ||
|
|
e198dd626b | ||
|
|
ef615baaeb | ||
|
|
072338afae | ||
|
|
2ec773e9bf | ||
|
|
5e7efd24eb | ||
|
|
5dbfa71b2c | ||
|
|
b9ad4b2379 | ||
|
|
ca0e00ea5e | ||
|
|
e48f36a227 | ||
|
|
c9d19115e9 | ||
|
|
9ac3128309 | ||
|
|
aacffd979b | ||
|
|
b40c3aae52 | ||
|
|
31fc018526 | ||
|
|
b17c6983ce | ||
|
|
c86a8fff03 | ||
|
|
780cb37d46 | ||
|
|
7bbc5183db | ||
|
|
f0ded8498a | ||
|
|
e37745d0b4 | ||
|
|
2ce0f724bb | ||
|
|
5ebb2565ca | ||
|
|
84dc0b8be8 | ||
|
|
74a492e52e | ||
|
|
2badecba2a | ||
|
|
c01c8d0afc | ||
|
|
76a6b4e09e | ||
|
|
4ed9aa39c7 | ||
|
|
52aebb3bcc | ||
|
|
c950ed1701 | ||
|
|
f97f5d94ae | ||
|
|
5c5413075e | ||
|
|
806c2130b5 | ||
|
|
8cc7dc0a3e | ||
|
|
5fc88fb6e4 | ||
|
|
77eca6bcdc | ||
|
|
195018e22d | ||
|
|
552871d98c | ||
|
|
71e3f86024 | ||
|
|
07f7a9318c | ||
|
|
7f539a2de3 | ||
|
|
30d6edf502 | ||
|
|
60f0a3485f | ||
|
|
ebf25282e3 | ||
|
|
59bc97c2f5 | ||
|
|
a24a7e8d0f | ||
|
|
bf33b28483 | ||
|
|
b60c4bd952 | ||
|
|
0f56aecadf | ||
|
|
ec34470284 | ||
|
|
77231f6538 | ||
|
|
fa0b1436c2 | ||
|
|
7bc98ee434 | ||
|
|
2051bee3cf | ||
|
|
6d70c8af50 | ||
|
|
2cfa61602f | ||
|
|
fbfad5f86d | ||
|
|
889415fb26 | ||
|
|
ebd8903c9b | ||
|
|
314d7f4387 | ||
|
|
5875cb1896 | ||
|
|
7a2e151079 | ||
|
|
7bdf0d0b90 | ||
|
|
ee3e7938c2 | ||
|
|
058a82c79c | ||
|
|
3a831085eb | ||
|
|
9a54cf664b | ||
|
|
5d4f6ff80e | ||
|
|
afae2d110c | ||
|
|
a0171f9cc8 | ||
|
|
261c4b9833 | ||
|
|
f96fd806c0 | ||
|
|
126114dea4 | ||
|
|
3fd1d66f12 | ||
|
|
cdc412afd0 | ||
|
|
1772c66694 | ||
|
|
5e6e921790 | ||
|
|
7d7cfe391a | ||
|
|
d99ff80714 |
20
.github/ISSUE_TEMPLATE/task.yaml
vendored
@@ -1,20 +0,0 @@
|
||||
name: 📝 Task
|
||||
description: Create a task for the team to work on, used internally only. We will delete tasks created by non-team members.
|
||||
title: "[Task]: "
|
||||
labels: [Task]
|
||||
body:
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Are you our team member?
|
||||
description: If you are not our team member, please go to discussions.
|
||||
options:
|
||||
- label: Yes, I am?
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: SubTasks
|
||||
placeholder: |
|
||||
- Sub Task 1
|
||||
- Sub Task 2
|
||||
validations:
|
||||
required: false
|
||||
41
.github/workflows/bridge.yml
vendored
@@ -1,14 +1,14 @@
|
||||
# This yaml shares the build bridge steps with ci and nightly.
|
||||
name: Build flutter-rust-bridge
|
||||
# 2023-04-19 15:48:00+00:00
|
||||
# 2023-11-23 18:00:00+00:00
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
|
||||
env:
|
||||
FLUTTER_VERSION: "3.10.5"
|
||||
FLUTTER_RUST_BRIDGE_VERSION: "1.75.3"
|
||||
|
||||
FLUTTER_VERSION: "3.16.9"
|
||||
FLUTTER_RUST_BRIDGE_VERSION: "1.80.1"
|
||||
|
||||
jobs:
|
||||
generate_bridge:
|
||||
runs-on: ${{ matrix.job.os }}
|
||||
@@ -23,26 +23,39 @@ jobs:
|
||||
}
|
||||
steps:
|
||||
- name: Checkout source code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install prerequisites
|
||||
run: |
|
||||
sudo apt install ca-certificates -y
|
||||
sudo apt update -y
|
||||
sudo apt install -y g++ gcc git curl wget nasm yasm libgtk-3-dev clang cmake libclang-dev ninja-build llvm-dev libclang-10-dev llvm-10-dev pkg-config
|
||||
sudo apt-get install ca-certificates -y
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y \
|
||||
clang \
|
||||
cmake \
|
||||
curl \
|
||||
gcc \
|
||||
git \
|
||||
g++ \
|
||||
libclang-10-dev \
|
||||
libclang-dev \
|
||||
libgtk-3-dev \
|
||||
llvm-10-dev \
|
||||
llvm-dev \
|
||||
nasm \
|
||||
ninja-build \
|
||||
pkg-config \
|
||||
wget
|
||||
|
||||
- name: Install Rust toolchain
|
||||
uses: actions-rs/toolchain@v1
|
||||
uses: dtolnay/rust-toolchain@v1
|
||||
with:
|
||||
toolchain: stable
|
||||
target: ${{ matrix.job.target }}
|
||||
override: true
|
||||
profile: minimal # minimal component installation (ie, no documentation)
|
||||
targets: ${{ matrix.job.target }}
|
||||
components: ''
|
||||
|
||||
- uses: Swatinem/rust-cache@v2
|
||||
with:
|
||||
prefix-key: bridge-${{ matrix.job.os }}
|
||||
workspace: "/tmp/flutter_rust_bridge/frb_codegen"
|
||||
|
||||
- name: Cache Bridge
|
||||
id: cache-bridge
|
||||
@@ -75,5 +88,5 @@ jobs:
|
||||
path: |
|
||||
./src/bridge_generated.rs
|
||||
./src/bridge_generated.io.rs
|
||||
./flutter/lib/generated_bridge.dart
|
||||
./flutter/lib/generated_bridge.dart
|
||||
./flutter/lib/generated_bridge.freezed.dart
|
||||
|
||||
74
.github/workflows/ci.yml
vendored
@@ -1,8 +1,12 @@
|
||||
name: CI
|
||||
|
||||
# env:
|
||||
env:
|
||||
# MIN_SUPPORTED_RUST_VERSION: "1.46.0"
|
||||
# CICD_INTERMEDIATES_DIR: "_cicd-intermediates"
|
||||
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
|
||||
# vcpkg version: 2023.10.19
|
||||
# for multiarch gcc compatibility
|
||||
VCPKG_COMMIT_ID: "8eb57355a4ffb410a2e94c07b4dca2dffbee8e50"
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
@@ -76,36 +80,63 @@ jobs:
|
||||
- { target: x86_64-unknown-linux-gnu , os: ubuntu-20.04 }
|
||||
# - { target: x86_64-unknown-linux-musl , os: ubuntu-20.04, use-cross: true }
|
||||
steps:
|
||||
- name: Export GitHub Actions cache environment variables
|
||||
uses: actions/github-script@v6
|
||||
with:
|
||||
script: |
|
||||
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
|
||||
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
|
||||
|
||||
- name: Checkout source code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install prerequisites
|
||||
shell: bash
|
||||
run: |
|
||||
case ${{ matrix.job.target }} in
|
||||
x86_64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt install -y g++ gcc git curl wget nasm yasm libgtk-3-dev clang libxcb-randr0-dev libxdo-dev libxfixes-dev libxcb-shape0-dev libxcb-xfixes0-dev libasound2-dev libpulse-dev cmake libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev;;
|
||||
x86_64-unknown-linux-gnu)
|
||||
sudo apt-get -y update
|
||||
sudo apt-get install -y \
|
||||
clang \
|
||||
cmake \
|
||||
curl \
|
||||
gcc \
|
||||
git \
|
||||
g++ \
|
||||
libasound2-dev \
|
||||
libgstreamer1.0-dev \
|
||||
libgstreamer-plugins-base1.0-dev \
|
||||
libgtk-3-dev \
|
||||
libpulse-dev \
|
||||
libxcb-randr0-dev \
|
||||
libxcb-shape0-dev \
|
||||
libxcb-xfixes0-dev \
|
||||
libxdo-dev \
|
||||
libxfixes-dev \
|
||||
nasm \
|
||||
wget
|
||||
;;
|
||||
# arm-unknown-linux-*) sudo apt-get -y update ; sudo apt-get -y install gcc-arm-linux-gnueabihf ;;
|
||||
# aarch64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt-get -y install gcc-aarch64-linux-gnu ;;
|
||||
esac
|
||||
|
||||
- name: Restore from cache and install vcpkg
|
||||
uses: lukka/run-vcpkg@v7
|
||||
- name: Setup vcpkg with Github Actions binary cache
|
||||
uses: lukka/run-vcpkg@v11
|
||||
with:
|
||||
setupOnly: true
|
||||
vcpkgGitCommitId: '501db0f17ef6df184fcdbfbe0f87cde2313b6ab1' #2023.04.15
|
||||
|
||||
vcpkgDirectory: /opt/artifacts/vcpkg
|
||||
vcpkgGitCommitId: ${{ env.VCPKG_COMMIT_ID }}
|
||||
|
||||
- name: Install vcpkg dependencies
|
||||
run: |
|
||||
$VCPKG_ROOT/vcpkg install libvpx libyuv opus aom
|
||||
shell: bash
|
||||
$VCPKG_ROOT/vcpkg install --x-install-root="$VCPKG_ROOT/installed"
|
||||
shell: bash
|
||||
|
||||
- name: Install Rust toolchain
|
||||
uses: actions-rs/toolchain@v1
|
||||
uses: dtolnay/rust-toolchain@v1
|
||||
with:
|
||||
toolchain: stable
|
||||
target: ${{ matrix.job.target }}
|
||||
override: true
|
||||
profile: minimal # minimal component installation (ie, no documentation)
|
||||
targets: ${{ matrix.job.target }}
|
||||
components: ''
|
||||
|
||||
- name: Show version information (Rust, cargo, GCC)
|
||||
shell: bash
|
||||
@@ -117,14 +148,19 @@ jobs:
|
||||
cargo -V
|
||||
rustc -V
|
||||
|
||||
- uses: Swatinem/rust-cache@v1
|
||||
|
||||
- uses: Swatinem/rust-cache@v2
|
||||
|
||||
- name: Build
|
||||
uses: actions-rs/cargo@v1
|
||||
with:
|
||||
use-cross: ${{ matrix.job.use-cross }}
|
||||
command: build
|
||||
args: --locked --release --target=${{ matrix.job.target }}
|
||||
args: --locked --target=${{ matrix.job.target }}
|
||||
|
||||
- name: clean
|
||||
shell: bash
|
||||
run: |
|
||||
cargo clean
|
||||
|
||||
# - name: Strip debug information from executable
|
||||
# id: strip
|
||||
@@ -178,7 +214,9 @@ jobs:
|
||||
;;
|
||||
esac;
|
||||
|
||||
echo ::set-output name=CARGO_TEST_OPTIONS::${CARGO_TEST_OPTIONS}
|
||||
#deprecated echo ::set-output name=CARGO_TEST_OPTIONS::${CARGO_TEST_OPTIONS}
|
||||
echo "CARGO_TEST_OPTIONS=${CARGO_TEST_OPTIONS}" >> $GITHUB_ENV
|
||||
echo "CARGO_TEST_OPTIONS=${CARGO_TEST_OPTIONS}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Run tests
|
||||
uses: actions-rs/cargo@v1
|
||||
|
||||
857
.github/workflows/flutter-build.yml
vendored
1
.github/workflows/flutter-ci.yml
vendored
@@ -19,4 +19,3 @@ jobs:
|
||||
uses: ./.github/workflows/flutter-build.yml
|
||||
with:
|
||||
upload-artifact: false
|
||||
|
||||
|
||||
2
.github/workflows/flutter-nightly.yml
vendored
@@ -12,4 +12,4 @@ jobs:
|
||||
secrets: inherit
|
||||
with:
|
||||
upload-artifact: true
|
||||
upload-tag: "nightly"
|
||||
upload-tag: "nightly"
|
||||
|
||||
22
.github/workflows/flutter-tag.yml
vendored
@@ -15,4 +15,24 @@ jobs:
|
||||
secrets: inherit
|
||||
with:
|
||||
upload-artifact: true
|
||||
upload-tag: "1.2.1"
|
||||
upload-tag: ${{ env.GITHUB_REF_NAME }}
|
||||
|
||||
update-fdroid-version-file:
|
||||
name: Publish RustDesk version file for F-Droid updater
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Generate RustDesk version file
|
||||
run: |
|
||||
UPSTREAM_VERNAME="$GITHUB_REF_NAME"
|
||||
UPSTREAM_VERCODE="$(echo "$UPSTREAM_VERNAME" | tr -d '.')"
|
||||
echo "versionName=$UPSTREAM_VERNAME" > rustdesk-version.txt
|
||||
echo "versionCode=$UPSTREAM_VERCODE" >> rustdesk-version.txt
|
||||
shell: bash
|
||||
|
||||
- name: Publish RustDesk version file
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
prerelease: true
|
||||
tag_name: "fdroid-version"
|
||||
files: |
|
||||
./rustdesk-version.txt
|
||||
|
||||
324
.github/workflows/history.yml
vendored
@@ -4,30 +4,26 @@ on: [workflow_dispatch]
|
||||
|
||||
env:
|
||||
LLVM_VERSION: "10.0"
|
||||
# Note: currently 3.0.5 does not support arm64 officially, we use latest stable version first.
|
||||
FLUTTER_VERSION: "3.0.5"
|
||||
FLUTTER_VERSION: "3.16.9"
|
||||
TAG_NAME: "tmp"
|
||||
# vcpkg version: 2022.05.10
|
||||
# for multiarch gcc compatibility
|
||||
VCPKG_COMMIT_ID: "14e7bb4ae24616ec54ff6b2f6ef4e8659434ea44"
|
||||
VERSION: "1.2.1"
|
||||
FLUTTER_RUST_BRIDGE_VERSION: "1.80.1"
|
||||
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
|
||||
VERSION: "1.2.4"
|
||||
|
||||
jobs:
|
||||
build-for-windows-2022-12-05:
|
||||
name: ${{ matrix.job.target }} (${{ matrix.job.os }})
|
||||
build-for-history-windows:
|
||||
name: ${{ matrix.job.date }}
|
||||
runs-on: ${{ matrix.job.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
job:
|
||||
# - { target: i686-pc-windows-msvc , os: windows-2019 }
|
||||
# - { target: x86_64-pc-windows-gnu , os: windows-2019 }
|
||||
- { target: x86_64-pc-windows-msvc, os: windows-2019 }
|
||||
- { target: x86_64-pc-windows-msvc, os: windows-2019, arch: x86_64, date: 2023-08-04, ref: 72c198a1e94cc1e0242fce88f92b3f3caedcd0c3 }
|
||||
steps:
|
||||
- name: Checkout source code
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: '8d1254cf14b69f545c9cefa026c5eeb0e7dd3e7c'
|
||||
ref: ${{ matrix.job.ref }}
|
||||
|
||||
- name: Install LLVM and Clang
|
||||
uses: KyleMayes/install-llvm-action@v1
|
||||
@@ -41,49 +37,34 @@ jobs:
|
||||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
cache: true
|
||||
|
||||
- name: Replace engine with rustdesk custom flutter engine
|
||||
run: |
|
||||
flutter doctor -v
|
||||
flutter precache --windows
|
||||
Invoke-WebRequest -Uri https://github.com/Kingtous/engine/releases/download/v3.0.5-rustdesk.2/windows-x64-flutter-release.zip -OutFile windows-x64-flutter-release.zip
|
||||
Expand-Archive windows-x64-flutter-release.zip -DestinationPath engine
|
||||
mv -Force engine/* C:/hostedtoolcache/windows/flutter/stable-3.0.5-x64/bin/cache/artifacts/engine/windows-x64-release/
|
||||
- name: Install Rust toolchain
|
||||
uses: actions-rs/toolchain@v1
|
||||
with:
|
||||
toolchain: "1.62"
|
||||
toolchain: stable
|
||||
target: ${{ matrix.job.target }}
|
||||
override: true
|
||||
components: rustfmt
|
||||
profile: minimal # minimal component installation (ie, no documentation)
|
||||
|
||||
- uses: Swatinem/rust-cache@v2
|
||||
with:
|
||||
prefix-key: ${{ matrix.job.os }}
|
||||
|
||||
- name: Install flutter rust bridge deps
|
||||
run: |
|
||||
dart pub global activate ffigen --version 5.0.1
|
||||
$exists = Test-Path ~/.cargo/bin/flutter_rust_bridge_codegen.exe
|
||||
Push-Location ..
|
||||
git clone https://github.com/SoLongAndThanksForAllThePizza/flutter_rust_bridge --depth=1
|
||||
Push-Location flutter_rust_bridge/frb_codegen ; cargo install --path . ; Pop-Location
|
||||
Pop-Location
|
||||
cargo install flutter_rust_bridge_codegen --version ${{ env.FLUTTER_RUST_BRIDGE_VERSION }} --features "uuid"
|
||||
Push-Location flutter ; flutter pub get ; Pop-Location
|
||||
~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart
|
||||
- name: Restore from cache and install vcpkg
|
||||
uses: lukka/run-vcpkg@v7
|
||||
|
||||
- name: Setup vcpkg with Github Actions binary cache
|
||||
uses: lukka/run-vcpkg@v11
|
||||
with:
|
||||
setupOnly: true
|
||||
vcpkgDirectory: C:\vcpkg
|
||||
vcpkgGitCommitId: ${{ env.VCPKG_COMMIT_ID }}
|
||||
|
||||
- name: Install vcpkg dependencies
|
||||
run: |
|
||||
$VCPKG_ROOT/vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static
|
||||
$VCPKG_ROOT/vcpkg install --x-install-root="$VCPKG_ROOT/installed"
|
||||
shell: bash
|
||||
|
||||
- name: Build rustdesk
|
||||
run: python3 .\build.py --portable --hwcodec --flutter
|
||||
run: python3 .\build.py --portable --hwcodec --flutter --feature IddDriver
|
||||
|
||||
- name: Build self-extracted executable
|
||||
shell: bash
|
||||
@@ -92,275 +73,8 @@ jobs:
|
||||
python3 ./generate.py -f ../../flutter/build/windows/runner/Release/ -o . -e ../../flutter/build/windows/runner/Release/rustdesk.exe
|
||||
popd
|
||||
mkdir -p ./SignOutput
|
||||
mv ./target/release/rustdesk-portable-packer.exe ./SignOutput/rustdesk-2022-12-05-${{ matrix.job.target }}.exe
|
||||
|
||||
- name: Publish Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
prerelease: true
|
||||
tag_name: ${{ env.TAG_NAME }}
|
||||
files: |
|
||||
./SignOutput/rustdesk-*.exe
|
||||
|
||||
build-for-windows-2022-12-12:
|
||||
name: ${{ matrix.job.target }} (${{ matrix.job.os }})
|
||||
runs-on: ${{ matrix.job.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
job:
|
||||
# - { target: i686-pc-windows-msvc , os: windows-2019 }
|
||||
# - { target: x86_64-pc-windows-gnu , os: windows-2019 }
|
||||
- { target: x86_64-pc-windows-msvc, os: windows-2019 }
|
||||
steps:
|
||||
- name: Checkout source code
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: '3dd43b79ec0409fc38103bed0c7eb0bc3cd993d5'
|
||||
|
||||
- name: Install LLVM and Clang
|
||||
uses: KyleMayes/install-llvm-action@v1
|
||||
with:
|
||||
version: ${{ env.LLVM_VERSION }}
|
||||
|
||||
- name: Install flutter
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: "stable"
|
||||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
cache: true
|
||||
|
||||
- name: Replace engine with rustdesk custom flutter engine
|
||||
run: |
|
||||
flutter doctor -v
|
||||
flutter precache --windows
|
||||
Invoke-WebRequest -Uri https://github.com/Kingtous/engine/releases/download/v3.0.5-rustdesk.2/windows-x64-flutter-release.zip -OutFile windows-x64-flutter-release.zip
|
||||
Expand-Archive windows-x64-flutter-release.zip -DestinationPath engine
|
||||
mv -Force engine/* C:/hostedtoolcache/windows/flutter/stable-3.0.5-x64/bin/cache/artifacts/engine/windows-x64-release/
|
||||
- name: Install Rust toolchain
|
||||
uses: actions-rs/toolchain@v1
|
||||
with:
|
||||
toolchain: "1.62"
|
||||
target: ${{ matrix.job.target }}
|
||||
override: true
|
||||
components: rustfmt
|
||||
profile: minimal # minimal component installation (ie, no documentation)
|
||||
|
||||
- uses: Swatinem/rust-cache@v2
|
||||
with:
|
||||
prefix-key: ${{ matrix.job.os }}
|
||||
|
||||
- name: Install flutter rust bridge deps
|
||||
run: |
|
||||
dart pub global activate ffigen --version 5.0.1
|
||||
$exists = Test-Path ~/.cargo/bin/flutter_rust_bridge_codegen.exe
|
||||
Push-Location ..
|
||||
git clone https://github.com/SoLongAndThanksForAllThePizza/flutter_rust_bridge --depth=1
|
||||
Push-Location flutter_rust_bridge/frb_codegen ; cargo install --path . ; Pop-Location
|
||||
Pop-Location
|
||||
Push-Location flutter ; flutter pub get ; Pop-Location
|
||||
~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart
|
||||
- name: Restore from cache and install vcpkg
|
||||
uses: lukka/run-vcpkg@v7
|
||||
with:
|
||||
setupOnly: true
|
||||
vcpkgGitCommitId: ${{ env.VCPKG_COMMIT_ID }}
|
||||
|
||||
- name: Install vcpkg dependencies
|
||||
run: |
|
||||
$VCPKG_ROOT/vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static
|
||||
shell: bash
|
||||
|
||||
- name: Build rustdesk
|
||||
run: python3 .\build.py --portable --hwcodec --flutter
|
||||
|
||||
- name: Build self-extracted executable
|
||||
shell: bash
|
||||
run: |
|
||||
pushd ./libs/portable
|
||||
python3 ./generate.py -f ../../flutter/build/windows/runner/Release/ -o . -e ../../flutter/build/windows/runner/Release/rustdesk.exe
|
||||
popd
|
||||
mkdir -p ./SignOutput
|
||||
mv ./target/release/rustdesk-portable-packer.exe ./SignOutput/rustdesk-2022-12-12-${{ matrix.job.target }}.exe
|
||||
|
||||
- name: Publish Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
prerelease: true
|
||||
tag_name: ${{ env.TAG_NAME }}
|
||||
files: |
|
||||
./SignOutput/rustdesk-*.exe
|
||||
|
||||
build-for-windows-2022-12-19:
|
||||
name: ${{ matrix.job.target }} (${{ matrix.job.os }})
|
||||
runs-on: ${{ matrix.job.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
job:
|
||||
# - { target: i686-pc-windows-msvc , os: windows-2019 }
|
||||
# - { target: x86_64-pc-windows-gnu , os: windows-2019 }
|
||||
- { target: x86_64-pc-windows-msvc, os: windows-2019 }
|
||||
steps:
|
||||
- name: Checkout source code
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: '1054715891c4e73ad9b164acec6dadecfc599a65'
|
||||
|
||||
- name: Install LLVM and Clang
|
||||
uses: KyleMayes/install-llvm-action@v1
|
||||
with:
|
||||
version: ${{ env.LLVM_VERSION }}
|
||||
|
||||
- name: Install flutter
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: "stable"
|
||||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
cache: true
|
||||
|
||||
- name: Replace engine with rustdesk custom flutter engine
|
||||
run: |
|
||||
flutter doctor -v
|
||||
flutter precache --windows
|
||||
Invoke-WebRequest -Uri https://github.com/Kingtous/engine/releases/download/v3.0.5-rustdesk.2/windows-x64-flutter-release.zip -OutFile windows-x64-flutter-release.zip
|
||||
Expand-Archive windows-x64-flutter-release.zip -DestinationPath engine
|
||||
mv -Force engine/* C:/hostedtoolcache/windows/flutter/stable-3.0.5-x64/bin/cache/artifacts/engine/windows-x64-release/
|
||||
- name: Install Rust toolchain
|
||||
uses: actions-rs/toolchain@v1
|
||||
with:
|
||||
toolchain: "1.62"
|
||||
target: ${{ matrix.job.target }}
|
||||
override: true
|
||||
components: rustfmt
|
||||
profile: minimal # minimal component installation (ie, no documentation)
|
||||
|
||||
- uses: Swatinem/rust-cache@v2
|
||||
with:
|
||||
prefix-key: ${{ matrix.job.os }}
|
||||
|
||||
- name: Install flutter rust bridge deps
|
||||
run: |
|
||||
dart pub global activate ffigen --version 5.0.1
|
||||
$exists = Test-Path ~/.cargo/bin/flutter_rust_bridge_codegen.exe
|
||||
Push-Location ..
|
||||
git clone https://github.com/SoLongAndThanksForAllThePizza/flutter_rust_bridge --depth=1
|
||||
Push-Location flutter_rust_bridge/frb_codegen ; cargo install --path . ; Pop-Location
|
||||
Pop-Location
|
||||
Push-Location flutter ; flutter pub get ; Pop-Location
|
||||
~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart
|
||||
- name: Restore from cache and install vcpkg
|
||||
uses: lukka/run-vcpkg@v7
|
||||
with:
|
||||
setupOnly: true
|
||||
vcpkgGitCommitId: ${{ env.VCPKG_COMMIT_ID }}
|
||||
|
||||
- name: Install vcpkg dependencies
|
||||
run: |
|
||||
$VCPKG_ROOT/vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static
|
||||
shell: bash
|
||||
|
||||
- name: Build rustdesk
|
||||
run: python3 .\build.py --portable --hwcodec --flutter
|
||||
|
||||
- name: Build self-extracted executable
|
||||
shell: bash
|
||||
run: |
|
||||
pushd ./libs/portable
|
||||
python3 ./generate.py -f ../../flutter/build/windows/runner/Release/ -o . -e ../../flutter/build/windows/runner/Release/rustdesk.exe
|
||||
popd
|
||||
mkdir -p ./SignOutput
|
||||
mv ./target/release/rustdesk-portable-packer.exe ./SignOutput/rustdesk-2022-12-19-${{ matrix.job.target }}.exe
|
||||
|
||||
- name: Publish Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
prerelease: true
|
||||
tag_name: ${{ env.TAG_NAME }}
|
||||
files: |
|
||||
./SignOutput/rustdesk-*.exe
|
||||
|
||||
build-for-windows-2022-12-26:
|
||||
name: ${{ matrix.job.target }} (${{ matrix.job.os }})
|
||||
runs-on: ${{ matrix.job.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
job:
|
||||
# - { target: i686-pc-windows-msvc , os: windows-2019 }
|
||||
# - { target: x86_64-pc-windows-gnu , os: windows-2019 }
|
||||
- { target: x86_64-pc-windows-msvc, os: windows-2019 }
|
||||
steps:
|
||||
- name: Checkout source code
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: 'b241925fe093dc4da804a5aac419375f4ca7653f'
|
||||
|
||||
- name: Install LLVM and Clang
|
||||
uses: KyleMayes/install-llvm-action@v1
|
||||
with:
|
||||
version: ${{ env.LLVM_VERSION }}
|
||||
|
||||
- name: Install flutter
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: "stable"
|
||||
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||
cache: true
|
||||
|
||||
- name: Replace engine with rustdesk custom flutter engine
|
||||
run: |
|
||||
flutter doctor -v
|
||||
flutter precache --windows
|
||||
Invoke-WebRequest -Uri https://github.com/Kingtous/engine/releases/download/v3.0.5-rustdesk.2/windows-x64-flutter-release.zip -OutFile windows-x64-flutter-release.zip
|
||||
Expand-Archive windows-x64-flutter-release.zip -DestinationPath engine
|
||||
mv -Force engine/* C:/hostedtoolcache/windows/flutter/stable-3.0.5-x64/bin/cache/artifacts/engine/windows-x64-release/
|
||||
- name: Install Rust toolchain
|
||||
uses: actions-rs/toolchain@v1
|
||||
with:
|
||||
toolchain: "1.62"
|
||||
target: ${{ matrix.job.target }}
|
||||
override: true
|
||||
components: rustfmt
|
||||
profile: minimal # minimal component installation (ie, no documentation)
|
||||
|
||||
- uses: Swatinem/rust-cache@v2
|
||||
with:
|
||||
prefix-key: ${{ matrix.job.os }}
|
||||
|
||||
- name: Install flutter rust bridge deps
|
||||
run: |
|
||||
dart pub global activate ffigen --version 5.0.1
|
||||
$exists = Test-Path ~/.cargo/bin/flutter_rust_bridge_codegen.exe
|
||||
Push-Location ..
|
||||
git clone https://github.com/SoLongAndThanksForAllThePizza/flutter_rust_bridge --depth=1
|
||||
Push-Location flutter_rust_bridge/frb_codegen ; cargo install --path . ; Pop-Location
|
||||
Pop-Location
|
||||
Push-Location flutter ; flutter pub get ; Pop-Location
|
||||
~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart
|
||||
- name: Restore from cache and install vcpkg
|
||||
uses: lukka/run-vcpkg@v7
|
||||
with:
|
||||
setupOnly: true
|
||||
vcpkgGitCommitId: ${{ env.VCPKG_COMMIT_ID }}
|
||||
|
||||
- name: Install vcpkg dependencies
|
||||
run: |
|
||||
$VCPKG_ROOT/vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static
|
||||
shell: bash
|
||||
|
||||
- name: Build rustdesk
|
||||
run: python3 .\build.py --portable --hwcodec --flutter
|
||||
|
||||
- name: Build self-extracted executable
|
||||
shell: bash
|
||||
run: |
|
||||
pushd ./libs/portable
|
||||
python3 ./generate.py -f ../../flutter/build/windows/runner/Release/ -o . -e ../../flutter/build/windows/runner/Release/rustdesk.exe
|
||||
popd
|
||||
mkdir -p ./SignOutput
|
||||
mv ./target/release/rustdesk-portable-packer.exe ./SignOutput/rustdesk-2022-12-26-${{ matrix.job.target }}.exe
|
||||
|
||||
mv ./target/release/rustdesk-portable-packer.exe ./SignOutput/rustdesk-${{ matrix.job.date }}-${{ matrix.job.target }}.exe
|
||||
|
||||
- name: Publish Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
|
||||
88
.github/workflows/vcpkg-deps-linux.yml
vendored
@@ -1,88 +0,0 @@
|
||||
name: Build vcpkg dependencies for linux clients
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
|
||||
jobs:
|
||||
build-vcpkg-deps-linux:
|
||||
runs-on: ${{ matrix.job.os }}
|
||||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
job:
|
||||
- { arch: armv7, os: ubuntu-20.04 }
|
||||
- { arch: x86_64, os: ubuntu-20.04 }
|
||||
- { arch: aarch64, os: ubuntu-20.04 }
|
||||
steps:
|
||||
- name: Create vcpkg artifacts folder
|
||||
run: mkdir -p /opt/artifacts
|
||||
|
||||
- name: Cache Vcpkg
|
||||
id: cache-vcpkg
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: /opt/artifacts
|
||||
key: vcpkg-${{ matrix.job.arch }}
|
||||
|
||||
- uses: Kingtous/run-on-arch-action@amd64-support
|
||||
name: Run vcpkg install on ${{ matrix.job.arch }}
|
||||
id: vcpkg
|
||||
with:
|
||||
arch: ${{ matrix.job.arch }}
|
||||
distro: ubuntu18.04
|
||||
githubToken: ${{ github.token }}
|
||||
setup: |
|
||||
ls -l "/opt/artifacts"
|
||||
dockerRunArgs: |
|
||||
--volume "/opt/artifacts:/artifacts"
|
||||
shell: /bin/bash
|
||||
install: |
|
||||
apt update -y
|
||||
case "${{ matrix.job.arch }}" in
|
||||
x86_64)
|
||||
# CMake 3.15+
|
||||
apt install -y gpg wget ca-certificates
|
||||
echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ bionic main' | tee /etc/apt/sources.list.d/kitware.list >/dev/null
|
||||
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null
|
||||
apt update -y
|
||||
apt install -y curl zip unzip tar git cmake g++ gcc build-essential pkg-config wget nasm yasm ninja-build libjpeg8-dev
|
||||
cmake --version
|
||||
gcc -v
|
||||
;;
|
||||
aarch64|armv7)
|
||||
apt install -y curl zip unzip git
|
||||
esac
|
||||
run: |
|
||||
# disable git safe.directory
|
||||
git config --global --add safe.directory "*"
|
||||
case "${{ matrix.job.arch }}" in
|
||||
x86_64)
|
||||
export VCPKG_FORCE_SYSTEM_BINARIES=1
|
||||
pushd /artifacts
|
||||
git clone https://github.com/microsoft/vcpkg.git || true
|
||||
pushd vcpkg
|
||||
git reset --hard ${{ env.VCPKG_COMMIT_ID }}
|
||||
./bootstrap-vcpkg.sh
|
||||
./vcpkg install libvpx libyuv opus aom
|
||||
;;
|
||||
aarch64)
|
||||
pushd /artifacts
|
||||
rm -rf rustdesk_thirdparty_lib
|
||||
git clone https://github.com/Kingtous/rustdesk_thirdparty_lib.git --depth=1
|
||||
mkdir -p /artifacts/vcpkg/installed
|
||||
mv ./rustdesk_thirdparty_lib/vcpkg/installed/arm64-linux /artifacts/vcpkg/installed/arm64-linux
|
||||
;;
|
||||
armv7)
|
||||
pushd /artifacts
|
||||
rm -rf rustdesk_thirdparty_lib
|
||||
git clone https://github.com/Kingtous/rustdesk_thirdparty_lib.git --depth=1
|
||||
mkdir -p /artifacts/vcpkg/installed
|
||||
mv ./rustdesk_thirdparty_lib/vcpkg/installed/arm-linux /artifacts/vcpkg/installed/arm-linux
|
||||
;;
|
||||
esac
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@master
|
||||
with:
|
||||
name: vcpkg-artifact-${{ matrix.job.arch }}
|
||||
path: |
|
||||
/opt/artifacts/vcpkg/installed
|
||||
4
.gitignore
vendored
@@ -49,4 +49,6 @@ lib/generated_bridge.dart
|
||||
.ssh
|
||||
.devcontainer/.*
|
||||
# build cache in examples
|
||||
examples/**/target/
|
||||
examples/**/target/
|
||||
# ===
|
||||
vcpkg_installed
|
||||
3564
Cargo.lock
generated
57
Cargo.toml
@@ -1,11 +1,12 @@
|
||||
[package]
|
||||
name = "rustdesk"
|
||||
version = "1.2.1"
|
||||
version = "1.2.4"
|
||||
authors = ["rustdesk <info@rustdesk.com>"]
|
||||
edition = "2021"
|
||||
build= "build.rs"
|
||||
description = "A remote control software."
|
||||
default-run = "rustdesk"
|
||||
rust-version = "1.75"
|
||||
|
||||
[lib]
|
||||
name = "librustdesk"
|
||||
@@ -27,11 +28,19 @@ use_dasp = ["dasp"]
|
||||
flutter = ["flutter_rust_bridge"]
|
||||
default = ["use_dasp"]
|
||||
hwcodec = ["scrap/hwcodec"]
|
||||
gpucodec = ["scrap/gpucodec"]
|
||||
mediacodec = ["scrap/mediacodec"]
|
||||
linux_headless = ["pam" ]
|
||||
virtual_display_driver = ["virtual_display"]
|
||||
plugin_framework = []
|
||||
linux-pkg-config = ["magnum-opus/linux-pkg-config", "scrap/linux-pkg-config"]
|
||||
unix-file-copy-paste = [
|
||||
"dep:x11-clipboard",
|
||||
"dep:x11rb",
|
||||
"dep:percent-encoding",
|
||||
"dep:once_cell",
|
||||
"clipboard/unix-file-copy-paste",
|
||||
]
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
@@ -47,13 +56,12 @@ cfg-if = "1.0"
|
||||
lazy_static = "1.4"
|
||||
sha2 = "0.10"
|
||||
repng = "0.2"
|
||||
parity-tokio-ipc = { git = "https://github.com/open-trade/parity-tokio-ipc" }
|
||||
runas = "1.0"
|
||||
magnum-opus = { git = "https://github.com/rustdesk/magnum-opus" }
|
||||
parity-tokio-ipc = { git = "https://github.com/rustdesk-org/parity-tokio-ipc" }
|
||||
runas = "=1.0" # https://github.com/mitsuhiko/rust-runas/issues/13
|
||||
magnum-opus = { git = "https://github.com/rustdesk-org/magnum-opus" }
|
||||
dasp = { version = "0.11", features = ["signal", "interpolate-linear", "interpolate"], optional = true }
|
||||
rubato = { version = "0.12", optional = true }
|
||||
samplerate = { version = "0.2", optional = true }
|
||||
async-trait = "0.1"
|
||||
uuid = { version = "1.3", features = ["v4"] }
|
||||
clap = "4.2"
|
||||
rpassword = "7.2"
|
||||
@@ -62,18 +70,19 @@ num_cpus = "1.15"
|
||||
bytes = { version = "1.4", features = ["serde"] }
|
||||
default-net = "0.14"
|
||||
wol-rs = "1.0"
|
||||
flutter_rust_bridge = { version = "1.75", features = ["uuid"], optional = true}
|
||||
flutter_rust_bridge = { version = "=1.80", features = ["uuid"], optional = true}
|
||||
errno = "0.3"
|
||||
rdev = { git = "https://github.com/fufesou/rdev" }
|
||||
url = { version = "2.3", features = ["serde"] }
|
||||
crossbeam-queue = "0.3"
|
||||
hex = "0.4"
|
||||
reqwest = { git = "https://github.com/rustdesk-org/reqwest", features = ["blocking", "json", "rustls-tls"], default-features=false }
|
||||
chrono = "0.4"
|
||||
cidr-utils = "0.5"
|
||||
libloading = "0.8"
|
||||
fon = "0.6"
|
||||
zip = "0.6"
|
||||
shutdown_hooks = "0.1"
|
||||
totp-rs = { version = "5.4", default-features = false, features = ["gen_secret", "otpauth"] }
|
||||
|
||||
[target.'cfg(not(any(target_os = "android", target_os = "linux")))'.dependencies]
|
||||
cpal = "0.15"
|
||||
@@ -86,17 +95,18 @@ sys-locale = "0.3"
|
||||
enigo = { path = "libs/enigo", features = [ "with_serde" ] }
|
||||
clipboard = { path = "libs/clipboard" }
|
||||
ctrlc = "3.2"
|
||||
arboard = "3.2"
|
||||
arboard = { version = "3.2", features = ["wayland-data-control"] }
|
||||
system_shutdown = "4.0"
|
||||
qrcode-generator = "4.1"
|
||||
|
||||
[target.'cfg(target_os = "windows")'.dependencies]
|
||||
winapi = { version = "0.3", features = ["winuser", "wincrypt", "shellscalingapi"] }
|
||||
winapi = { version = "0.3", features = ["winuser", "wincrypt", "shellscalingapi", "pdh", "synchapi", "memoryapi", "shellapi"] }
|
||||
winreg = "0.11"
|
||||
windows-service = "0.6"
|
||||
virtual_display = { path = "libs/virtual_display", optional = true }
|
||||
impersonate_system = { git = "https://github.com/21pages/impersonate-system" }
|
||||
shared_memory = "0.12"
|
||||
shutdown_hooks = "0.1"
|
||||
tauri-winrt-notification = "0.1.2"
|
||||
|
||||
[target.'cfg(target_os = "macos")'.dependencies]
|
||||
objc = "0.2"
|
||||
@@ -105,18 +115,27 @@ dispatch = "0.2"
|
||||
core-foundation = "0.9"
|
||||
core-graphics = "0.22"
|
||||
include_dir = "0.7"
|
||||
dark-light = "1.0"
|
||||
fruitbasket = "0.10"
|
||||
objc_id = "0.1"
|
||||
|
||||
[target.'cfg(any(target_os = "macos", target_os = "linux", target_os = "windows"))'.dependencies]
|
||||
tray-icon = { git = "https://github.com/rustdesk-org/tray-icon" }
|
||||
tao = { git = "https://github.com/rustdesk-org/tao", branch = "muda" }
|
||||
tray-icon = { git = "https://github.com/tauri-apps/tray-icon" }
|
||||
tao = { git = "https://github.com/rustdesk-org/tao", branch = "dev" }
|
||||
image = "0.24"
|
||||
|
||||
[target.'cfg(any(target_os = "macos", target_os = "linux"))'.dependencies]
|
||||
keepawake = { git = "https://github.com/rustdesk-org/keepawake-rs" }
|
||||
|
||||
[target.'cfg(any(target_os = "windows", target_os = "linux"))'.dependencies]
|
||||
wallpaper = { git = "https://github.com/21pages/wallpaper.rs" }
|
||||
|
||||
[target.'cfg(any(target_os = "macos", target_os = "windows"))'.dependencies]
|
||||
# https://github.com/rustdesk/rustdesk-server-pro/issues/189, using native-tls for better tls support
|
||||
reqwest = { git = "https://github.com/rustdesk-org/reqwest", features = ["blocking", "json", "native-tls", "gzip"], default-features=false }
|
||||
|
||||
[target.'cfg(not(any(target_os = "macos", target_os = "windows")))'.dependencies]
|
||||
reqwest = { git = "https://github.com/rustdesk-org/reqwest", features = ["blocking", "json", "rustls-tls", "rustls-tls-native-roots", "gzip"], default-features=false }
|
||||
|
||||
[target.'cfg(target_os = "linux")'.dependencies]
|
||||
psimple = { package = "libpulse-simple-binding", version = "2.27" }
|
||||
pulse = { package = "libpulse-binding", version = "2.27" }
|
||||
@@ -128,10 +147,15 @@ dbus = "0.9"
|
||||
dbus-crossroads = "0.5"
|
||||
pam = { git="https://github.com/fufesou/pam", optional = true }
|
||||
users = { version = "0.11" }
|
||||
x11-clipboard = {git="https://github.com/clslaid/x11-clipboard", branch = "feat/store-batch", optional = true}
|
||||
x11rb = {version = "0.12", features = ["all-extensions"], optional = true}
|
||||
percent-encoding = {version = "2.3", optional = true}
|
||||
once_cell = {version = "1.18", optional = true}
|
||||
|
||||
[target.'cfg(target_os = "android")'.dependencies]
|
||||
android_logger = "0.13"
|
||||
jni = "0.21"
|
||||
android-wakelock = { git = "https://github.com/21pages/android-wakelock" }
|
||||
|
||||
[workspace]
|
||||
members = ["libs/scrap", "libs/hbb_common", "libs/enigo", "libs/clipboard", "libs/virtual_display", "libs/virtual_display/dylib", "libs/portable"]
|
||||
@@ -144,12 +168,11 @@ FileDescription = "RustDesk"
|
||||
|
||||
[target.'cfg(target_os="windows")'.build-dependencies]
|
||||
winres = "0.1"
|
||||
winapi = { version = "0.3", features = [ "winnt" ] }
|
||||
winapi = { version = "0.3", features = [ "winnt", "pdh", "synchapi" ] }
|
||||
|
||||
[build-dependencies]
|
||||
cc = "1.0"
|
||||
hbb_common = { path = "libs/hbb_common" }
|
||||
flutter_rust_bridge_codegen = "1.75"
|
||||
os-version = "0.2"
|
||||
|
||||
[dev-dependencies]
|
||||
@@ -169,3 +192,7 @@ panic = 'abort'
|
||||
strip = true
|
||||
#opt-level = 'z' # only have smaller size after strip
|
||||
rpath = true
|
||||
|
||||
[profile.dev]
|
||||
split-debuginfo = '...' # Platform-specific.
|
||||
#strip = "debuginfo"
|
||||
|
||||
57
Dockerfile
@@ -1,21 +1,54 @@
|
||||
FROM debian
|
||||
FROM debian:bullseye-slim
|
||||
|
||||
WORKDIR /
|
||||
RUN apt update -y && apt install -y g++ gcc git curl wget nasm yasm libgtk-3-dev clang libxcb-randr0-dev libxdo-dev libxfixes-dev libxcb-shape0-dev libxcb-xfixes0-dev libasound2-dev libpulse-dev cmake unzip zip sudo libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev cmake ninja-build
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
RUN apt update -y && \
|
||||
apt install --yes --no-install-recommends \
|
||||
g++ \
|
||||
gcc \
|
||||
git \
|
||||
curl \
|
||||
nasm \
|
||||
yasm \
|
||||
libgtk-3-dev \
|
||||
clang \
|
||||
libxcb-randr0-dev \
|
||||
libxdo-dev \
|
||||
libxfixes-dev \
|
||||
libxcb-shape0-dev \
|
||||
libxcb-xfixes0-dev \
|
||||
libasound2-dev \
|
||||
libpulse-dev \
|
||||
make \
|
||||
cmake \
|
||||
unzip \
|
||||
zip \
|
||||
sudo \
|
||||
libgstreamer1.0-dev \
|
||||
libgstreamer-plugins-base1.0-dev \
|
||||
ca-certificates \
|
||||
ninja-build && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN git clone https://github.com/microsoft/vcpkg && cd vcpkg && git checkout 2023.04.15
|
||||
RUN /vcpkg/bootstrap-vcpkg.sh -disableMetrics
|
||||
RUN /vcpkg/vcpkg --disable-metrics install libvpx libyuv opus aom
|
||||
RUN git clone --branch 2023.04.15 --depth=1 https://github.com/microsoft/vcpkg && \
|
||||
/vcpkg/bootstrap-vcpkg.sh -disableMetrics && \
|
||||
/vcpkg/vcpkg --disable-metrics install libvpx libyuv opus aom
|
||||
|
||||
RUN groupadd -r user && \
|
||||
useradd -r -g user user --home /home/user && \
|
||||
mkdir -p /home/user/rustdesk && \
|
||||
chown -R user: /home/user && \
|
||||
echo "user ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/user
|
||||
|
||||
RUN groupadd -r user && useradd -r -g user user --home /home/user && mkdir -p /home/user && chown user /home/user && echo "user ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/user
|
||||
WORKDIR /home/user
|
||||
RUN wget https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so
|
||||
RUN curl -LO https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so
|
||||
|
||||
USER user
|
||||
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh
|
||||
RUN chmod +x rustup.sh
|
||||
RUN ./rustup.sh -y
|
||||
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh && \
|
||||
chmod +x rustup.sh && \
|
||||
./rustup.sh -y
|
||||
|
||||
USER root
|
||||
ENV HOME=/home/user
|
||||
COPY ./entrypoint /
|
||||
ENTRYPOINT ["/entrypoint"]
|
||||
COPY ./entrypoint.sh /
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
|
||||
43
README.md
@@ -5,7 +5,7 @@
|
||||
<a href="#how-to-build-with-docker">Docker</a> •
|
||||
<a href="#file-structure">Structure</a> •
|
||||
<a href="#snapshot">Snapshot</a><br>
|
||||
[<a href="docs/README-UA.md">Українська</a>] | [<a href="docs/README-CS.md">česky</a>] | [<a href="docs/README-ZH.md">中文</a>] | [<a href="docs/README-HU.md">Magyar</a>] | [<a href="docs/README-ES.md">Español</a>] | [<a href="docs/README-FA.md">فارسی</a>] | [<a href="docs/README-FR.md">Français</a>] | [<a href="docs/README-DE.md">Deutsch</a>] | [<a href="docs/README-PL.md">Polski</a>] | [<a href="docs/README-ID.md">Indonesian</a>] | [<a href="docs/README-FI.md">Suomi</a>] | [<a href="docs/README-ML.md">മലയാളം</a>] | [<a href="docs/README-JP.md">日本語</a>] | [<a href="docs/README-NL.md">Nederlands</a>] | [<a href="docs/README-IT.md">Italiano</a>] | [<a href="docs/README-RU.md">Русский</a>] | [<a href="docs/README-PTBR.md">Português (Brasil)</a>] | [<a href="docs/README-EO.md">Esperanto</a>] | [<a href="docs/README-KR.md">한국어</a>] | [<a href="docs/README-AR.md">العربي</a>] | [<a href="docs/README-VN.md">Tiếng Việt</a>] | [<a href="docs/README-DA.md">Dansk</a>] | [<a href="docs/README-GR.md">Ελληνικά</a>]<br>
|
||||
[<a href="docs/README-UA.md">Українська</a>] | [<a href="docs/README-CS.md">česky</a>] | [<a href="docs/README-ZH.md">中文</a>] | [<a href="docs/README-HU.md">Magyar</a>] | [<a href="docs/README-ES.md">Español</a>] | [<a href="docs/README-FA.md">فارسی</a>] | [<a href="docs/README-FR.md">Français</a>] | [<a href="docs/README-DE.md">Deutsch</a>] | [<a href="docs/README-PL.md">Polski</a>] | [<a href="docs/README-ID.md">Indonesian</a>] | [<a href="docs/README-FI.md">Suomi</a>] | [<a href="docs/README-ML.md">മലയാളം</a>] | [<a href="docs/README-JP.md">日本語</a>] | [<a href="docs/README-NL.md">Nederlands</a>] | [<a href="docs/README-IT.md">Italiano</a>] | [<a href="docs/README-RU.md">Русский</a>] | [<a href="docs/README-PTBR.md">Português (Brasil)</a>] | [<a href="docs/README-EO.md">Esperanto</a>] | [<a href="docs/README-KR.md">한국어</a>] | [<a href="docs/README-AR.md">العربي</a>] | [<a href="docs/README-VN.md">Tiếng Việt</a>] | [<a href="docs/README-DA.md">Dansk</a>] | [<a href="docs/README-GR.md">Ελληνικά</a>] | [<a href="docs/README-TR.md">Türkçe</a>]<br>
|
||||
<b>We need your help to translate this README, <a href="https://github.com/rustdesk/rustdesk/tree/master/src/lang">RustDesk UI</a> and <a href="https://github.com/rustdesk/doc.rustdesk.com">RustDesk Doc</a> to your native language</b>
|
||||
</p>
|
||||
|
||||
@@ -13,6 +13,8 @@ Chat with us: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitt
|
||||
|
||||
[](https://ko-fi.com/I2I04VU09)
|
||||
|
||||
[](https://console.algora.io/org/rustdesk/bounties?status=open)
|
||||
|
||||
Yet another remote desktop software, written in Rust. Works out of the box, no configuration required. You have full control of your data, with no concerns about security. You can use our rendezvous/relay server, [set up your own](https://rustdesk.com/server), or [write your own rendezvous/relay server](https://github.com/rustdesk/rustdesk-server-demo).
|
||||
|
||||

|
||||
@@ -35,7 +37,6 @@ Below are the servers you are using for free, they may change over time. If you
|
||||
| Location | Vendor | Specification |
|
||||
| --------- | ------------- | ------------------ |
|
||||
| Germany | [Hetzner](https://www.hetzner.com) | 2 vCPU / 4 GB RAM |
|
||||
| Germany | [Codext](https://codext.de) | 4 vCPU / 8 GB RAM |
|
||||
| Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4 GB RAM |
|
||||
|
||||
## Dev Container
|
||||
@@ -48,7 +49,7 @@ Go through [DEVCONTAINER.md](docs/DEVCONTAINER.md) for more info.
|
||||
|
||||
## Dependencies
|
||||
|
||||
Desktop versions use [Sciter](https://sciter.com/) or Flutter for GUI, this tutorial is for Sciter only.
|
||||
Desktop versions use Flutter or Sciter (deprecated) for GUI, this tutorial is for Sciter only, since it is easier and more friendly to start. Check out our [CI](https://github.com/rustdesk/rustdesk/blob/master/.github/workflows/flutter-build.yml) for building Flutter version.
|
||||
|
||||
Please download Sciter dynamic library yourself.
|
||||
|
||||
@@ -79,11 +80,12 @@ sudo apt install -y zip g++ gcc git curl wget nasm yasm libgtk-3-dev clang libxc
|
||||
libclang-dev ninja-build libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
|
||||
```
|
||||
|
||||
### openSUSE Tumbleweed
|
||||
### openSUSE Tumbleweed
|
||||
|
||||
```sh
|
||||
sudo zypper install gcc-c++ git curl wget nasm yasm gcc gtk3-devel clang libxcb-devel libXfixes-devel cmake alsa-lib-devel gstreamer-devel gstreamer-plugins-base-devel xdotool-devel
|
||||
```
|
||||
|
||||
### Fedora 28 (CentOS 8)
|
||||
|
||||
```sh
|
||||
@@ -134,34 +136,6 @@ mv libsciter-gtk.so target/debug
|
||||
VCPKG_ROOT=$HOME/vcpkg cargo run
|
||||
```
|
||||
|
||||
### Change Wayland to X11 (Xorg)
|
||||
|
||||
RustDesk does not support Wayland. Check [this](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) to configuring Xorg as the default GNOME session.
|
||||
|
||||
## Wayland support
|
||||
|
||||
Wayland does not seem to provide any API for sending keypresses to other windows. Therefore, the RustDesk uses an API from a lower level, namely the `/dev/uinput` device (Linux kernel level).
|
||||
|
||||
When Wayland is the controlled side, you have to start in the following way:
|
||||
```bash
|
||||
# Start uinput service
|
||||
$ sudo rustdesk --service
|
||||
$ rustdesk
|
||||
```
|
||||
**Notice**: Wayland screen recording uses different interfaces. RustDesk currently only supports org.freedesktop.portal.ScreenCast.
|
||||
```bash
|
||||
$ dbus-send --session --print-reply \
|
||||
--dest=org.freedesktop.portal.Desktop \
|
||||
/org/freedesktop/portal/desktop \
|
||||
org.freedesktop.DBus.Properties.Get \
|
||||
string:org.freedesktop.portal.ScreenCast string:version
|
||||
# Not support
|
||||
Error org.freedesktop.DBus.Error.InvalidArgs: No such interface “org.freedesktop.portal.ScreenCast”
|
||||
# Support
|
||||
method return time=1662544486.931020 sender=:1.54 -> destination=:1.139 serial=257 reply_serial=2
|
||||
variant uint32 4
|
||||
```
|
||||
|
||||
## How to build with Docker
|
||||
|
||||
Begin by cloning the repository and building the Docker container:
|
||||
@@ -197,12 +171,13 @@ Please ensure that you are running these commands from the root of the RustDesk
|
||||
- **[libs/hbb_common](https://github.com/rustdesk/rustdesk/tree/master/libs/hbb_common)**: video codec, config, tcp/udp wrapper, protobuf, fs functions for file transfer, and some other utility functions
|
||||
- **[libs/scrap](https://github.com/rustdesk/rustdesk/tree/master/libs/scrap)**: screen capture
|
||||
- **[libs/enigo](https://github.com/rustdesk/rustdesk/tree/master/libs/enigo)**: platform specific keyboard/mouse control
|
||||
- **[src/ui](https://github.com/rustdesk/rustdesk/tree/master/src/ui)**: GUI
|
||||
- **[libs/clipboard](https://github.com/rustdesk/rustdesk/tree/master/libs/clipboard)**: file copy and paste implementation for Windows, Linux, macOS.
|
||||
- **[src/ui](https://github.com/rustdesk/rustdesk/tree/master/src/ui)**: obsolete Sciter UI (deprecated)
|
||||
- **[src/server](https://github.com/rustdesk/rustdesk/tree/master/src/server)**: audio/clipboard/input/video services, and network connections
|
||||
- **[src/client.rs](https://github.com/rustdesk/rustdesk/tree/master/src/client.rs)**: start a peer connection
|
||||
- **[src/rendezvous_mediator.rs](https://github.com/rustdesk/rustdesk/tree/master/src/rendezvous_mediator.rs)**: Communicate with [rustdesk-server](https://github.com/rustdesk/rustdesk-server), wait for remote direct (TCP hole punching) or relayed connection
|
||||
- **[src/platform](https://github.com/rustdesk/rustdesk/tree/master/src/platform)**: platform specific code
|
||||
- **[flutter](https://github.com/rustdesk/rustdesk/tree/master/flutter)**: Flutter code for mobile
|
||||
- **[flutter](https://github.com/rustdesk/rustdesk/tree/master/flutter)**: Flutter code for desktop and mobile
|
||||
- **[flutter/web/js](https://github.com/rustdesk/rustdesk/tree/master/flutter/web/js)**: JavaScript for Flutter web client
|
||||
|
||||
## Snapshots
|
||||
|
||||
@@ -2,12 +2,13 @@
|
||||
version: 1
|
||||
script:
|
||||
- rm -rf ./AppDir || true
|
||||
- bsdtar -zxvf ../rustdesk-1.2.1.deb
|
||||
- bsdtar -zxvf ../rustdesk-1.2.4.deb
|
||||
- tar -xvf ./data.tar.xz
|
||||
- mkdir ./AppDir
|
||||
- mv ./usr ./AppDir/usr
|
||||
# 32x32 icon
|
||||
- for i in {32,64,128}; do mkdir -p ./AppDir/usr/share/icons/hicolor/$i\x$i/apps/; cp ../res/$i\x$i.png ./AppDir/usr/share/icons/hicolor/$i\x$i/apps/rustdesk.png; done
|
||||
- mkdir -p ./AppDir/usr/share/icons/hicolor/scalable/apps/; cp ../res/scalable.svg ./AppDir/usr/share/icons/hicolor/scalable/apps/rustdesk.svg
|
||||
# desktop file
|
||||
# - sed -i "s/Icon=\/usr\/share\/rustdesk\/files\/rustdesk.png/Icon=rustdesk/g" ./AppDir/usr/share/applications/rustdesk.desktop
|
||||
- rm -rf ./AppDir/usr/share/applications
|
||||
@@ -17,7 +18,7 @@ AppDir:
|
||||
id: rustdesk
|
||||
name: rustdesk
|
||||
icon: rustdesk
|
||||
version: 1.2.1
|
||||
version: 1.2.4
|
||||
exec: usr/lib/rustdesk/rustdesk
|
||||
exec_args: $@
|
||||
apt:
|
||||
@@ -50,7 +51,6 @@ AppDir:
|
||||
- libva-x11-2
|
||||
- libvdpau1
|
||||
- libgstreamer-plugins-base1.0-0
|
||||
- gstreamer1.0-pipewire
|
||||
- libwayland-cursor0
|
||||
- libwayland-egl1
|
||||
- libpulse0
|
||||
|
||||
@@ -2,12 +2,13 @@
|
||||
version: 1
|
||||
script:
|
||||
- rm -rf ./AppDir || true
|
||||
- bsdtar -zxvf ../rustdesk-1.2.1.deb
|
||||
- bsdtar -zxvf ../rustdesk-1.2.4.deb
|
||||
- tar -xvf ./data.tar.xz
|
||||
- mkdir ./AppDir
|
||||
- mv ./usr ./AppDir/usr
|
||||
# 32x32 icon
|
||||
- for i in {32,64,128}; do mkdir -p ./AppDir/usr/share/icons/hicolor/$i\x$i/apps/; cp ../res/$i\x$i.png ./AppDir/usr/share/icons/hicolor/$i\x$i/apps/rustdesk.png; done
|
||||
- mkdir -p ./AppDir/usr/share/icons/hicolor/scalable/apps/; cp ../res/scalable.svg ./AppDir/usr/share/icons/hicolor/scalable/apps/rustdesk.svg
|
||||
# desktop file
|
||||
# - sed -i "s/Icon=\/usr\/share\/rustdesk\/files\/rustdesk.png/Icon=rustdesk/g" ./AppDir/usr/share/applications/rustdesk.desktop
|
||||
- rm -rf ./AppDir/usr/share/applications
|
||||
@@ -17,7 +18,7 @@ AppDir:
|
||||
id: rustdesk
|
||||
name: rustdesk
|
||||
icon: rustdesk
|
||||
version: 1.2.1
|
||||
version: 1.2.4
|
||||
exec: usr/lib/rustdesk/rustdesk
|
||||
exec_args: $@
|
||||
apt:
|
||||
|
||||
82
build.py
@@ -16,7 +16,7 @@ osx = platform.platform().startswith(
|
||||
hbb_name = 'rustdesk' + ('.exe' if windows else '')
|
||||
exe_path = 'target/release/' + hbb_name
|
||||
if windows:
|
||||
flutter_build_dir = 'build/windows/runner/Release/'
|
||||
flutter_build_dir = 'build/windows/x64/runner/Release/'
|
||||
elif osx:
|
||||
flutter_build_dir = 'build/macos/Build/Products/Release/'
|
||||
else:
|
||||
@@ -24,18 +24,21 @@ else:
|
||||
flutter_build_dir_2 = f'flutter/{flutter_build_dir}'
|
||||
skip_cargo = False
|
||||
|
||||
|
||||
def get_arch() -> str:
|
||||
custom_arch = os.environ.get("ARCH")
|
||||
if custom_arch is None:
|
||||
return "amd64"
|
||||
return custom_arch
|
||||
|
||||
|
||||
def system2(cmd):
|
||||
err = os.system(cmd)
|
||||
if err != 0:
|
||||
print(f"Error occurred when executing: {cmd}. Exiting.")
|
||||
sys.exit(-1)
|
||||
|
||||
|
||||
def get_version():
|
||||
with open("Cargo.toml", encoding="utf-8") as fh:
|
||||
for line in fh:
|
||||
@@ -46,17 +49,11 @@ def get_version():
|
||||
|
||||
def parse_rc_features(feature):
|
||||
available_features = {
|
||||
'IddDriver': {
|
||||
'platform': ['windows'],
|
||||
'zip_url': 'https://github.com/fufesou/RustDeskIddDriver/releases/download/v0.3/RustDeskIddDriver_x64.zip',
|
||||
'checksum_url': 'https://github.com/fufesou/RustDeskIddDriver/releases/download/v0.3/checksum_md5',
|
||||
'exclude': ['README.md', 'certmgr.exe', 'install_cert_runas_admin.bat', 'RustDeskIddApp.exe'],
|
||||
},
|
||||
'PrivacyMode': {
|
||||
'platform': ['windows'],
|
||||
'zip_url': 'https://github.com/fufesou/RustDeskTempTopMostWindow/releases/download/v0.1'
|
||||
'/TempTopMostWindow_x64_pic_en.zip',
|
||||
'checksum_url': 'https://github.com/fufesou/RustDeskTempTopMostWindow/releases/download/v0.1/checksum_md5',
|
||||
'zip_url': 'https://github.com/fufesou/RustDeskTempTopMostWindow/releases/download/v0.3'
|
||||
'/TempTopMostWindow_x64.zip',
|
||||
'checksum_url': 'https://github.com/fufesou/RustDeskTempTopMostWindow/releases/download/v0.3/checksum_md5',
|
||||
'include': ['WindowInjection.dll'],
|
||||
}
|
||||
}
|
||||
@@ -71,14 +68,14 @@ def parse_rc_features(feature):
|
||||
return 'osx' in platforms
|
||||
else:
|
||||
return 'linux' in platforms
|
||||
|
||||
|
||||
def get_all_features():
|
||||
features = []
|
||||
for (feat, feat_info) in available_features.items():
|
||||
if platform_check(feat_info['platform']):
|
||||
features.append(feat)
|
||||
return features
|
||||
|
||||
|
||||
if isinstance(feature, str) and feature.upper() == 'ALL':
|
||||
return get_all_features()
|
||||
elif isinstance(feature, list):
|
||||
@@ -109,7 +106,7 @@ def make_parser():
|
||||
nargs='+',
|
||||
default='',
|
||||
help='Integrate features, windows only.'
|
||||
'Available: IddDriver, PrivacyMode. Special value is "ALL" and empty "". Default is empty.')
|
||||
'Available: PrivacyMode. Special value is "ALL" and empty "". Default is empty.')
|
||||
parser.add_argument('--flutter', action='store_true',
|
||||
help='Build flutter package', default=False)
|
||||
parser.add_argument(
|
||||
@@ -118,11 +115,21 @@ def make_parser():
|
||||
help='Enable feature hwcodec' + (
|
||||
'' if windows or osx else ', need libva-dev, libvdpau-dev.')
|
||||
)
|
||||
parser.add_argument(
|
||||
'--gpucodec',
|
||||
action='store_true',
|
||||
help='Enable feature gpucodec, only available on windows now.'
|
||||
)
|
||||
parser.add_argument(
|
||||
'--portable',
|
||||
action='store_true',
|
||||
help='Build windows portable'
|
||||
)
|
||||
parser.add_argument(
|
||||
'--unix-file-copy-paste',
|
||||
action='store_true',
|
||||
help='Build with unix file copy paste feature'
|
||||
)
|
||||
parser.add_argument(
|
||||
'--flatpak',
|
||||
action='store_true',
|
||||
@@ -172,8 +179,8 @@ def generate_build_script_for_docker():
|
||||
export VCPKG_ROOT=`pwd`/vcpkg
|
||||
git clone https://github.com/microsoft/vcpkg
|
||||
vcpkg/bootstrap-vcpkg.sh
|
||||
vcpkg/vcpkg install libvpx libyuv opus
|
||||
popd
|
||||
$VCPKG_ROOT/vcpkg install --x-install-root="$VCPKG_ROOT/installed"
|
||||
# build rustdesk
|
||||
./build.py --flutter --hwcodec
|
||||
''')
|
||||
@@ -185,6 +192,7 @@ def download_extract_features(features, res_dir):
|
||||
import re
|
||||
|
||||
proxy = ''
|
||||
|
||||
def req(url):
|
||||
if not proxy:
|
||||
return url
|
||||
@@ -196,9 +204,9 @@ def download_extract_features(features, res_dir):
|
||||
|
||||
for (feat, feat_info) in features.items():
|
||||
includes = feat_info['include'] if 'include' in feat_info and feat_info['include'] else []
|
||||
includes = [ re.compile(p) for p in includes ]
|
||||
includes = [re.compile(p) for p in includes]
|
||||
excludes = feat_info['exclude'] if 'exclude' in feat_info and feat_info['exclude'] else []
|
||||
excludes = [ re.compile(p) for p in excludes ]
|
||||
excludes = [re.compile(p) for p in excludes]
|
||||
|
||||
print(f'{feat} download begin')
|
||||
download_filename = feat_info['zip_url'].split('/')[-1]
|
||||
@@ -261,10 +269,10 @@ def external_resources(flutter, args, res_dir):
|
||||
|
||||
def get_features(args):
|
||||
features = ['inline'] if not args.flutter else []
|
||||
if windows:
|
||||
features.append('virtual_display_driver')
|
||||
if args.hwcodec:
|
||||
features.append('hwcodec')
|
||||
if args.gpucodec:
|
||||
features.append('gpucodec')
|
||||
if args.flutter:
|
||||
features.append('flutter')
|
||||
features.append('flutter_texture_render')
|
||||
@@ -272,6 +280,8 @@ def get_features(args):
|
||||
features.append('flatpak')
|
||||
if args.appimage:
|
||||
features.append('appimage')
|
||||
if args.unix_file_copy_paste:
|
||||
features.append('unix-file-copy-paste')
|
||||
print("features:", features)
|
||||
return features
|
||||
|
||||
@@ -311,6 +321,8 @@ def build_flutter_deb(version, features):
|
||||
system2('mkdir -p tmpdeb/etc/rustdesk/')
|
||||
system2('mkdir -p tmpdeb/etc/pam.d/')
|
||||
system2('mkdir -p tmpdeb/usr/share/rustdesk/files/systemd/')
|
||||
system2('mkdir -p tmpdeb/usr/share/icons/hicolor/256x256/apps/')
|
||||
system2('mkdir -p tmpdeb/usr/share/icons/hicolor/scalable/apps/')
|
||||
system2('mkdir -p tmpdeb/usr/share/applications/')
|
||||
system2('mkdir -p tmpdeb/usr/share/polkit-1/actions')
|
||||
system2('rm tmpdeb/usr/bin/rustdesk || true')
|
||||
@@ -319,7 +331,9 @@ def build_flutter_deb(version, features):
|
||||
system2(
|
||||
'cp ../res/rustdesk.service tmpdeb/usr/share/rustdesk/files/systemd/')
|
||||
system2(
|
||||
'cp ../res/128x128@2x.png tmpdeb/usr/share/rustdesk/files/rustdesk.png')
|
||||
'cp ../res/128x128@2x.png tmpdeb/usr/share/icons/hicolor/256x256/apps/rustdesk.png')
|
||||
system2(
|
||||
'cp ../res/scalable.svg tmpdeb/usr/share/icons/hicolor/scalable/apps/rustdesk.svg')
|
||||
system2(
|
||||
'cp ../res/rustdesk.desktop tmpdeb/usr/share/applications/rustdesk.desktop')
|
||||
system2(
|
||||
@@ -346,11 +360,14 @@ def build_flutter_deb(version, features):
|
||||
os.rename('rustdesk.deb', '../rustdesk-%s.deb' % version)
|
||||
os.chdir("..")
|
||||
|
||||
|
||||
def build_deb_from_folder(version, binary_folder):
|
||||
os.chdir('flutter')
|
||||
system2('mkdir -p tmpdeb/usr/bin/')
|
||||
system2('mkdir -p tmpdeb/usr/lib/rustdesk')
|
||||
system2('mkdir -p tmpdeb/usr/share/rustdesk/files/systemd/')
|
||||
system2('mkdir -p tmpdeb/usr/share/icons/hicolor/256x256/apps/')
|
||||
system2('mkdir -p tmpdeb/usr/share/icons/hicolor/scalable/apps/')
|
||||
system2('mkdir -p tmpdeb/usr/share/applications/')
|
||||
system2('mkdir -p tmpdeb/usr/share/polkit-1/actions')
|
||||
system2('rm tmpdeb/usr/bin/rustdesk || true')
|
||||
@@ -359,7 +376,9 @@ def build_deb_from_folder(version, binary_folder):
|
||||
system2(
|
||||
'cp ../res/rustdesk.service tmpdeb/usr/share/rustdesk/files/systemd/')
|
||||
system2(
|
||||
'cp ../res/128x128@2x.png tmpdeb/usr/share/rustdesk/files/rustdesk.png')
|
||||
'cp ../res/128x128@2x.png tmpdeb/usr/share/icons/hicolor/256x256/apps/rustdesk.png')
|
||||
system2(
|
||||
'cp ../res/scalable.svg tmpdeb/usr/share/icons/hicolor/scalable/apps/rustdesk.svg')
|
||||
system2(
|
||||
'cp ../res/rustdesk.desktop tmpdeb/usr/share/applications/rustdesk.desktop')
|
||||
system2(
|
||||
@@ -380,10 +399,12 @@ def build_deb_from_folder(version, binary_folder):
|
||||
os.rename('rustdesk.deb', '../rustdesk-%s.deb' % version)
|
||||
os.chdir("..")
|
||||
|
||||
|
||||
def build_flutter_dmg(version, features):
|
||||
if not skip_cargo:
|
||||
# set minimum osx build target, now is 10.14, which is the same as the flutter xcode project
|
||||
system2(f'MACOSX_DEPLOYMENT_TARGET=10.14 cargo build --features {features} --lib --release')
|
||||
system2(
|
||||
f'MACOSX_DEPLOYMENT_TARGET=10.14 cargo build --features {features} --lib --release')
|
||||
# copy dylib
|
||||
system2(
|
||||
"cp target/release/liblibrustdesk.dylib target/release/librustdesk.dylib")
|
||||
@@ -473,6 +494,7 @@ def main():
|
||||
system2('mv target/release/rustdesk.exe target/release/RustDesk.exe')
|
||||
pa = os.environ.get('P')
|
||||
if pa:
|
||||
# https://certera.com/kb/tutorial-guide-for-safenet-authentication-client-for-code-signing/
|
||||
system2(
|
||||
f'signtool sign /a /v /p {pa} /debug /f .\\cert.pfx /t http://timestamp.digicert.com '
|
||||
'target\\release\\rustdesk.exe')
|
||||
@@ -537,13 +559,6 @@ def main():
|
||||
'cp libsciter.dylib target/release/bundle/osx/RustDesk.app/Contents/MacOS/')
|
||||
# https://github.com/sindresorhus/create-dmg
|
||||
system2('/bin/rm -rf *.dmg')
|
||||
plist = "target/release/bundle/osx/RustDesk.app/Contents/Info.plist"
|
||||
txt = open(plist).read()
|
||||
with open(plist, "wt") as fh:
|
||||
fh.write(txt.replace("</dict>", """
|
||||
<key>LSUIElement</key>
|
||||
<string>1</string>
|
||||
</dict>"""))
|
||||
pa = os.environ.get('P')
|
||||
if pa:
|
||||
system2('''
|
||||
@@ -556,7 +571,8 @@ def main():
|
||||
codesign -s "Developer ID Application: {0}" --force --options runtime ./target/release/bundle/osx/RustDesk.app/Contents/MacOS/*
|
||||
codesign -s "Developer ID Application: {0}" --force --options runtime ./target/release/bundle/osx/RustDesk.app
|
||||
'''.format(pa))
|
||||
system2('create-dmg target/release/bundle/osx/RustDesk.app')
|
||||
system2(
|
||||
'create-dmg "RustDesk %s.dmg" "target/release/bundle/osx/RustDesk.app"' % version)
|
||||
os.rename('RustDesk %s.dmg' %
|
||||
version, 'rustdesk-%s.dmg' % version)
|
||||
if pa:
|
||||
@@ -576,15 +592,19 @@ def main():
|
||||
else:
|
||||
print('Not signed')
|
||||
else:
|
||||
# buid deb package
|
||||
# build deb package
|
||||
system2(
|
||||
'mv target/release/bundle/deb/rustdesk*.deb ./rustdesk.deb')
|
||||
system2('dpkg-deb -R rustdesk.deb tmpdeb')
|
||||
system2('mkdir -p tmpdeb/usr/share/rustdesk/files/systemd/')
|
||||
system2('mkdir -p tmpdeb/usr/share/icons/hicolor/256x256/apps/')
|
||||
system2('mkdir -p tmpdeb/usr/share/icons/hicolor/scalable/apps/')
|
||||
system2(
|
||||
'cp res/rustdesk.service tmpdeb/usr/share/rustdesk/files/systemd/')
|
||||
system2(
|
||||
'cp res/128x128@2x.png tmpdeb/usr/share/rustdesk/files/rustdesk.png')
|
||||
'cp res/128x128@2x.png tmpdeb/usr/share/icons/hicolor/256x256/apps/rustdesk.png')
|
||||
system2(
|
||||
'cp res/scalable.svg tmpdeb/usr/share/icons/hicolor/scalable/apps/rustdesk.svg')
|
||||
system2(
|
||||
'cp res/rustdesk.desktop tmpdeb/usr/share/applications/rustdesk.desktop')
|
||||
system2(
|
||||
|
||||
56
build.rs
@@ -41,7 +41,7 @@ fn build_manifest() {
|
||||
}
|
||||
}
|
||||
|
||||
fn install_oboe() {
|
||||
fn install_android_deps() {
|
||||
let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap();
|
||||
if target_os != "android" {
|
||||
return;
|
||||
@@ -49,6 +49,8 @@ fn install_oboe() {
|
||||
let mut target_arch = std::env::var("CARGO_CFG_TARGET_ARCH").unwrap();
|
||||
if target_arch == "x86_64" {
|
||||
target_arch = "x64".to_owned();
|
||||
} else if target_arch == "x86" {
|
||||
target_arch = "x86".to_owned();
|
||||
} else if target_arch == "aarch64" {
|
||||
target_arch = "arm64".to_owned();
|
||||
} else {
|
||||
@@ -66,62 +68,16 @@ fn install_oboe() {
|
||||
path.join("lib").to_str().unwrap()
|
||||
)
|
||||
);
|
||||
println!("cargo:rustc-link-lib=ndk_compat");
|
||||
println!("cargo:rustc-link-lib=oboe");
|
||||
println!("cargo:rustc-link-lib=oboe_wrapper");
|
||||
println!("cargo:rustc-link-lib=c++");
|
||||
println!("cargo:rustc-link-lib=OpenSLES");
|
||||
// I always got some strange link error with oboe, so as workaround, put oboe.cc into oboe src: src/common/AudioStreamBuilder.cpp
|
||||
// also to avoid libc++_shared not found issue, cp ndk's libc++_shared.so to jniLibs, e.g.
|
||||
// ./flutter_hbb/android/app/src/main/jniLibs/arm64-v8a/libc++_shared.so
|
||||
// let include = path.join("include");
|
||||
//cc::Build::new().file("oboe.cc").include(include).compile("oboe_wrapper");
|
||||
}
|
||||
|
||||
#[cfg(feature = "flutter")]
|
||||
fn gen_flutter_rust_bridge() {
|
||||
if !std::env::var("RUN_FFIGEN").is_ok() {
|
||||
return;
|
||||
}
|
||||
use lib_flutter_rust_bridge_codegen::{
|
||||
config_parse, frb_codegen, get_symbols_if_no_duplicates, RawOpts,
|
||||
};
|
||||
let llvm_path = match std::env::var("LLVM_HOME") {
|
||||
Ok(path) => Some(vec![path]),
|
||||
Err(_) => None,
|
||||
};
|
||||
// Tell Cargo that if the given file changes, to rerun this build script.
|
||||
println!("cargo:rerun-if-changed=src/flutter_ffi.rs");
|
||||
// Options for frb_codegen
|
||||
let raw_opts = RawOpts {
|
||||
// Path of input Rust code
|
||||
rust_input: vec!["src/flutter_ffi.rs".to_string()],
|
||||
// Path of output generated Dart code
|
||||
dart_output: vec!["flutter/lib/generated_bridge.dart".to_string()],
|
||||
// Path of output generated C header
|
||||
c_output: Some(vec!["flutter/macos/Runner/bridge_generated.h".to_string()]),
|
||||
/// Path to the installed LLVM
|
||||
llvm_path,
|
||||
// for other options use defaults
|
||||
..Default::default()
|
||||
};
|
||||
// get opts from raw opts
|
||||
let configs = config_parse(raw_opts);
|
||||
// generation of rust api for ffi
|
||||
let all_symbols = get_symbols_if_no_duplicates(&configs).unwrap();
|
||||
for config in configs.iter() {
|
||||
frb_codegen(config, &all_symbols).unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
hbb_common::gen_version();
|
||||
install_oboe();
|
||||
// there is problem with cfg(target_os) in build.rs, so use our workaround
|
||||
// let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap();
|
||||
// if target_os == "android" || target_os == "ios" {
|
||||
#[cfg(feature = "flutter")]
|
||||
gen_flutter_rust_bridge();
|
||||
// return;
|
||||
// }
|
||||
install_android_deps();
|
||||
#[cfg(all(windows, feature = "inline"))]
|
||||
build_manifest();
|
||||
#[cfg(windows)]
|
||||
|
||||
101
docs/CODE_OF_CONDUCT-JP.md
Normal file
@@ -0,0 +1,101 @@
|
||||
|
||||
# コントリビューター規約 行動規範
|
||||
|
||||
## 私たちの誓い
|
||||
|
||||
私たちは、メンバー、貢献者、リーダーとして、年齢、体格、目に見える・見えない障害、
|
||||
民族性、性の特徴、性自認と表現、経験のレベル、教育、社会経済的地位、国籍、個人の外見、
|
||||
人種、宗教、性的自認と指向に関係なく、誰もがハラスメントのないコミュニティに参加できるようにすることを誓います。
|
||||
|
||||
私たちは、開かれた、歓迎された、多様で、包容力のある、健全な地域社会に貢献するように行動し、交流することを誓います。
|
||||
|
||||
## 私たちの基準
|
||||
|
||||
地域社会にとって好ましい環境にコントリビュートする行動の例には、以下のようなものがある:
|
||||
|
||||
* 他者への共感と優しさ
|
||||
* 異なる意見、視点、経験を尊重すること
|
||||
* 建設的なフィードバックを与え、潔く受け入れること
|
||||
* 私たちの過ちによって影響を受けた人々に責任を受け入れ、謝罪し、経験から学ぶこと
|
||||
* 私たち個人にとってだけでなく、地域社会全体にとって何が最善であるかに焦点を合わせること
|
||||
|
||||
許されない行為の例:
|
||||
|
||||
* 性的な言葉やイメージの使用、性的な注目や誘いかけ
|
||||
* 荒らし、侮辱的または軽蔑的なコメント、個人的または政治的な攻撃
|
||||
* 公的または私的な嫌がらせ
|
||||
* 明示的な許可なく、他人の住所や電子メールアドレスなどの個人情報を公開すること
|
||||
* 職業上不適切と見なされるその他の行為
|
||||
|
||||
## 執行責任
|
||||
|
||||
コミュニティリーダーは、許容される行動の基準を明確にし、実施する責任があり、
|
||||
不適切、脅迫的、攻撃的、または有害と判断される行動に対しては、適切かつ公正な是正措置をとります
|
||||
|
||||
コミュニティリーダーは、本行動規範に沿わないコメント、コミット、コード、ウィキ編集、
|
||||
課題、その他の貢献を削除、編集、拒否する権利と責任を有し、適切な場合にはモデレーション決定の理由を伝えます。
|
||||
|
||||
## スコープ
|
||||
|
||||
この行動規範は、すべてのコミュニティスペースで適用され、また個人が公的なスペースでコミュニティを公式に代表している場合にも適用されます。
|
||||
当コミュニティを代表する例としては、公式 E メールアドレスの使用、公式ソーシャルメディアアカウントによる投稿、
|
||||
オンラインまたはオフラインのイベントでの任命された代表としての行動などが挙げられます。
|
||||
|
||||
## 施行
|
||||
|
||||
虐待、ハラスメント、その他容認できない行為があった場合は、[info@rustdesk.com](mailto:info@rustdesk.com) の
|
||||
執行担当コミュニティリーダーに報告することができる。
|
||||
すべての苦情は、迅速かつ公正に検討・調査されます。
|
||||
|
||||
すべての地域社会の指導者は、いかなる事件の報告者のプライバシーと安全を尊重する義務がある。
|
||||
|
||||
## 執行ガイドライン
|
||||
|
||||
コミュニティリーダーは、本行動規範に違反すると判断した行為に対する結果を決定する際、
|
||||
以下の「コミュニティへの影響に関するガイドライン」に従います:
|
||||
|
||||
### 1. 修正
|
||||
|
||||
**コミュニティへの影響**: 不適切な言葉の使用、またはプロフェッショナルでない、あるいは地域社会で歓迎されないとみなされるその他の行動。
|
||||
|
||||
**結果**: コミュニティリーダーからの私的な書面による警告。違反の性質と、
|
||||
なぜその行為が不適切であったのかについての説明を明確にする。公的な謝罪が要求される場合もある。
|
||||
|
||||
### 2. 警告
|
||||
|
||||
**コミュニティへの影響**: 単一の出来事または一連の行動による違反。
|
||||
|
||||
**結果**: 行動を続けた場合の結果を伴う警告。一定期間、行動規範の実施者との勝手な交流を含め、
|
||||
関係者と交流しないこと。これには、ソーシャルメディアなどの外部チャンネルだけでなく、
|
||||
コミュニティスペースでの交流を避けることも含まれます。これらの条件に違反した場合、一時的または恒久的に追放される可能性があります。
|
||||
|
||||
### 3. 一時的な禁止
|
||||
|
||||
**コミュニティへの影響**: 継続的な不適切な行動を含む、コミュニティ基準に対する重大な違反。
|
||||
|
||||
**結果**: 一定期間、地域社会とのあらゆる交流や公的なコミュニケーションを一時的に禁止すること。
|
||||
この期間中は、行動規範を執行する人々との未承諾の交流を含め、関係者との公私にわたる交流は許されない。
|
||||
これらの条件に違反した場合、永久禁止となる可能性があります。
|
||||
|
||||
### 4. 永久禁止
|
||||
|
||||
**コミュニティへの影響**: 継続的な不適切な行動、個人に対する嫌がらせ、
|
||||
または個人クラスに対する攻撃や中傷など、地域社会の基準に対する違反のパターンを示すこと。
|
||||
|
||||
**結果**: コミュニティ内でのあらゆる公的交流の永久禁止。
|
||||
|
||||
## 帰属
|
||||
|
||||
この行動規範は、[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0] に掲載されている
|
||||
[コントリビューター規約][ホームページ]、バージョン 2.0 から引用したものです。
|
||||
|
||||
コミュニティインパクトガイドラインは、[Mozilla's code of conduct enforcement ladder][Mozilla CoC] に触発されました。
|
||||
|
||||
この行動規範に関するよくある質問については、[https://www.contributor-covenant.org/faq][FAQ] の FAQ をご覧ください。
|
||||
翻訳は [https://www.contributor-covenant.org/translations][翻訳] にあります。
|
||||
|
||||
[ホームページ]: https://www.contributor-covenant.org
|
||||
[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
|
||||
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||
[FAQ]: https://www.contributor-covenant.org/faq
|
||||
[翻訳]: https://www.contributor-covenant.org/translations
|
||||
89
docs/CODE_OF_CONDUCT-TR.md
Normal file
@@ -0,0 +1,89 @@
|
||||
# Katkıda Bulunanların Davranış Kuralları
|
||||
|
||||
## Taahhüdümüz
|
||||
|
||||
Biz üyeler, katkıda bulunanlar ve liderler olarak, yaş, beden büyüklüğü, görünür veya görünmez engellilik, etnik köken, cinsiyet özellikleri, cinsiyet kimliği ve ifadesi, deneyim seviyesi, eğitim, sosyo-ekonomik durum, milliyet, kişisel görünüm, ırk, din veya cinsel kimlik ve yönelim ayrımı gözetmeksizin herkes için topluluğumuzdaki katılımı taciz içermeyen bir deneyim haline getirmeyi taahhüt ederiz.
|
||||
|
||||
Açık, hoşgörülü, çeşitli, kapsayıcı ve sağlıklı bir topluluğa katkıda bulunacak şekillerde hareket etmeyi ve etkileşimde bulunmayı taahhüt ederiz.
|
||||
|
||||
## Standartlarımız
|
||||
|
||||
Topluluğumuz için olumlu bir ortam yaratmaya katkıda bulunan davranış örnekleri şunlardır:
|
||||
|
||||
* Diğer insanlara empati ve nezaket göstermek
|
||||
* Farklı görüşlere, bakış açılarına ve deneyimlere saygılı olmak
|
||||
* Yapıcı eleştiriyi vermek ve zarifçe kabul etmek
|
||||
* Hatalarımızdan etkilenenlere sorumluluk kabul etmek, özür dilemek ve deneyimden öğrenmek
|
||||
* Sadece bireyler olarak değil, aynı zamanda genel topluluk için en iyisi üzerine odaklanmak
|
||||
|
||||
Kabul edilemez davranış örnekleri şunları içerir:
|
||||
|
||||
* Cinselleştirilmiş dil veya imgelerin kullanımı ve cinsel ilgi veya herhangi bir türdeki yaklaşımlar
|
||||
* Trollük, aşağılayıcı veya hakaret içeren yorumlar ve kişisel veya siyasi saldırılar
|
||||
* Kamuoyu veya özel taciz
|
||||
* Başkalarının fiziksel veya e-posta adresi gibi özel bilgilerini, açık izinleri olmadan yayınlamak
|
||||
* Profesyonel bir ortamda makul bir şekilde uygunsuz kabul edilebilecek diğer davranışlar
|
||||
|
||||
## Uygulama Sorumlulukları
|
||||
|
||||
Topluluk liderleri, kabul edilebilir davranış standartlarımızı açıklığa kavuşturmak ve uygulamakla sorumludur ve uygunsuz, tehditkar, saldırgan veya zarar verici herhangi bir davranışa yanıt olarak uygun ve adil düzeltici önlemler alacaklardır.
|
||||
|
||||
Topluluk liderleri, bu Davranış Kurallarına uyumlu olmayan yorumları, taahhütlerini veya kodu, wiki düzenlemelerini, sorunları ve diğer katkıları kaldırma, düzenleme veya reddetme hakkına sahiptir. Denetim kararlarının nedenlerini uygun olduğunda ileteceklerdir.
|
||||
|
||||
## Kapsam
|
||||
|
||||
Bu Davranış Kuralları, tüm topluluk alanlarında geçerlidir ve aynı zamanda birey resmi olarak topluluğu halka açık alanlarda temsil ettiğinde de geçerlidir. Topluluğumuzu temsil etme örnekleri, resmi bir e-posta adresi kullanmak, resmi bir sosyal medya hesabı üzerinden gönderi yapmak veya çevrimiçi veya çevrimdışı bir etkinlikte atanmış bir temsilci olarak hareket etmeyi içerir.
|
||||
|
||||
## Uygulama
|
||||
|
||||
Taciz edici, rahatsız edici veya başka türlü kabul edilemez davranış örnekleri, [info@rustdesk.com](mailto:info@rustdesk.com) adresindeki uygulama sorumlularına bildirilebilir. Tüm şikayetler hızlı ve adil bir şekilde incelenecek ve araştırılacaktır.
|
||||
|
||||
Tüm topluluk liderleri, olayın raporlayıcısının gizliliğine ve güvenliğine saygı gösterme yükümlülüğündedir.
|
||||
|
||||
## Uygulama Kılavuzları
|
||||
|
||||
Topluluk liderleri, bu Davranış Kurallarını ihlal olarak değerlendirdikleri herhangi bir eylem için bu Topluluk Etkisi Kılavuzlarını izleyeceklerdir:
|
||||
|
||||
### 1. Düzeltme
|
||||
|
||||
**Topluluk Etkisi**: Topluluk içinde profesyonel veya hoşgörülü olmayan uygun olmayan dil veya diğer davranışların kullanımı.
|
||||
|
||||
**Sonuç**: Topluluk liderlerinden özel ve yazılı bir uyarı almak, ihlalin niteliği ve davranışın nedeninin açıklığa kavuşturulması. Bir kamu özrü istenebilir.
|
||||
|
||||
### 2. Uyarı
|
||||
|
||||
**Topluluk Etkisi**: Tek bir olay veya dizi aracılığıyla bir ihlal.
|
||||
|
||||
**Sonuç**: Devam eden davranış için sonuçları olan bir uyarı. Topluluk liderleri de dahil olmak üzere ihlalle ilgili kişilerle etkileşim, belirli bir süre boyunca önerilmez. Bu, topluluk alanlarında ve sosyal medya gibi harici kanallarda etkileşimleri içerir. Bu koşulları ihlal etmek geçici veya kalıcı bir yasağa yol açabilir.
|
||||
|
||||
### 3. Geçici Yasak
|
||||
|
||||
**Topluluk Etkisi**: Sürekli uygunsuz davranış da dahil olmak üzere topluluk standartlarının ciddi bir ihlali.
|
||||
|
||||
**Sonuç**: Belirli bir süre için toplulukla herhangi bir türdeki etkileşim veya halka açık iletişimden geçici bir yasak. Bu dönem boyunca, toplul
|
||||
|
||||
ukla veya uygulama kurallarını uygulayanlarla her türlü kamuoyu veya özel etkileşim izin verilmez. Bu koşulları ihlal etmek geçici veya kalıcı bir yasağa yol açabilir.
|
||||
|
||||
### 4. Kalıcı Yasak
|
||||
|
||||
**Topluluk Etkisi**: Topluluk standartlarının ihlalinde sürekli bir desen sergilemek, bireye sürekli olarak uygun olmayan davranışlarda bulunmak, bir bireye tacizde bulunmak veya birey sınıflarına karşı saldırganlık veya aşağılama yapmak.
|
||||
|
||||
**Sonuç**: Topluluk içinde her türlü halka açık etkileşimden kalıcı bir yasak.
|
||||
|
||||
## Atıf
|
||||
|
||||
Bu Davranış Kuralları, [Contributor Covenant][anasayfa], 2.0 sürümünden uyarlanmıştır ve
|
||||
[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0] adresinde bulunmaktadır.
|
||||
|
||||
Topluluk Etkisi Kılavuzları,
|
||||
[Mozilla'nın davranış kuralları uygulama merdiveni][Mozilla DK] tarafından ilham alınarak oluşturulmuştur.
|
||||
|
||||
Bu davranış kuralları hakkında yaygın soruların cevapları için, SSS'ye göz atın:
|
||||
[https://www.contributor-covenant.org/faq][SSS]. Çeviriler,
|
||||
[https://www.contributor-covenant.org/translations][çeviriler] adresinde bulunabilir.
|
||||
|
||||
[anasayfa]: https://www.contributor-covenant.org
|
||||
[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
|
||||
[Mozilla DK]: https://github.com/mozilla/diversity
|
||||
[SSS]: https://www.contributor-covenant.org/faq
|
||||
[çeviriler]: https://www.contributor-covenant.org/translations
|
||||
31
docs/CONTRIBUTING-ID.md
Normal file
@@ -0,0 +1,31 @@
|
||||
# Berkontribusi dalam pengembangan RustDesk
|
||||
|
||||
RustDesk mengajak semua orang untuk ikut berkontribusi. Berikut ini adalah panduan jika kamu sedang mempertimbangkan untuk memberikan bantuan kepada kami:
|
||||
|
||||
## Kontirbusi
|
||||
|
||||
Untuk melakukan kontribusi pada RustDesk atau dependensinya, sebaiknya dilakukan dalam bentuk pull request di GitHub. Setiap permintaan pull request akan ditinjau oleh kontributor utama atau seseorang yang memiliki wewenang untuk menggabungkan perubahan kode, baik yang sudah dimasukkan ke dalam struktur utama ataupun memberikan umpan balik untuk perubahan yang akan diperlukan. Setiap kontribusi harus sesuai dengan format ini, juga termasuk yang berasal dari kontributor utama.
|
||||
|
||||
Apabila kamu ingin mengatasi sebuah masalah yang sudah ada di daftar issue, harap klaim terlebih dahulu dengan memberikan komentar pada GitHub issue yang ingin kamu kerjakan. Hal ini dilakukan untuk mencegah terjadinya duplikasi dari kontributor pada daftar issue yang sama.
|
||||
|
||||
## Pemeriksaan Pull Request
|
||||
|
||||
- Branch yang menjadi acuan adalah branch master dari repositori utama dan, jika diperlukan, lakukan rebase ke branch master yang terbaru sebelum kamu mengirim pull request. Apabila terdapat masalah kita melakukan proses merge ke branch master kemungkinan kamu akan diminta untuk melakukan rebase pada perubahan yang sudah dibuat.
|
||||
|
||||
- Sebaiknya buatlah commit seminimal mungkin, sambil memastikan bahwa setiap commit yang dibuat sudah benar (contohnya, setiap commit harus bisa di kompilasi dan berhasil melewati tahap test).
|
||||
|
||||
- Setiap commit harus disertai dengan tanda tangan Sertifikat Asal Pengembang (Developer Certificate of Origin) (<http://developercertificate.org>), yang mengindikasikan bahwa kamu (and your employer if applicable) bersedia untuk patuh terhadap persyaratan dari [lisensi projek](../LICENCE). Di git bash, ini adalah opsi parameter `-s` pada `git commit`
|
||||
|
||||
- Jika perubahan yang kamu buat tidak mendapat tinjauan atau kamu membutuhkan orang tertentu untuk meninjaunya, kamu bisa @-reply seorang reviewer meminta peninjauan dalam permintaan pull request atau komentar, atau kamu bisa meminta tinjauan melalui [email](mailto:info@rustdesk.com).
|
||||
|
||||
- Sertakan test yang relevan terhadap bug atau fitur baru yang sudah dikerjakan.
|
||||
|
||||
Untuk instruksi Git yang lebih lanjut, cek disini [GitHub workflow 101](https://github.com/servo/servo/wiki/GitHub-workflow).
|
||||
|
||||
## Tindakan
|
||||
|
||||
<https://github.com/rustdesk/rustdesk/blob/master/docs/CODE_OF_CONDUCT-ID.md>
|
||||
|
||||
## Komunikasi
|
||||
|
||||
Kontributor RustDesk sering berkunjung ke [Discord](https://discord.gg/nDceKgxnkV).
|
||||
37
docs/CONTRIBUTING-IT.md
Normal file
@@ -0,0 +1,37 @@
|
||||
# Contribuzione a RustDesk
|
||||
|
||||
RustDesk accoglie con favore il contributo di tutti.
|
||||
Ecco le linee guida se stai pensando di aiutarci.
|
||||
|
||||
## Contribuzione
|
||||
|
||||
I contributi a RustDesk o alle sue dipendenze dovrebbero essere forniti sotto forma di richieste pull GitHub.
|
||||
Ogni richiesta pull verr<72> esaminata da un collaboratore principale (qualcuno con il permesso di applicare) ed <20> abilitato all'uso dell'albero principale o dare un feedback per le modifiche che sarebbero necessarie.
|
||||
Tutti i contributi dovrebbero seguire questo formato, anche quelli dei contributori principali.
|
||||
|
||||
Se desideri lavorare su un problema, rivendicalo prima commentando
|
||||
il problema di GitHub su cui vuoi lavorare.
|
||||
Questo per evitare duplicati sforzi dei contributori sullo stesso problema.
|
||||
|
||||
## Elenco di controllo delle richieste pull
|
||||
|
||||
- Branch del master branch e, se necessario, rebase al master attuale branch prima di inviare la richiesta pull.
|
||||
Se l'unione non <20> in mod pulito con il master ti potrebbe essere chiesto di effettuare il rebase delle modifiche.
|
||||
|
||||
- Le modifiche dovrebbero essere le pi<70> piccole possibile, assicurando al tempo stesso che ogni modifica sia corretta in modo indipendente (ovvero, ogni modifica dovrebbe essere compilabile e superare i test).
|
||||
|
||||
- Le modifiche devono essere accompagnati da un certificato di origine per sviluppatori firmato (http://developercertificate.org), che indica che tu (e il tuo datore di lavoro se applicabile) accetti di essere vincolato dai termini della [licenza progetto](../LICENCE). In git, questa <20> l'opzione `-s` di `git commit`
|
||||
|
||||
- Se la tua patch non viene esaminata o hai bisogno che una persona specifica la esamini, puoi @-rispondere ad un revisore chiedendo una revisione nella richiesta pull o un commento, oppure puoi chiedere una revisione tramite [email](mailto:info@rustdesk.com).
|
||||
|
||||
- Aggiungi test relativi al bug corretto o alla nuova funzionalit<69>.
|
||||
|
||||
Per istruzioni specifiche su git, vedi [Workflow GitHub - 101](https://github.com/servo/servo/wiki/GitHub-workflow).
|
||||
|
||||
## Condotta
|
||||
|
||||
https://github.com/rustdesk/rustdesk/blob/master/docs/CODE_OF_CONDUCT-IT.md
|
||||
|
||||
## Comunicazioni
|
||||
|
||||
I contributori di RustDesk frequentano [Discord](https://discord.gg/nDceKgxnkV).
|
||||
41
docs/CONTRIBUTING-JP.md
Normal file
@@ -0,0 +1,41 @@
|
||||
# RustDesk へのコントリビュート
|
||||
|
||||
RustDesk は皆さんからのコントリビュートを歓迎します。ご協力いただける方のガイドラインは
|
||||
以下の通りです:
|
||||
|
||||
## コントリビューション
|
||||
|
||||
RustDesk またはその依存関係へのコントリビュートは、GitHub のプルリクエストの形で行ってください。
|
||||
それぞれのプルリクエストは、コアコントリビューター(パッチの適用を許可されている人)によってレビューされ、
|
||||
メインツリーに適用されるか、必要な変更についてのフィードバックが与えられます。
|
||||
コアコントリビューターからのものであっても、すべてのコントリビューターはこのフォーマットに従うべきです。
|
||||
|
||||
ある issue に取り組みたい場合は、GitHub の issue にコメントすることで、まずその対応を主張してください。
|
||||
これは、同じ issue に対するコントリビューターの重複作業を防ぐためです。
|
||||
|
||||
## プルリクエストのチェックリスト
|
||||
|
||||
- master ブランチからブランチし、必要であればプルリクエストを提出する前に現在の master ブランチにリベースしてください。
|
||||
master と正しくマージできない場合、変更をリベースするよう求められる可能性があります。
|
||||
|
||||
- コミットは、各コミットが独立して正しい(すなわち、各コミットがコンパイルされ、テストに合格する)ことを保証しながら、
|
||||
可能な限り小さくすべきです。
|
||||
|
||||
- コミットには、Developer Certificate of Origin (http://developercertificate.org) の sign-off を添えてください。
|
||||
これは、あなた(および該当する場合はあなたの雇用主)が [プロジェクトのライセンス](../LICENCE) の条項に拘束されることに
|
||||
同意していることを示すものです。git では、これは `git commit` の `-s` オプションを使います。
|
||||
|
||||
- もしあなたのパッチがレビューされなかったり、特定の人にレビューしてもらう必要がある場合、
|
||||
プルリクエストやコメントでレビューを依頼するレビュアーに@返信したり、[email](mailto:info@rustdesk.com) でレビューを依頼することができます。
|
||||
|
||||
- 修正したバグや新機能に関連するテストを追加する。
|
||||
|
||||
具体的なgitの手順については、[GitHub workflow 101](https://github.com/servo/servo/wiki/GitHub-workflow)を参照してください。
|
||||
|
||||
## 行動規範
|
||||
|
||||
https://github.com/rustdesk/rustdesk/blob/master/docs/CODE_OF_CONDUCT.md
|
||||
|
||||
## コミュニケーション
|
||||
|
||||
RustDesk のコントリビューターは、[Discord](https://discord.gg/nDceKgxnkV) を良く使っています。
|
||||
31
docs/CONTRIBUTING-TR.md
Normal file
@@ -0,0 +1,31 @@
|
||||
# RustDesk'a Katkı Sağlamak
|
||||
|
||||
RustDesk, herkesten katkıyı memnuniyetle karşılar. Eğer bize yardımcı olmayı düşünüyorsanız, işte rehberlik eden kurallar:
|
||||
|
||||
## Katkılar
|
||||
|
||||
RustDesk veya bağımlılıklarına yapılan katkılar, GitHub pull istekleri şeklinde yapılmalıdır. Her bir pull isteği, çekirdek katkıcı tarafından gözden geçirilecek (yamaları kabul etme izni olan biri) ve ana ağaca kabul edilecek veya gerekli değişiklikler için geri bildirim verilecektir. Tüm katkılar bu formata uymalıdır, çekirdek katkıcılardan gelenler bile.
|
||||
|
||||
Eğer bir konu üzerinde çalışmak isterseniz, önce üzerinde çalışmak istediğinizi belirten bir yorum yaparak konuyu talep ediniz. Bu, katkı sağlayanların aynı konuda çift çalışmasını engellemek içindir.
|
||||
|
||||
## Pull İstek Kontrol Listesi
|
||||
|
||||
- Master dalından dallandırın ve gerekiyorsa pull isteğinizi göndermeden önce mevcut master dalına rebase yapın. Eğer master ile temiz bir şekilde birleşmezse, değişikliklerinizi rebase yapmanız istenebilir.
|
||||
|
||||
- Her bir commit mümkün olduğunca küçük olmalıdır, ancak her commit'in bağımsız olarak doğru olduğundan emin olun (örneğin, her commit derlenebilir ve testleri geçmelidir).
|
||||
|
||||
- Commit'ler, bir Geliştirici Sertifikası ile desteklenmelidir (http://developercertificate.org). Bu, [proje lisansının](../LICENCE) koşullarına uymayı kabul ettiğinizi gösteren bir onaydır. Git'te bunu `git commit` seçeneği olarak `-s` seçeneği ile yapabilirsiniz.
|
||||
|
||||
- Yamalarınız gözden geçirilmiyorsa veya belirli bir kişinin gözden geçirmesine ihtiyacınız varsa, çekme isteği veya yorum içinde bir gözden geçirmeyi istemek için bir inceleyiciyi @etiketleyebilir veya inceleme için [e-posta](mailto:info@rustdesk.com) ile talep edebilirsiniz.
|
||||
|
||||
- Düzelttiğiniz hatanın veya eklediğiniz yeni özelliğin ilgili testlerini ekleyin.
|
||||
|
||||
Daha spesifik git talimatları için, [GitHub iş akışı 101](https://github.com/servo/servo/wiki/GitHub-workflow)'e bakınız.
|
||||
|
||||
## Davranış
|
||||
|
||||
https://github.com/rustdesk/rustdesk/blob/master/docs/CODE_OF_CONDUCT-TR.md
|
||||
|
||||
## İletişim
|
||||
|
||||
RustDesk katkı sağlayıcıları, [Discord](https://discord.gg/nDceKgxnkV) kanalını sık sık ziyaret ederler.
|
||||
14
docs/DEVCONTAINER-IT.md
Normal file
@@ -0,0 +1,14 @@
|
||||
|
||||
Dopo l'avvio di devcontainer nel contenitore docker, viene creato un binario linux in modalità debug.
|
||||
|
||||
Attualmente devcontainer consente creazione build Linux e Android sia in modalità debug che in modalità rilascio.
|
||||
|
||||
Di seguito è riportata la tabella dei comandi da eseguire dalla root del progetto per la creazione di build specifiche.
|
||||
|
||||
Comando|Tipo build|Modo
|
||||
-|-|-|
|
||||
`.devcontainer/build.sh --debug linux`|Linux|debug
|
||||
`.devcontainer/build.sh --release linux`|Linux|release
|
||||
`.devcontainer/build.sh --debug android`|android-arm64|debug
|
||||
`.devcontainer/build.sh --release android`|android-arm64|release
|
||||
|
||||
14
docs/DEVCONTAINER-JP.md
Normal file
@@ -0,0 +1,14 @@
|
||||
|
||||
docker コンテナで devcontainer を起動すると、デバッグモードの linux バイナリが作成されます。
|
||||
|
||||
現在 devcontainer では、Linux と android のビルドをデバッグモードとリリースモードの両方で提供しています。
|
||||
|
||||
以下は、特定のビルドを作成するためにプロジェクトのルートから実行するコマンドの表になります。
|
||||
|
||||
コマンド|ビルド タイプ|モード
|
||||
-|-|-|
|
||||
`.devcontainer/build.sh --debug linux`|Linux|debug
|
||||
`.devcontainer/build.sh --release linux`|Linux|release
|
||||
`.devcontainer/build.sh --debug android`|android-arm64|debug
|
||||
`.devcontainer/build.sh --release android`|android-arm64|release
|
||||
|
||||
12
docs/DEVCONTAINER-TR.md
Normal file
@@ -0,0 +1,12 @@
|
||||
Docker konteynerinde devcontainer'ın başlatılmasından sonra, hata ayıklama modunda bir Linux ikili dosyası oluşturulur.
|
||||
|
||||
Şu anda devcontainer, hata ayıklama ve sürüm modunda hem Linux hem de Android derlemeleri sunmaktadır.
|
||||
|
||||
Aşağıda, belirli derlemeler oluşturmak için projenin kökünden çalıştırılması gereken komutlar yer almaktadır.
|
||||
|
||||
Komut | Derleme Türü | Mod
|
||||
-|-|-
|
||||
`.devcontainer/build.sh --debug linux` | Linux | hata ayıklama
|
||||
`.devcontainer/build.sh --release linux` | Linux | sürüm
|
||||
`.devcontainer/build.sh --debug android` | Android-arm64 | hata ayıklama
|
||||
`.devcontainer/build.sh --release android` | Android-arm64 | sürüm
|
||||
@@ -33,7 +33,6 @@
|
||||
| الموقع | المورد | المواصفات |
|
||||
| --------- | ------------- | ------------------ |
|
||||
| Germany | Hetzner | 2 vCPU / 4GB RAM |
|
||||
| Germany | Codext | 4 vCPU / 8GB RAM |
|
||||
| Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4 GB RAM |
|
||||
|
||||
## التبعيات
|
||||
@@ -119,10 +118,6 @@ mv libsciter-gtk.so target/debug
|
||||
VCPKG_ROOT=$HOME/vcpkg cargo run
|
||||
```
|
||||
|
||||
### X11 (Xorg) إلى Wayland تغيير
|
||||
|
||||
افتراضية GNOME session ك Xorg إتبع [هذه](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) الخطوات لإعداد Wayland لا تدعم RustDesk
|
||||
|
||||
## Docker طريقة البناء باستخدام
|
||||
|
||||
ابدأ باستنساخ المستودع وبناء الكونتاينر:
|
||||
|
||||
@@ -6,10 +6,10 @@
|
||||
<a href="#file-structure">Struktura</a> •
|
||||
<a href="#snapshot">Ukázky</a><br>
|
||||
[<a href="../README.md">English</a>] | [<a href="README-UA.md">Українська</a>] | [<a href="README-ZH.md">中文</a>] | [<a href="README-HU.md">Magyar</a>] | [<a href="README-ES.md">Español</a>] | [<a href="README-FA.md">فارسی</a>] | [<a href="README-FR.md">Français</a>] | [<a href="README-DE.md">Deutsch</a>] | [<a href="README-PL.md">Polski</a>] | [<a href="README-ID.md">Indonesian</a>] | [<a href="README-FI.md">Suomi</a>] | [<a href="README-ML.md">മലയാളം</a>] | [<a href="README-JP.md">日本語</a>] | [<a href="README-NL.md">Nederlands</a>] | [<a href="README-IT.md">Italiano</a>] | [<a href="README-RU.md">Русский</a>] | [<a href="README-PTBR.md">Português (Brasil)</a>] | [<a href="README-EO.md">Esperanto</a>] | [<a href="README-KR.md">한국어</a>] | [<a href="README-AR.md">العربي</a>] | [<a href="README-VN.md">Tiếng Việt</a>] | [<a href="README-GR.md">Ελληνικά</a>]<br>
|
||||
<b>Potřebujeme Vaši pomoc s překláním textů tohoto ČTIMNE, <a href="https://github.com/rustdesk/rustdesk/tree/master/src/lang">uživatelského rozhraní aplikace RustDesk</a> a <a href="https://github.com/rustdesk/doc.rustdesk.com">dokumentace k ní</a> do vašeho jazyka</b>
|
||||
<b>Potřebujeme Vaši pomoc s překladem tohoto README, <a href="https://github.com/rustdesk/rustdesk/tree/master/src/lang">uživatelského rozhraní aplikace RustDesk</a> a <a href="https://github.com/rustdesk/doc.rustdesk.com">dokumentace k ní</a> do vašeho jazyka</b>
|
||||
</p>
|
||||
|
||||
Dopisujte si s námi: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk)
|
||||
Popovídejte si s námi: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk)
|
||||
|
||||
|
||||
[](https://ko-fi.com/I2I04VU09)
|
||||
@@ -28,7 +28,6 @@ Níže jsou uvedeny servery zdarma k vašemu použití (údaje se mohou v čase
|
||||
| umístění | dodavatel | parametry |
|
||||
| --------- | ------------- | ------------------ |
|
||||
| Germany | Hetzner | 2 vCPU / 4GB RAM |
|
||||
| Germany | Codext | 4 vCPU / 8GB RAM |
|
||||
| Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4 GB RAM |
|
||||
|
||||
## Softwarové součásti, na kterých závisí
|
||||
@@ -45,7 +44,7 @@ Varianta pro mobilní platformy používá aplikační rámec (framework) Flutte
|
||||
|
||||
- Připravte si vývojové prostředí pro jazyky Rust a C++
|
||||
|
||||
- Nainstalujte [vcpkg](https://github.com/microsoft/vcpkg), a nastavte správně proměnnou prostsředí `VCPKG_ROOT`
|
||||
- Nainstalujte [vcpkg](https://github.com/microsoft/vcpkg), a správně nastavte proměnnou prostředí `VCPKG_ROOT`
|
||||
|
||||
- Windows: vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static
|
||||
- Linux/MacOS: vcpkg install libvpx libyuv opus aom
|
||||
@@ -112,10 +111,6 @@ mv libsciter-gtk.so target/debug
|
||||
VCPKG_ROOT=$HOME/vcpkg cargo run
|
||||
```
|
||||
|
||||
### Změna z Wayland na X11 (Xorg)
|
||||
|
||||
RustDesk (zatím) nepodporuje zobrazovací server Wayland. Jak nastavit Xorg jako výchozí pro relace v prostředí GNOME naleznete [zde](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/).
|
||||
|
||||
## Jak sestavit prostřednictvím Docker kontejnerizace
|
||||
|
||||
Začněte tím, že si naklonujete tento repozitář a sestavíte docker kontejner:
|
||||
@@ -132,7 +127,7 @@ Poté pokaždé, když bude třeba aplikaci sestavit, spusťte následující p
|
||||
docker run --rm -it -v $PWD:/home/user/rustdesk -v rustdesk-git-cache:/home/user/.cargo/git -v rustdesk-registry-cache:/home/user/.cargo/registry -e PUID="$(id -u)" -e PGID="$(id -g)" rustdesk-builder
|
||||
```
|
||||
|
||||
Všimněte si, že prvotní sestavení může trvat déle (než se do mezipaměti uloží veškeré softwarové součásti, které jsou potřeba) – následná opakování už budou rychlejší. Dále, pokud potřebujete příkazu pro sestavení zadat nějaké argumenty, je možné je zapsat na konec příkazu na pozici `<OPTIONAL-ARGS>`. Například, pokud byste chtěli sestavit optimalizovaně pro vydání, spustili byste výše uvedený příkaz následovaný `--release`. Výsledný spustitelný soubor se objeví v cílové složce na vašem systému a bude ho možné spustit pomocí:
|
||||
Všimněte si, že prvotní sestavení může trvat déle (než se do mezipaměti uloží veškeré softwarové součásti, které jsou potřeba) – následná opakování už budou rychlejší. Pokud navíc potřebujete zadat různé argumenty příkazu pro sestavení, můžete tak učinit na konci příkazu v pozici `<OPTIONAL-ARGS>`. Například, pokud byste chtěli sestavit optimalizovanou verzi pro vydání, spustili byste výše uvedený příkaz následovaný `--release`. Výsledný spustitelný soubor se objeví v cílové složce na vašem systému a bude ho možné spustit pomocí:
|
||||
|
||||
```sh
|
||||
target/debug/rustdesk
|
||||
@@ -144,7 +139,7 @@ Nebo, pokud spouštíte variantu pro vydání:
|
||||
target/release/rustdesk
|
||||
```
|
||||
|
||||
Zajistětě, abyste tyto příkazy spouštěli z kořene repozitáře s RustDesk, jinak aplikace nemusí být schopná nalézt potřebné prostředky (resources). Také si všimněte, že ostatní dílčí príkazy nástroje cargo, jako třeba `install` nebo `run` zatím nejsou prostřednictvím této metody podporovány, protože by vedly k instalaci či spuštění program uvnitř kontejneru namísto přímo v systému.
|
||||
Ujistěte se, že tyto příkazy spouštíte z kořenového adresáře RustDesk, jinak aplikace nemusí být schopná nalézt potřebné prostředky (resources). Také si všimněte, že ostatní dílčí príkazy nástroje cargo, jako třeba `install` nebo `run` zatím nejsou prostřednictvím této metody podporovány, protože by vedly k instalaci či spuštění program uvnitř kontejneru namísto přímo v systému.
|
||||
|
||||
## Struktura souborů
|
||||
|
||||
|
||||
@@ -26,8 +26,6 @@ Nedenfor er de servere, du bruger gratis, det kan ændre sig med tiden. Hvis du
|
||||
| Beliggenhed | Udbyder | Specifikation |
|
||||
| ---------- | ------------- | ------------------ |
|
||||
| Germany | Hetzner | 2 vCPU / 4GB RAM |
|
||||
| Germany | Codext | 4 vCPU / 8GB RAM |
|
||||
| Seoul | AWS lightsail | 1 vCPU / 0.5GB RAM |
|
||||
|
||||
## Afhængigheder
|
||||
|
||||
@@ -110,33 +108,6 @@ mv libsciter-gtk.so target/debug
|
||||
cargo run
|
||||
```
|
||||
|
||||
### Skift Wayland til X11 (Xorg)
|
||||
|
||||
RustDesk understøtter ikke Wayland. Tjek [dette](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) for at konfigurere Xorg som standard GNOME-session.
|
||||
|
||||
## Wayland-support
|
||||
|
||||
Wayland ser ikke ud til at levere nogen API til at sende tastetryk til andre vinduer. Derfor bruger rustdesk et API fra et lavere niveau, nemlig `/dev/uinput`-enheden (Linux-kerneniveau).
|
||||
|
||||
Når wayland er den kontrollerede side, skal du starte på følgende måde:
|
||||
```bash
|
||||
# Start uinput service
|
||||
$ sudo rustdesk --service
|
||||
$ rustdesk
|
||||
```
|
||||
**Bemærk**: Wayland-skærmoptagelse bruger forskellige grænseflader. RustDesk understøtter i øjeblikket kun org.freedesktop.portal.ScreenCast.
|
||||
```bash
|
||||
$ dbus-send --session --print-reply \
|
||||
--dest=org.freedesktop.portal.Desktop \
|
||||
/org/freedesktop/portal/desktop \
|
||||
org.freedesktop.DBus.Properties.Get \
|
||||
string:org.freedesktop.portal.ScreenCast string:version
|
||||
# Not support
|
||||
Error org.freedesktop.DBus.Error.InvalidArgs: No such interface “org.freedesktop.portal.ScreenCast”
|
||||
# Support
|
||||
method return time=1662544486.931020 sender=:1.54 -> destination=:1.139 serial=257 reply_serial=2
|
||||
variant uint32 4
|
||||
```
|
||||
## Sådan bygger du med Docker
|
||||
|
||||
```sh
|
||||
|
||||
@@ -35,7 +35,6 @@ Nachfolgend sind die Server gelistet, die Sie kostenlos nutzen können. Es kann
|
||||
| Standort | Anbieter | Spezifikation |
|
||||
| --------- | ------------- | ------------------ |
|
||||
| Deutschland | [Hetzner](https://www.hetzner.com/de/) | 2 vCPU / 4 GB RAM |
|
||||
| Deutschland | [Codext](https://codext.de/) | 4 vCPU / 8 GB RAM |
|
||||
| Ukraine (Kiew) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4 GB RAM |
|
||||
|
||||
## Dev-Container
|
||||
@@ -134,34 +133,6 @@ mv libsciter-gtk.so target/debug
|
||||
VCPKG_ROOT=$HOME/vcpkg cargo run
|
||||
```
|
||||
|
||||
### Wayland zu X11 (Xorg) ändern
|
||||
|
||||
RustDesk unterstützt Wayland nicht. Siehe [hier](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/), um Xorg als Standard-GNOME-Sitzung zu nutzen.
|
||||
|
||||
## Wayland-Unterstützung
|
||||
|
||||
Wayland scheint keine API für das Senden von Tastatureingaben an andere Fenster zu bieten. Daher verwendet RustDesk eine API von einer niedrigeren Ebene, nämlich dem Gerät `/dev/uinput` (Linux-Kernelebene).
|
||||
|
||||
Wenn Wayland die kontrollierte Seite ist, müssen Sie wie folgt vorgehen:
|
||||
```bash
|
||||
# Dienst uinput starten
|
||||
$ sudo rustdesk --service
|
||||
$ rustdesk
|
||||
```
|
||||
**Hinweis**: Die Wayland-Bildschirmaufnahme verwendet verschiedene Schnittstellen. RustDesk unterstützt derzeit nur org.freedesktop.portal.ScreenCast.
|
||||
```bash
|
||||
$ dbus-send --session --print-reply \
|
||||
--dest=org.freedesktop.portal.Desktop \
|
||||
/org/freedesktop/portal/desktop \
|
||||
org.freedesktop.DBus.Properties.Get \
|
||||
string:org.freedesktop.portal.ScreenCast string:version
|
||||
# Keine Unterstützung
|
||||
Error org.freedesktop.DBus.Error.InvalidArgs: No such interface “org.freedesktop.portal.ScreenCast”
|
||||
# Unterstützung
|
||||
method return time=1662544486.931020 sender=:1.54 -> destination=:1.139 serial=257 reply_serial=2
|
||||
variant uint32 4
|
||||
```
|
||||
|
||||
## Auf Docker kompilieren
|
||||
|
||||
Beginnen Sie damit, das Repository zu klonen und den Docker-Container zu bauen:
|
||||
|
||||
@@ -25,7 +25,6 @@ Malsupre estas la serviloj, kiuj vi uzas senpage, ĝi povas ŝanĝi laŭlonge de
|
||||
| Situo | Vendanto | Detaloj |
|
||||
| --------- | ------------- | ------------------ |
|
||||
| Germany | Hetzner | 2 vCPU / 4GB RAM |
|
||||
| Germany | Codext | 4 vCPU / 8GB RAM |
|
||||
| Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM |
|
||||
|
||||
## Dependantaĵoj
|
||||
@@ -105,10 +104,6 @@ mv libsciter-gtk.so target/debug
|
||||
VCPKG_ROOT=$HOME/vcpkg cargo run
|
||||
```
|
||||
|
||||
### Ŝanĝi Wayland por X11 (Xorg)
|
||||
|
||||
RustDesk ne subtenas Wayland. Kontrolu [tion](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) por agordi Xorg kiel defaŭlta sesio GNOME.
|
||||
|
||||
## Kiel kompili kun Docker
|
||||
|
||||
Komencu klonante la deponejon kaj kompilu la konteneron Docker:
|
||||
|
||||
@@ -32,7 +32,6 @@ A continuación se muestran los servidores gratuitos, pueden cambiar a medida qu
|
||||
| Ubicación | Compañía | Especificación |
|
||||
| --------- | ------------- | ------------------ |
|
||||
| Germany | Hetzner | 2 vCPU / 4GB RAM |
|
||||
| Germany | Codext | 4 vCPU / 8GB RAM |
|
||||
| Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM |
|
||||
|
||||
## Dependencias
|
||||
@@ -114,34 +113,6 @@ mv libsciter-gtk.so target/debug
|
||||
cargo run
|
||||
```
|
||||
|
||||
### Cambia Wayland a X11 (Xorg)
|
||||
|
||||
RustDesk no soporta Wayland. Lee [esto](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) para configurar Xorg en la sesión por defecto de GNOME.
|
||||
|
||||
## Soporte para Wayland
|
||||
|
||||
Wayland no parece proporcionar ninguna API para enviar pulsaciones de teclas a otras ventanas. Por lo tanto, rustdesk usa una API de nivel bajo, a saber, el dispositivo `/dev/uinput` (a nivel del kernel de Linux).
|
||||
|
||||
Cuando wayland esta del lado controlado, hay que iniciar de la siguiente manera:
|
||||
```bash
|
||||
# Empezar el servicio uinput
|
||||
$ sudo rustdesk --service
|
||||
$ rustdesk
|
||||
```
|
||||
**Aviso**: La grabación de pantalla de Wayland utiliza diferentes interfaces. RustDesk actualmente sólo soporta org.freedesktop.portal.ScreenCast
|
||||
```bash
|
||||
$ dbus-send --session --print-reply \
|
||||
--dest=org.freedesktop.portal.Desktop \
|
||||
/org/freedesktop/portal/desktop \
|
||||
org.freedesktop.DBus.Properties.Get \
|
||||
string:org.freedesktop.portal.ScreenCast string:version
|
||||
# No soportado
|
||||
Error org.freedesktop.DBus.Error.InvalidArgs: No such interface “org.freedesktop.portal.ScreenCast”
|
||||
# Soportado
|
||||
method return time=1662544486.931020 sender=:1.54 -> destination=:1.139 serial=257 reply_serial=2
|
||||
variant uint32 4
|
||||
```
|
||||
|
||||
## Como compilar con Docker
|
||||
|
||||
Empieza clonando el repositorio y compilando el contenedor de docker:
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
| موقعیت | سرویس دهنده | مشخصات |
|
||||
| --------- | ------------- | ------------------ |
|
||||
| آلمان | Hetzner | 2 vCPU / 4GB RAM |
|
||||
| آلمان | Codext | 4 vCPU / 8GB RAM |
|
||||
|
||||
## وابستگی ها
|
||||
|
||||
@@ -113,10 +112,6 @@ mv libsciter-gtk.so target/debug
|
||||
VCPKG_ROOT=$HOME/vcpkg cargo run
|
||||
```
|
||||
|
||||
### تغییر Wayland به (X11 (Xorg
|
||||
|
||||
راستدسک از Wayland پشتیبانی نمی کند. برای جایگزنی Xorg به عنوان پیشفرض GNOM، [اینجا](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) را کلیک کنید.
|
||||
|
||||
## نحوه ساخت با داکر
|
||||
|
||||
این مخزن Git را دریافت کنید و کانتینر را به روش زیر بسازید
|
||||
|
||||
@@ -25,7 +25,6 @@ Alla on palvelimia, joita voit käyttää ilmaiseksi, ne saattavat muuttua ajan
|
||||
| Sijainti | Myyjä | Määrittely |
|
||||
| --------- | ------------- | ------------------ |
|
||||
| Germany | Hetzner | 2 vCPU / 4GB RAM |
|
||||
| Germany | Codext | 4 vCPU / 8GB RAM |
|
||||
| Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM |
|
||||
|
||||
## Riippuvuudet
|
||||
@@ -105,10 +104,6 @@ mv libsciter-gtk.so target/debug
|
||||
VCPKG_ROOT=$HOME/vcpkg cargo run
|
||||
```
|
||||
|
||||
### Vaihda Wayland-ympäristö X11 (Xorg)-ympäristöön
|
||||
|
||||
RustDesk ei tue Waylandia. Tarkista [tämä](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) asettamalla Xorg oletus GNOME-istuntoon.
|
||||
|
||||
## Kuinka rakennetaan Dockerin kanssa
|
||||
|
||||
Aloita kloonaamalla tietovarasto ja rakentamalla docker-säiliö:
|
||||
|
||||
@@ -26,7 +26,6 @@ Ci-dessous se trouvent les serveurs que vous utilisez gratuitement, cela peut ch
|
||||
| Location | Vendor | Specification |
|
||||
| --------- | ------------- | ------------------ |
|
||||
| Germany | Hetzner | 2 vCPU / 4GB RAM |
|
||||
| Germany | Codext | 4 vCPU / 8GB RAM |
|
||||
|
||||
## Dépendances
|
||||
|
||||
@@ -105,10 +104,6 @@ mv libsciter-gtk.so target/debug
|
||||
Exécution du cargo
|
||||
```
|
||||
|
||||
### Changer Wayland en X11 (Xorg)
|
||||
|
||||
RustDesk ne supporte pas Wayland. Lisez [cela](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) pour configurer Xorg comme la session GNOME par défaut.
|
||||
|
||||
## Comment construire avec Docker
|
||||
|
||||
Commencez par cloner le dépôt et construire le conteneur Docker :
|
||||
|
||||
@@ -35,7 +35,6 @@
|
||||
| Περιοχή | Πάροχος | Προδιαγραφές |
|
||||
| --------- | ------------- | ------------------ |
|
||||
| Γερμανία | Hetzner | 2 vCPU / 4GB RAM |
|
||||
| Γερμανία | Codext | 4 vCPU / 8GB RAM |
|
||||
| Ουκρανία (Κίεβο) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM |
|
||||
|
||||
## Dev Container
|
||||
@@ -134,34 +133,6 @@ mv libsciter-gtk.so target/debug
|
||||
VCPKG_ROOT=$HOME/vcpkg cargo run
|
||||
```
|
||||
|
||||
### Αλλαγή του Wayland σε X11 (Xorg)
|
||||
|
||||
Το RustDesk δεν υποστηρίζει το πρωτόκολλο Wayland. Διαβάστε [εδώ](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) ώστε να ορίσετε το Xorg ως το προκαθορισμένο GNOME περιβάλλον.
|
||||
|
||||
## Υποστήριξη Wayland
|
||||
|
||||
Το Wayland προς το παρόν δεν διαθέτει κάποιο API το οποίο να στέλνει τα πατήματα πλήκτρων στα υπόλοιπα παράθυρα. Για τον λόγο αυτό, το Rustdesk χρησιμοποιεί ένα API από κατώτερο επίπεδο, όπως το `/dev/uinput` (Linux kernel level).
|
||||
|
||||
Σε περίπτωση που το Wayland είναι η ελεγχόμενη πλευρά, θα πρέπει να ξεκινήσετε με τον παρακάτω τρόπο:
|
||||
```bash
|
||||
# Start uinput service
|
||||
$ sudo rustdesk --service
|
||||
$ rustdesk
|
||||
```
|
||||
**Σημείωση**: Η εγγραφή οθόνης του Wayland χρησιμοποιεί διαφορετικές διεπαφές. Το RustDesk προς το παρόν υποστηρίζει μόνο org.freedesktop.portal.ScreenCast.
|
||||
```bash
|
||||
$ dbus-send --session --print-reply \
|
||||
--dest=org.freedesktop.portal.Desktop \
|
||||
/org/freedesktop/portal/desktop \
|
||||
org.freedesktop.DBus.Properties.Get \
|
||||
string:org.freedesktop.portal.ScreenCast string:version
|
||||
# Not support
|
||||
Error org.freedesktop.DBus.Error.InvalidArgs: No such interface “org.freedesktop.portal.ScreenCast”
|
||||
# Support
|
||||
method return time=1662544486.931020 sender=:1.54 -> destination=:1.139 serial=257 reply_serial=2
|
||||
variant uint32 4
|
||||
```
|
||||
|
||||
## Πως να κάνετε build στο Docker
|
||||
|
||||
Ξεκινήστε κλωνοποιώντας το αποθετήριο και κάνοντας build το docker container:
|
||||
@@ -190,7 +161,7 @@ target/debug/rustdesk
|
||||
target/release/rustdesk
|
||||
```
|
||||
|
||||
Βεβαιωθείτε ότι εκτελείτε αυτές τις εντολές από την αρχική διαδρομή του αποθετηρίου του Rustdesk, διαφορετικά η εφαρμογή ενδέχεται να μην είναι σε θέση να βρεί τους απαιτούμενους πόρους. Σημειώστε επίσης ότι άλλες υποεντολές, όπως το `install` ή το `run` δεν υποστηρίζονται επί του παρόντος μέσω αυτής της μεθόδου καθώς θα εγκαταστήσουν ή θα εκτελέσουν το πρόγραμμα εντός του container αντί του κεντρικού υπολογιστή.
|
||||
Βεβαιωθείτε ότι εκτελείτε αυτές τις εντολές από την αρχική διαδρομή του αποθετηρίου του RustDesk, διαφορετικά η εφαρμογή ενδέχεται να μην είναι σε θέση να βρεί τους απαιτούμενους πόρους. Σημειώστε επίσης ότι άλλες υποεντολές, όπως το `install` ή το `run` δεν υποστηρίζονται επί του παρόντος μέσω αυτής της μεθόδου καθώς θα εγκαταστήσουν ή θα εκτελέσουν το πρόγραμμα εντός του container αντί του κεντρικού υπολογιστή.
|
||||
|
||||
## Δομή φακέλων
|
||||
|
||||
|
||||
@@ -33,7 +33,6 @@ Ezalatt az üzenet alatt találhatóak azok a publikus szerverek, amelyeket ingy
|
||||
| Hely | Host | Specifikáció |
|
||||
| --------- | ------------- | ------------------ |
|
||||
| Germany | Hetzner | 2 vCPU / 4GB RAM |
|
||||
| Germany | Codext | 4 vCPU / 8GB RAM |
|
||||
| Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM |
|
||||
|
||||
## Dependencies
|
||||
@@ -117,10 +116,6 @@ mv libsciter-gtk.so target/debug
|
||||
VCPKG_ROOT=$HOME/vcpkg cargo run
|
||||
```
|
||||
|
||||
### Válts Wayland-ról X11-re (Xorg)
|
||||
|
||||
A RustDesk nem támogatja a Waylendet. [Itt](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) található egy tutorial amelynek segítségével beállíthatod a Xorg-ot mint alap GNOME session.
|
||||
|
||||
## Hogyan építs Dockerrel
|
||||
|
||||
Kezdjünk a repo clónozásával, majd pedig a Docker container megépítésével:
|
||||
|
||||
@@ -6,53 +6,76 @@
|
||||
<a href="#file-structure">Structure</a> •
|
||||
<a href="#snapshot">Snapshot</a><br>
|
||||
[<a href="../README.md">English</a>] | [<a href="README-UA.md">Українська</a>] | [<a href="README-CS.md">česky</a>] | [<a href="README-ZH.md">中文</a>] | [<a href="README-HU.md">Magyar</a>] | [<a href="README-ES.md">Español</a>] | [<a href="README-FA.md">فارسی</a>] | [<a href="README-FR.md">Français</a>] | [<a href="README-DE.md">Deutsch</a>] | [<a href="README-PL.md">Polski</a>] | [<a href="README-FI.md">Suomi</a>] | [<a href="README-ML.md">മലയാളം</a>] | [<a href="README-JP.md">日本語</a>] | [<a href="README-NL.md">Nederlands</a>] | [<a href="README-IT.md">Italiano</a>] | [<a href="README-RU.md">Русский</a>] | [<a href="README-PTBR.md">Português (Brasil)</a>] | [<a href="README-EO.md">Esperanto</a>] | [<a href="README-KR.md">한국어</a>] | [<a href="README-AR.md">العربي</a>] | [<a href="README-VN.md">Tiếng Việt</a>] | [<a href="README-GR.md">Ελληνικά</a>]<br>
|
||||
<b>Kami membutuhkan bantuan Anda untuk menerjemahkan README ini dan <a href="https://github.com/rustdesk/rustdesk/tree/master/src/lang">RustDesk UI</a> ke bahasa asli anda</b>
|
||||
<b>Kami membutuhkan bantuanmu untuk menterjemahkan file README dan <a href="https://github.com/rustdesk/rustdesk/tree/master/src/lang">RustDesk UI</a> ke Bahasa Indonesia</b>
|
||||
</p>
|
||||
|
||||
Birbincang bersama kami: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk)
|
||||
Mari mengobrol bersama kami: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk)
|
||||
|
||||
[](https://ko-fi.com/I2I04VU09)
|
||||
|
||||
Perangkat lunak desktop jarak jauh lainnya, ditulis dengan Rust. Bekerja begitu saja, tidak memerlukan konfigurasi. Anda memiliki kendali penuh atas data Anda, tanpa khawatir tentang keamanan. Anda dapat menggunakan server rendezvous/relay kami, [konfigurasi server sendiri](https://rustdesk.com/server), or [tulis rendezvous/relay server anda sendiri](https://github.com/rustdesk/rustdesk-server-demo).
|
||||
[](https://console.algora.io/org/rustdesk/bounties?status=open)
|
||||
|
||||
RustDesk menyambut baik kontribusi dari semua orang. Lihat [`docs/CONTRIBUTING.md`](CONTRIBUTING.md) untuk membantu sebelum memulai.
|
||||
Merupakan perangkat lunak Remote Desktop yang baru, dan dibangun dengan Rust. Bahkan kamu bisa langsung menggunakannya tanpa perlu melakukan konfigurasi tambahan. Serta memiliki kontrol penuh terhadap semua data, tanpa perlu merasa was-was tentang isu keamanan, dan yang lebih menarik adalah memiliki opsi untuk menggunakan server rendezvous/relay milik kami, [konfigurasi server sendiri](https://rustdesk.com/server), atau [tulis rendezvous/relay server anda sendiri](https://github.com/rustdesk/rustdesk-server-demo).
|
||||
|
||||
[**BINARY DOWNLOAD**](https://github.com/rustdesk/rustdesk/releases)
|
||||

|
||||
|
||||
## Publik Server Gratis
|
||||
RustDesk mengajak semua orang untuk ikut berkontribusi. Lihat [`docs/CONTRIBUTING-ID.md`](CONTRIBUTING-ID.md) untuk melihat panduan.
|
||||
|
||||
Di bawah ini adalah server yang bisa Anda gunakan secara gratis, dapat berubah seiring waktu. Jika Anda tidak dekat dengan salah satu dari ini, jaringan Anda mungkin lambat.
|
||||
| Lokasi | Vendor | Spesifikasi |
|
||||
[**FAQ**](https://github.com/rustdesk/rustdesk/wiki/FAQ)
|
||||
|
||||
[**UNDUH BINARY**](https://github.com/rustdesk/rustdesk/releases)
|
||||
|
||||
[**NIGHTLY BUILD**](https://github.com/rustdesk/rustdesk/releases/tag/nightly)
|
||||
|
||||
[<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png"
|
||||
alt="Get it on F-Droid"
|
||||
height="80">](https://f-droid.org/en/packages/com.carriez.flutter_hbb)
|
||||
|
||||
## Server Publik Gratis
|
||||
|
||||
Di bawah ini merupakan server gratis yang bisa kamu gunakan, seiring dengan waktu mungkin akan terjadi perubahan spesifikasi pada setiap server yang ada. Jika lokasi kamu berada jauh dengan salah satu server yang tersedia, kemungkinan koneksi akan terasa lambat ketika melakukan proses remote.
|
||||
| Lokasi | Penyedia | Spesifikasi |
|
||||
| --------- | ------------- | ------------------ |
|
||||
| Germany | Hetzner | 2 vCPU / 4GB RAM |
|
||||
| Germany | Codext | 4 vCPU / 8GB RAM |
|
||||
| Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM |
|
||||
| Jerman | [Hetzner](https://www.hetzner.com) | 2 vCPU / 4GB RAM |
|
||||
| Ukraina (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM |
|
||||
|
||||
## Dependencies
|
||||
## Dev Container
|
||||
|
||||
Versi desktop menggunakan [sciter](https://sciter.com/) untuk GUI, silahkan download sendiri sciter dynamic library.
|
||||
[](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/rustdesk/rustdesk)
|
||||
|
||||
Apabila PC kamu sudah terinstal VS Code dan Docker, kamu bisa mengklik badge yang ada diatas untuk memulainya. Dengan mengklik badge tersebut secara otomatis akan menginstal ekstensi pada VS Code, lakukan kloning (clone) source code kedalam container volume, dan aktifkan dev container untuk menggunakannya.
|
||||
|
||||
## Dependensi
|
||||
|
||||
Pada versi desktop, antarmuka pengguna (GUI) menggunakan [Sciter](https://sciter.com/) atau flutter
|
||||
|
||||
Kamu bisa mengunduh Sciter dynamic library disini.
|
||||
|
||||
[Windows](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.win/x64/sciter.dll) |
|
||||
[Linux](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so) |
|
||||
[MacOS](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.osx/libsciter.dylib)
|
||||
|
||||
## Langkah untuk RAW Build
|
||||
## Langkah awal untuk memulai
|
||||
|
||||
- Siapkan env pengembangan Rust dan C++ build env
|
||||
- Siapkan env development Rust dan env build C++
|
||||
|
||||
- Install [vcpkg](https://github.com/microsoft/vcpkg), dan arahkan `VCPKG_ROOT` env variable dengan benar
|
||||
- Install [vcpkg](https://github.com/microsoft/vcpkg), dan atur variabel env `VCPKG_ROOT` dengan benar
|
||||
|
||||
- Windows: vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static
|
||||
- Linux/MacOS: vcpkg install libvpx libyuv opus aom
|
||||
|
||||
- jalankan `cargo run`
|
||||
|
||||
## Bagaimana Build di Linux
|
||||
## [Build](https://rustdesk.com/docs/en/dev/build/)
|
||||
|
||||
## Cara Build di Linux
|
||||
|
||||
### Ubuntu 18 (Debian 10)
|
||||
|
||||
```sh
|
||||
sudo apt install -y g++ gcc git curl wget nasm yasm libgtk-3-dev clang libxcb-randr0-dev libxdo-dev libxfixes-dev libxcb-shape0-dev libxcb-xfixes0-dev libasound2-dev libpulse-dev cmake
|
||||
sudo apt install -y zip g++ gcc git curl wget nasm yasm libgtk-3-dev clang libxcb-randr0-dev libxdo-dev \
|
||||
libxfixes-dev libxcb-shape0-dev libxcb-xfixes0-dev libasound2-dev libpulse-dev cmake make \
|
||||
libclang-dev ninja-build libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
|
||||
```
|
||||
|
||||
### Fedora 28 (CentOS 8)
|
||||
@@ -79,7 +102,7 @@ export VCPKG_ROOT=$HOME/vcpkg
|
||||
vcpkg/vcpkg install libvpx libyuv opus aom
|
||||
```
|
||||
|
||||
### Perbaiki libvpx (Untuk Fedora)
|
||||
### Mengatasi masalah libvpx (Untuk Fedora)
|
||||
|
||||
```sh
|
||||
cd vcpkg/buildtrees/libvpx/src
|
||||
@@ -105,13 +128,9 @@ mv libsciter-gtk.so target/debug
|
||||
VCPKG_ROOT=$HOME/vcpkg cargo run
|
||||
```
|
||||
|
||||
### Ubah Wayland menjadi X11 (Xorg)
|
||||
## Cara Build dengan Docker
|
||||
|
||||
RustDesk tidak mendukung Wayland. Cek [ini](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) untuk mengonfigurasi Xorg sebagai sesi GNOME default.
|
||||
|
||||
## Bagaimana build dengan Docker
|
||||
|
||||
Mulailah dengan mengkloning repositori dan build dengan docker container:
|
||||
Mulailah dengan melakukan kloning (clone) repositori dan build dengan docker container:
|
||||
|
||||
```sh
|
||||
git clone https://github.com/rustdesk/rustdesk
|
||||
@@ -119,25 +138,25 @@ cd rustdesk
|
||||
docker build -t "rustdesk-builder" .
|
||||
```
|
||||
|
||||
Kemudian, setiap kali Anda perlu build aplikasi, jalankan perintah berikut:
|
||||
Selanjutnya, setiap kali ketika kamu akan melakukan build aplikasi, jalankan perintah berikut:
|
||||
|
||||
```sh
|
||||
docker run --rm -it -v $PWD:/home/user/rustdesk -v rustdesk-git-cache:/home/user/.cargo/git -v rustdesk-registry-cache:/home/user/.cargo/registry -e PUID="$(id -u)" -e PGID="$(id -g)" rustdesk-builder
|
||||
```
|
||||
|
||||
Perhatikan bahwa build pertama mungkin memerlukan waktu lebih lama sebelum dependensi di-cache, build berikutnya akan lebih cepat. Selain itu, jika Anda perlu menentukan argumen yang berbeda untuk perintah build, Anda dapat melakukannya di akhir perintah di posisi `<OPTIONAL-ARGS>`. Misalnya, jika Anda ingin membangun versi rilis yang dioptimalkan, Anda akan menjalankan perintah di atas diikuti oleh `--release`. Hasil eksekusi akan tersedia pada target folder di sistem anda, dan dapat dijalankan dengan:
|
||||
Perlu diingat bahwa pada saat build pertama kali, mungkin memerlukan waktu lebih lama sebelum dependensi di-cache, build berikutnya akan lebih cepat. Selain itu, jika perlu menentukan argumen yang berbeda untuk perintah build, kamu dapat melakukannya di akhir perintah di posisi `<OPTIONAL-ARGS>`. Misalnya, jika ingin membangun versi rilis yang dioptimalkan, jalankan perintah di atas dan tambahkan `--release`. Hasil eksekusi perintah tersebut akan tersimpan pada target folder di sistem kamu, dan dapat dijalankan dengan:
|
||||
|
||||
```sh
|
||||
target/debug/rustdesk
|
||||
```
|
||||
|
||||
Atau, jika Anda menjalankan rilis yang dapat dieksekusi:
|
||||
Atau, jika kamu menjalankan rilis yang dapat dieksekusi:
|
||||
|
||||
```sh
|
||||
target/release/rustdesk
|
||||
```
|
||||
|
||||
Harap pastikan bahwa Anda menjalankan perintah ini dari root repositori RustDesk, jika tidak, aplikasi mungkin tidak dapat menemukan sumber daya yang diperlukan. Perhatikan juga perintah cargo seperti `install` atau `run` saat ini tidak didukung melalui metode ini karena mereka akan menginstal atau menjalankan program di dalam container bukan pada host.
|
||||
Harap pastikan bahwa kamu menjalankan perintah ini dari repositori root RustDesk, jika tidak demikian, aplikasi mungkin tidak dapat menemukan sumber yang diperlukan. Dan juga, perintah cargo seperti `install` atau `run` saat ini tidak didukung melalui metode ini karena, proses menginstal atau menjalankan program terjadi di dalam container bukan pada host.
|
||||
|
||||
## Struktur File
|
||||
|
||||
|
||||
@@ -1,36 +1,40 @@
|
||||
<p align="center">
|
||||
<img src="../res/logo-header.svg" alt="RustDesk - Your remote desktop"><br>
|
||||
<a href="#server-pubblici-gratuiti">Servers</a> •
|
||||
<img src="../res/logo-header.svg" alt="RustDesk - il tuo desktop remoto"><br>
|
||||
<a href="#server-pubblici-gratuiti">Server</a> •
|
||||
<a href="#passaggi-per-la-compilazione">Compilazione</a> •
|
||||
<a href="#come-compilare-con-docker">Docker</a> •
|
||||
<a href="#struttura-dei-file">Struttura</a> •
|
||||
<a href="#screenshots">Screenshots</a><br>
|
||||
<a href="#screenshots">Schermate</a><br>
|
||||
[<a href="../README.md">English</a>] | [<a href="README-UA.md">Українська</a>] | [<a href="README-CS.md">česky</a>] | [<a href="README-ZH.md">中文</a>] | [<a href="README-HU.md">Magyar</a>] | [<a href="README-ES.md">Español</a>] | [<a href="README-FA.md">فارسی</a>] | [<a href="README-FR.md">Français</a>] | [<a href="README-DE.md">Deutsch</a>] | [<a href="README-PL.md">Polski</a>] | [<a href="README-ID.md">Indonesian</a>] | [<a href="README-FI.md">Suomi</a>] | [<a href="README-ML.md">മലയാളം</a>] | [<a href="README-JP.md">日本語</a>] | [<a href="README-NL.md">Nederlands</a>] | [<a href="README-RU.md">Русский</a>] | [<a href="README-PTBR.md">Português (Brasil)</a>] | [<a href="README-EO.md">Esperanto</a>] | [<a href="README-KR.md">한국어</a>] | [<a href="README-AR.md">العربي</a>] | [<a href="README-VN.md">Tiếng Việt</a>] | [<a href="README-GR.md">Ελληνικά</a>]<br>
|
||||
<b>Abbiamo bisogno del tuo aiuto per tradurre questo README e la <a href="https://github.com/rustdesk/rustdesk/tree/master/src/lang">RustDesk UI</a> nella tua lingua nativa</b>
|
||||
<b>Abbiamo bisogno del tuo aiuto per tradurre questo file README e la <a href="https://github.com/rustdesk/rustdesk/tree/master/src/lang">UI RustDesk</a> nella tua lingua nativa</b>
|
||||
</p>
|
||||
|
||||
Chatta con noi: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk)
|
||||
Chatta con noi su: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk)
|
||||
|
||||
[](https://ko-fi.com/I2I04VU09)
|
||||
|
||||
Ancora un altro software per il controllo remoto del desktop, scritto in Rust. Funziona immediatamente, nessuna configurazione richiesta. Hai il pieno controllo dei tuoi dati, senza preoccupazioni per la sicurezza. Puoi utilizzare il nostro server rendezvous/relay, [configurare il tuo](https://rustdesk.com/server) o [scrivere il tuo rendezvous/relay server](https://github.com/rustdesk/rustdesk-server-demo).
|
||||
Ancora un altro software per il controllo remoto del desktop, scritto in Rust.
|
||||
Funziona immediatamente, nessuna configurazione richiesta. Hai il pieno controllo dei tuoi dati, senza preoccupazioni per la sicurezza.
|
||||
Puoi usare il nostro server rendezvous/relay, [configurare il tuo server](https://rustdesk.com/server) o [realizzare il tuo server rendezvous/relay](https://github.com/rustdesk/rustdesk-server-demo).
|
||||
|
||||
RustDesk accoglie il contributo di tutti. Per ulteriori informazioni su come inizare a contribuire, vedere [`docs/CONTRIBUTING.md`](CONTRIBUTING.md).
|
||||
RustDesk accoglie il contributo di tutti.
|
||||
Per ulteriori informazioni su come iniziare a contribuire, vedi [`docs/CONTRIBUTING-IT.md`](CONTRIBUTING.md).
|
||||
|
||||
[**BINARY DOWNLOAD**](https://github.com/rustdesk/rustdesk/releases)
|
||||
[**DOWNLOAD PROGRAMMA**](https://github.com/rustdesk/rustdesk/releases)
|
||||
|
||||
## Server pubblici gratuiti
|
||||
|
||||
Qui sotto trovate i server che possono essere usati gratuitamente, la lista potrebbe cambiare nel tempo. Se non si è vicini a uno di questi server, la vostra connessione potrebbe essere lenta.
|
||||
| Posizione | Vendor | Specifiche |
|
||||
Qui sotto trovi i server che possono essere usati gratuitamente, la lista potrebbe cambiare nel tempo.
|
||||
Se non sei vicino a uno di questi server, la connessione potrebbe essere lenta.
|
||||
|
||||
| Posizione | Venditore | Specifiche |
|
||||
| --------- | ------------- | ------------------ |
|
||||
| Germany | Hetzner | 2 vCPU / 4GB RAM |
|
||||
| Germany | Codext | 4 vCPU / 8GB RAM |
|
||||
| Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM |
|
||||
| Germania | Hetzner | 2 vCPU / 4GB RAM |
|
||||
| Ucraina (Kyev) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM |
|
||||
|
||||
## Dipendenze
|
||||
|
||||
La versione Desktop utilizza [sciter](https://sciter.com/) per la GUI, per favore scarica sciter dynamic library.
|
||||
La versione Desktop usa per la GUI [sciter](https://sciter.com/), per favore scarica la libreria dinamica sciter.
|
||||
|
||||
[Windows](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.win/x64/sciter.dll) |
|
||||
[Linux](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so) |
|
||||
@@ -47,7 +51,7 @@ La versione Desktop utilizza [sciter](https://sciter.com/) per la GUI, per favor
|
||||
|
||||
- Esegui `cargo run`
|
||||
|
||||
## Come compilare su Linux
|
||||
## Come compilare in Linux
|
||||
|
||||
### Ubuntu 18 (Debian 10)
|
||||
|
||||
@@ -67,7 +71,7 @@ sudo yum -y install gcc-c++ git curl wget nasm yasm gcc gtk3-devel clang libxcb-
|
||||
sudo pacman -Syu --needed unzip git cmake gcc curl wget yasm nasm zip make pkg-config clang gtk3 xdotool libxcb libxfixes alsa-lib pipewire
|
||||
```
|
||||
|
||||
### Installare vcpkg
|
||||
### Installa vcpkg
|
||||
|
||||
```sh
|
||||
git clone https://github.com/microsoft/vcpkg
|
||||
@@ -79,7 +83,7 @@ export VCPKG_ROOT=$HOME/vcpkg
|
||||
vcpkg/vcpkg install libvpx libyuv opus aom
|
||||
```
|
||||
|
||||
### Fix libvpx (Per Fedora)
|
||||
### Correzione libvpx (per Fedora)
|
||||
|
||||
```sh
|
||||
cd vcpkg/buildtrees/libvpx/src
|
||||
@@ -105,13 +109,9 @@ mv libsciter-gtk.so target/debug
|
||||
VCPKG_ROOT=$HOME/vcpkg cargo run
|
||||
```
|
||||
|
||||
### Cambiare Wayland a X11 (Xorg)
|
||||
|
||||
RustDesk non supporta Wayland. Controlla [questo](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) per configurare Xorg come sessione di default di GNOME.
|
||||
|
||||
## Come compilare con Docker
|
||||
|
||||
Cominciare clonando il repository e compilare i container docker:
|
||||
Clona il repository e compila i container docker:
|
||||
|
||||
```sh
|
||||
git clone https://github.com/rustdesk/rustdesk
|
||||
@@ -119,38 +119,42 @@ cd rustdesk
|
||||
docker build -t "rustdesk-builder" .
|
||||
```
|
||||
|
||||
Quindi, ogni volta che devi compilare l'applicazione, esegui il comando seguente:
|
||||
Quindi, ogni volta che devi compilare l'applicazione, esegui il seguente comando:
|
||||
|
||||
```sh
|
||||
docker run --rm -it -v $PWD:/home/user/rustdesk -v rustdesk-git-cache:/home/user/.cargo/git -v rustdesk-registry-cache:/home/user/.cargo/registry -e PUID="$(id -u)" -e PGID="$(id -g)" rustdesk-builder
|
||||
```
|
||||
|
||||
Tieni presente che la prima build potrebbe richiedere più tempo prima che le dipendenze vengano memorizzate nella cache, le build successive saranno più veloci. Inoltre, se hai bisogno di specificare argomenti diversi per il comando build, puoi farlo alla fine del comando nella posizione `<OPTIONAL-ARGS>`. Ad esempio, se si desidera creare una versione di rilascio ottimizzata, eseguire il comando sopra seguito da `--release`. L'eseguibile generato sarà creato nella cartella di destinazione del proprio sistema e può essere eseguito con:
|
||||
Tieni presente che la prima build potrebbe richiedere più tempo prima che le dipendenze vengano memorizzate nella cache, le build successive saranno più veloci.
|
||||
Inoltre, se hai bisogno di specificare argomenti diversi per il comando build, puoi farlo alla fine del comando nella posizione `<OPTIONAL-ARGS>`.
|
||||
Ad esempio, se vuoi creare una versione di rilascio ottimizzata, esegui il comando precedentemente indicato seguito da `--release`.
|
||||
L'eseguibile generato sarà creato nella cartella destinazione del sistema e può essere eseguito con:
|
||||
|
||||
```sh
|
||||
target/debug/rustdesk
|
||||
```
|
||||
|
||||
Oppure, se si sta eseguendo un eseguibile di rilascio:
|
||||
Oppure, se stai avviando un eseguibile di rilascio:
|
||||
|
||||
```sh
|
||||
target/release/rustdesk
|
||||
```
|
||||
|
||||
Assicurati di eseguire questi comandi dalla radice del repository RustDesk, altrimenti l'applicazione potrebbe non essere in grado di trovare le risorse richieste. Notare inoltre che altri sottocomandi cargo come `install` o `run` non sono attualmente supportati tramite questo metodo poiché installerebbero o eseguirebbero il programma all'interno del container anziché nell'host.
|
||||
Assicurati di eseguire questi comandi dalla radice del repository RustDesk, altrimenti l'applicazione potrebbe non essere in grado di trovare le risorse richieste.
|
||||
Nota inoltre che altri sottocomandi cargo come `install` o `run` non sono attualmente supportati tramite questo metodo poiché installerebbero o eseguirebbero il programma all'interno del container anziché nell'host.
|
||||
|
||||
## Struttura dei file
|
||||
|
||||
- **[libs/hbb_common](https://github.com/rustdesk/rustdesk/tree/master/libs/hbb_common)**: video codec, config, tcp/udp wrapper, protobuf, fs funzioni per il trasferimento file, e altre funzioni utili.
|
||||
- **[libs/hbb_common](https://github.com/rustdesk/rustdesk/tree/master/libs/hbb_common)**: codec video, config, wrapper tcp/udp, protobuf, funzioni per il trasferimento file, e altre funzioni utili.
|
||||
- **[libs/scrap](https://github.com/rustdesk/rustdesk/tree/master/libs/scrap)**: cattura dello schermo
|
||||
- **[libs/enigo](https://github.com/rustdesk/rustdesk/tree/master/libs/enigo)**: controllo tastiera/mouse specifico della piattaforma
|
||||
- **[src/ui](https://github.com/rustdesk/rustdesk/tree/master/src/ui)**: GUI
|
||||
- **[src/server](https://github.com/rustdesk/rustdesk/tree/master/src/server)**: servizi audio/appunti/input/video e connessioni di rete
|
||||
- **[src/client.rs](https://github.com/rustdesk/rustdesk/tree/master/src/client.rs)**: avviare una connessione peer
|
||||
- **[src/client.rs](https://github.com/rustdesk/rustdesk/tree/master/src/client.rs)**: avvio di una connessione peer
|
||||
- **[src/rendezvous_mediator.rs](https://github.com/rustdesk/rustdesk/tree/master/src/rendezvous_mediator.rs)**: Comunica con [rustdesk-server](https://github.com/rustdesk/rustdesk-server), attende la connessione remota diretta (TCP hole punching) oppure indiretta (relayed)
|
||||
- **[src/platform](https://github.com/rustdesk/rustdesk/tree/master/src/platform)**: codice specifico della piattaforma
|
||||
|
||||
## Screenshots
|
||||
## Schermate
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -30,7 +30,6 @@ RustDeskは誰からの貢献も歓迎します。 貢献するには [`docs/CON
|
||||
| Location | Vendor | Specification |
|
||||
| --------- | ------------- | ------------------ |
|
||||
| Germany | Hetzner | 2 vCPU / 4GB RAM |
|
||||
| Germany | Codext | 4 vCPU / 8GB RAM |
|
||||
|
||||
## 依存関係
|
||||
|
||||
@@ -115,11 +114,6 @@ mv libsciter-gtk.so target/debug
|
||||
VCPKG_ROOT=$HOME/vcpkg cargo run
|
||||
```
|
||||
|
||||
### Wayland の場合、X11(Xorg)に変更します
|
||||
|
||||
RustDeskはWaylandをサポートしていません。
|
||||
[こちら](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) を確認して、XorgをデフォルトのGNOMEセッションとして構成します。
|
||||
|
||||
## Dockerでビルドする方法
|
||||
|
||||
リポジトリのクローンを作成し、Dockerコンテナを構築することから始めます。
|
||||
|
||||
@@ -30,7 +30,6 @@ RustDesk는 모든 기여를 환영합니다. 기여하고자 한다면 [`docs/C
|
||||
| Location | Vendor | Specification |
|
||||
| --------- | ------------- | ------------------ |
|
||||
| Germany | Hetzner | 2 vCPU / 4GB RAM |
|
||||
| Germany | Codext | 4 vCPU / 8GB RAM |
|
||||
|
||||
## 의존관계
|
||||
|
||||
@@ -113,10 +112,6 @@ mv libsciter-gtk.so target/debug
|
||||
VCPKG_ROOT=$HOME/vcpkg cargo run
|
||||
```
|
||||
|
||||
### Wayland 일 경우, X11(Xorg)로 변경
|
||||
|
||||
RustDesk는 Wayland를 지원하지 않습니다. [링크](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/)를 확인해서 Xorg 기본값의 GNOME 세션을 구성합니다.
|
||||
|
||||
## Docker에 빌드하는 방법
|
||||
|
||||
레포지토리를 클론하고, Docker 컨테이너 구성하는 것으로 시작합니다.
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
| സ്ഥാനം | കച്ചവടക്കാരൻ | വിവരണം |
|
||||
| --------- | ------------- | ------------------ |
|
||||
| Germany | Hetzner | 2 vCPU / 4GB RAM |
|
||||
| Germany | Codext | 4 vCPU / 8GB RAM |
|
||||
|
||||
## ഡിപെൻഡൻസികൾ
|
||||
|
||||
@@ -104,10 +103,6 @@ mv libsciter-gtk.so target/debug
|
||||
VCPKG_ROOT=$HOME/vcpkg cargo run
|
||||
```
|
||||
|
||||
### വേലാൻഡ് X11 (Xorg) ആയി മാറ്റുക
|
||||
|
||||
RustDesk Wayland-നെ പിന്തുണയ്ക്കുന്നില്ല. സ്ഥിരസ്ഥിതി ഗ്നോം സെഷനായി Xorg കോൺഫിഗർ ചെയ്യുന്നതിന് [ഇത്](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) പരിശോധിക്കുക.
|
||||
|
||||
## ഡോക്കർ ഉപയോഗിച്ച് എങ്ങനെ നിർമ്മിക്കാം
|
||||
|
||||
റെപ്പോസിറ്റോറി ക്ലോണുചെയ്ത് ഡോക്കർ കണ്ടെയ്നർ നിർമ്മിക്കുന്നതിലൂടെ ആരംഭിക്കുക:
|
||||
|
||||
@@ -33,7 +33,6 @@ Hieronder staan de servers die u gratis gebruikt, ze kunnen in de loop van de ti
|
||||
| Locatie | Aanbieder | Specificaties |
|
||||
| --------- | ------------- | ------------------ |
|
||||
| Duitsland | Hetzner | 2 vCPU / 4GB RAM |
|
||||
| Duitsland | Codext | 4 vCPU / 8GB RAM |
|
||||
| Oekraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM |
|
||||
|
||||
## Dev Container
|
||||
@@ -131,34 +130,6 @@ mv libsciter-gtk.so target/debug
|
||||
VCPKG_ROOT=$HOME/vcpkg cargo run
|
||||
```
|
||||
|
||||
### Wissel van Wayland naar X11 (Xorg)
|
||||
|
||||
RustDesk ondersteunt Wayland niet. Lees [hier](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) hoe je Xorg als standaardsessie kunt instellen voor GNOME.
|
||||
|
||||
## Wayland support
|
||||
|
||||
Wayland lijkt geen API te bieden voor het verzenden van toetsaanslagen naar andere vensters. Daarom gebruikt de rustdesk een API van een lager niveau, namelijk het `/dev/uinput` apparaat (Linux kernel niveau).
|
||||
|
||||
Als wayland de gecontroleerde kant is, moet je op de volgende manier beginnen:
|
||||
```bash
|
||||
# Start uinput service
|
||||
$ sudo rustdesk --service
|
||||
$ rustdesk
|
||||
```
|
||||
**Let op**: Wayland schermopname gebruikt verschillende interfaces. RustDesk ondersteunt momenteel alleen org.freedesktop.portal.ScreenCast.
|
||||
```bash
|
||||
$ dbus-send --session --print-reply \
|
||||
--dest=org.freedesktop.portal.Desktop \
|
||||
/org/freedesktop/portal/desktop \
|
||||
org.freedesktop.DBus.Properties.Get \
|
||||
string:org.freedesktop.portal.ScreenCast string:version
|
||||
# Not support
|
||||
Error org.freedesktop.DBus.Error.InvalidArgs: No such interface “org.freedesktop.portal.ScreenCast”
|
||||
# Support
|
||||
method return time=1662544486.931020 sender=:1.54 -> destination=:1.139 serial=257 reply_serial=2
|
||||
variant uint32 4
|
||||
```
|
||||
|
||||
## Bouwen met Docker
|
||||
|
||||
Begin met het klonen van de repository en het bouwen van de docker container:
|
||||
|
||||
@@ -35,7 +35,6 @@ Poniżej znajdują się serwery, z których można korzystać za darmo, może si
|
||||
| Lokalizacja | Dostawca | Specyfikacja |
|
||||
| --------- | ------------- | ------------------ |
|
||||
| Niemcy | Hetzner | 2 vCPU / 4GB RAM |
|
||||
| Niemcy | Codext | 4 vCPU / 8GB RAM |
|
||||
| Ukraina (Kijów) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM |
|
||||
|
||||
## Konterner Programisty (Dev Container)
|
||||
@@ -129,34 +128,6 @@ mv libsciter-gtk.so target/debug
|
||||
cargo run
|
||||
```
|
||||
|
||||
### Zmień Wayland na X11 (Xorg)
|
||||
|
||||
RustDesk nie obsługuje Waylanda. Sprawdź [tutaj](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/), jak skonfigurować Xorg jako domyślną sesję GNOME.
|
||||
|
||||
## Wspracie Wayland
|
||||
|
||||
Wygląda na to, że Wayland nie wspiera żadnego API do wysyłania naciśnięć klawiszy do innych okien. Dlatego rustdesk używa API z niższego poziomu, urządzenia o nazwie `/dev/uinput` (poziom jądra Linux).
|
||||
|
||||
Gdy po stronie kontrolowanej pracuje Wayland, musisz uruchomić program w następujący sposób:
|
||||
```bash
|
||||
# Start uinput service
|
||||
$ sudo rustdesk --service
|
||||
$ rustdesk
|
||||
```
|
||||
**Uwaga**: Nagrywanie ekranu Wayland wykorzystuje różne interfejsy. RustDesk obecnie obsługuje tylko org.freedesktop.portal.ScreenCast.
|
||||
```bash
|
||||
$ dbus-send --session --print-reply \
|
||||
--dest=org.freedesktop.portal.Desktop \
|
||||
/org/freedesktop/portal/desktop \
|
||||
org.freedesktop.DBus.Properties.Get \
|
||||
string:org.freedesktop.portal.ScreenCast string:version
|
||||
# Not support
|
||||
Error org.freedesktop.DBus.Error.InvalidArgs: No such interface “org.freedesktop.portal.ScreenCast”
|
||||
# Support
|
||||
method return time=1662544486.931020 sender=:1.54 -> destination=:1.139 serial=257 reply_serial=2
|
||||
variant uint32 4
|
||||
```
|
||||
|
||||
## Jak kompilować za pomocą Dockera
|
||||
|
||||
Rozpocznij od sklonowania repozytorium i stworzenia kontenera docker:
|
||||
|
||||
@@ -26,7 +26,6 @@ Abaixo estão os servidores que você está utilizando de graça, ele pode mudar
|
||||
| Localização | Fornecedor | Especificações |
|
||||
| ----------- | ------------- | ------------------ |
|
||||
| Germany | Hetzner | 2 vCPU / 4GB RAM |
|
||||
| Germany | Codext | 4 vCPU / 8GB RAM |
|
||||
|
||||
## Dependências
|
||||
|
||||
@@ -105,10 +104,6 @@ mv libsciter-gtk.so target/debug
|
||||
VCPKG_ROOT=$HOME/vcpkg cargo run
|
||||
```
|
||||
|
||||
### Mude Wayland para X11 (Xorg)
|
||||
|
||||
RustDesk não suporta Wayland. Veja [esse link](https://docs.fedoraproject.org/pt_BR/quick-docs/configuring-xorg-as-default-gnome-session/) para configurar o Xorg como a sessão padrão do GNOME.
|
||||
|
||||
## Como compilar com Docker
|
||||
|
||||
Comece clonando o repositório e montando o container docker:
|
||||
|
||||
@@ -34,8 +34,6 @@ RustDesk приветствует вклад каждого. Ознакомьт
|
||||
| Расположение | Поставщик | Технические характеристики |
|
||||
| --------- | ------------- | ------------------ |
|
||||
| Германия | Hetzner | 2 vCPU / 4GB RAM |
|
||||
| Германия | Codext | 4 vCPU / 8GB RAM |
|
||||
| Россия (Москва) | [nt-vps](https://nt-vps.ru) | 8 vCPU / 8GB RAM |
|
||||
|
||||
## Зависимости
|
||||
|
||||
@@ -116,10 +114,6 @@ mv libsciter-gtk.so target/debug
|
||||
VCPKG_ROOT=$HOME/vcpkg cargo run
|
||||
```
|
||||
|
||||
### Смените Wayland на X11 (Xorg)
|
||||
|
||||
RustDesk не поддерживает Wayland. Смотрите [этот документ](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) для настройки Xorg в качестве сеанса GNOME по умолчанию.
|
||||
|
||||
## Как собрать с помощью Docker
|
||||
|
||||
Начните с клонирования репозитория и создания docker-контейнера:
|
||||
|
||||
195
docs/README-TR.md
Normal file
@@ -0,0 +1,195 @@
|
||||
|
||||
<p align="center">
|
||||
<img src="../res/logo-header.svg" alt="RustDesk - Uzak masaüstü uygulamanız"><br>
|
||||
<a href="#free-public-servers">Sunucular</a> •
|
||||
<a href="#raw-steps-to-build">Derleme</a> •
|
||||
<a href="#how-to-build-with-docker">Docker ile Derleme</a> •
|
||||
<a href="#file-structure">Dosya Yapısı</a> •
|
||||
<a href="#snapshot">Ekran Görüntüleri</a><br>
|
||||
[<a href="docs/README-UA.md">Українська</a>] | [<a href="docs/README-CS.md">česky</a>] | [<a href="docs/README-ZH.md">中文</a>] | [<a href="docs/README-HU.md">Magyar</a>] | [<a href="docs/README-ES.md">Español</a>] | [<a href="docs/README-FA.md">فارسی</a>] | [<a href="docs/README-FR.md">Français</a>] | [<a href="docs/README-DE.md">Deutsch</a>] | [<a href="docs/README-PL.md">Polski</a>] | [<a href="docs/README-ID.md">Indonesian</a>] | [<a href="docs/README-FI.md">Suomi</a>] | [<a href="docs/README-ML.md">മലയാളം</a>] | [<a href="docs/README-JP.md">日本語</a>] | [<a href="docs/README-NL.md">Nederlands</a>] | [<a href="docs/README-IT.md">Italiano</a>] | [<a href="docs/README-RU.md">Русский</a>] | [<a href="docs/README-PTBR.md">Português (Brasil)</a>] | [<a href="docs/README-EO.md">Esperanto</a>] | [<a href="docs/README-KR.md">한국어</a>] | [<a href="docs/README-AR.md">العربي</a>] | [<a href="docs/README-VN.md">Tiếng Việt</a>] | [<a href="docs/README-DA.md">Dansk</a>] | [<a href="docs/README-GR.md">Ελληνικά</a>]<br>
|
||||
<b>README, <a href="https://github.com/rustdesk/rustdesk/tree/master/src/lang">RustDesk UI</a> ve <a href="https://github.com/rustdesk/doc.rustdesk.com">RustDesk Belge</a>'sini ana dilinize çevirmemiz için yardımınıza ihtiyacımız var</b>
|
||||
</p>
|
||||
|
||||
Bizimle sohbet edin: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk)
|
||||
|
||||
[](https://ko-fi.com/I2I04VU09)
|
||||
|
||||
Başka bir uzak masaüstü yazılımı daha, Rust dilinde yazılmış. Hemen kullanıma hazır, hiçbir yapılandırma gerektirmez. Verilerinizin tam kontrolünü elinizde tutarsınız ve güvenlikle ilgili endişeleriniz olmaz. Kendi buluş/iletme sunucumuzu kullanabilirsiniz, [kendi sunucunuzu kurabilirsiniz](https://rustdesk.com/server) veya [kendi buluş/iletme sunucunuzu yazabilirsiniz](https://github.com/rustdesk/rustdesk-server-demo).
|
||||
|
||||

|
||||
|
||||
RustDesk, herkesten katkıyı kabul eder. Başlamak için [CONTRIBUTING.md](docs/CONTRIBUTING-TR.md) belgesine göz atın.
|
||||
|
||||
[**SSS**](https://github.com/rustdesk/rustdesk/wiki/FAQ)
|
||||
|
||||
[**BİNARİ İNDİR**](https://github.com/rustdesk/rustdesk/releases)
|
||||
|
||||
[**NİGHTLY DERLEME**](https://github.com/rustdesk/rustdesk/releases/tag/nightly)
|
||||
|
||||
[<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png"
|
||||
alt="F-Droid'de Alın"
|
||||
height="80">](https://f-droid.org/en/packages/com.carriez.flutter_hbb)
|
||||
|
||||
## Ücretsiz Genel Sunucular
|
||||
|
||||
Aşağıda ücretsiz olarak kullandığınız sunucular listelenmiştir, zaman içinde değişebilirler. Eğer bunlardan birine yakın değilseniz, ağınız yavaş olabilir.
|
||||
| Konum | Sağlayıcı | Özellikler |
|
||||
| --------- | ------------- | ------------------ |
|
||||
| Almanya | [Hetzner](https://www.hetzner.com) | 2 vCPU / 4 GB RAM |
|
||||
| Almanya | [Codext](https://codext.de) | 4 vCPU / 8 GB RAM |
|
||||
| Ukrayna (Kiev) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4 GB RAM |
|
||||
|
||||
## Geliştirici Konteyneri
|
||||
|
||||
[](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/rustdesk/rustdesk)
|
||||
|
||||
Eğer zaten VS Code ve Docker kurulu ise yukarıdaki rozete tıklayarak başlayabilirsiniz. Tıklamak, VS Code'un gerektiğinde Dev Konteyner eklentisini otomatik olarak yüklemesine, kaynak kodunu bir konteyner hacmine klonlamasına ve kullanım için bir geliştirici konteyneri başlatmasına neden olur.
|
||||
|
||||
Daha fazla bilgi için [DEVCONTAINER.md](docs/DEVCONTAINER-TR.md) belgesine bakabilirsiniz.
|
||||
|
||||
## Bağımlılıklar
|
||||
|
||||
Masaüstü sürümleri GUI için
|
||||
|
||||
[Sciter](https://sciter.com/) veya Flutter kullanır, bu kılavuz sadece Sciter içindir.
|
||||
|
||||
Lütfen Sciter dinamik kütüphanesini kendiniz indirin.
|
||||
|
||||
[Windows](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.win/x64/sciter.dll) |
|
||||
[Linux](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so) |
|
||||
[macOS](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.osx/libsciter.dylib)
|
||||
|
||||
## Temel Derleme Adımları
|
||||
|
||||
- Rust geliştirme ortamınızı ve C++ derleme ortamınızı hazırlayın.
|
||||
|
||||
- [vcpkg](https://github.com/microsoft/vcpkg) yükleyin ve `VCPKG_ROOT` çevresel değişkenini doğru bir şekilde ayarlayın.
|
||||
|
||||
- Windows: vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static
|
||||
- Linux/macOS: vcpkg install libvpx libyuv opus aom
|
||||
|
||||
- `cargo run` komutunu çalıştırın.
|
||||
|
||||
## [Derleme](https://rustdesk.com/docs/en/dev/build/)
|
||||
|
||||
## Linux Üzerinde Derleme Nasıl Yapılır
|
||||
|
||||
### Ubuntu 18 (Debian 10)
|
||||
|
||||
```sh
|
||||
sudo apt install -y zip g++ gcc git curl wget nasm yasm libgtk-3-dev clang libxcb-randr0-dev libxdo-dev \
|
||||
libxfixes-dev libxcb-shape0-dev libxcb-xfixes0-dev libasound2-dev libpulse-dev cmake make \
|
||||
libclang-dev ninja-build libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
|
||||
```
|
||||
|
||||
### openSUSE Tumbleweed
|
||||
|
||||
```sh
|
||||
sudo zypper install gcc-c++ git curl wget nasm yasm gcc gtk3-devel clang libxcb-devel libXfixes-devel cmake alsa-lib-devel gstreamer-devel gstreamer-plugins-base-devel xdotool-devel
|
||||
```
|
||||
|
||||
### Fedora 28 (CentOS 8)
|
||||
|
||||
```sh
|
||||
sudo yum -y install gcc-c++ git curl wget nasm yasm gcc gtk3-devel clang libxcb-devel libxdo-devel libXfixes-devel pulseaudio-libs-devel cmake alsa-lib-devel
|
||||
```
|
||||
|
||||
### Arch (Manjaro)
|
||||
|
||||
```sh
|
||||
sudo pacman -Syu --needed unzip git cmake gcc curl wget yasm nasm zip make pkg-config clang gtk3 xdotool libxcb libxfixes alsa-lib pipewire
|
||||
```
|
||||
|
||||
### vcpkg'yi Yükleyin
|
||||
|
||||
```sh
|
||||
git clone https://github.com/microsoft/vcpkg
|
||||
cd vcpkg
|
||||
git checkout 2023.04.15
|
||||
cd ..
|
||||
vcpkg/bootstrap-vcpkg.sh
|
||||
export VCPKG_ROOT=$HOME/vcpkg
|
||||
vcpkg/vcpkg install libvpx libyuv opus aom
|
||||
```
|
||||
|
||||
### libvpx'i Düzeltin (Fedora için)
|
||||
|
||||
```sh
|
||||
cd vcpkg/buildtrees/libvpx/src
|
||||
cd *
|
||||
./configure
|
||||
sed -i 's/CFLAGS+=-I/CFLAGS+=-fPIC -I/g' Makefile
|
||||
sed -i 's/CXXFLAGS+=-I/CXXFLAGS+=-fPIC -I/g' Makefile
|
||||
make
|
||||
cp libvpx.a $HOME/vcpkg/installed/x64-linux/lib/
|
||||
cd
|
||||
```
|
||||
|
||||
### Derleme
|
||||
|
||||
```sh
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
||||
source $HOME/.cargo/env
|
||||
git clone https://github.com/rustdesk/rustdesk
|
||||
cd rustdesk
|
||||
mkdir -p target/debug
|
||||
wget https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so
|
||||
mv libsciter-gtk.so target/debug
|
||||
VCPKG_ROOT=$HOME/vcpkg cargo run
|
||||
```
|
||||
|
||||
## Docker ile Derleme Nasıl Yapılır
|
||||
|
||||
Öncelikle deposunu klonlayın ve Docker konteynerini oluşturun:
|
||||
|
||||
```sh
|
||||
git clone https://github.com/rustdesk/rustdesk
|
||||
cd rustdesk
|
||||
docker build -t "rustdesk-builder" .
|
||||
```
|
||||
|
||||
Ardından, uygulamayı derlemek için her seferinde aşağıdaki komutu çalıştırın:
|
||||
|
||||
```sh
|
||||
docker run --rm -it -v $PWD:/home/user/rustdesk -v rustdesk-git-cache:/home/user/.cargo/git -v rustdesk-registry-cache:/home/user/.cargo/registry -e PUID="$(id -u)" -e PGID="$(id -g)" rustdesk-builder
|
||||
```
|
||||
|
||||
İlk derleme, bağımlılıklar önbelleğe alınmadan önce daha uzun sürebilir, sonraki derlemeler daha hızlı olacaktır. Ayrıca, derleme komutuna isteğe bağlı argümanlar belirtmeniz gerekiyorsa, bunu
|
||||
|
||||
komutun sonunda `<İSTEĞE BAĞLI-ARGÜMANLAR>` pozisyonunda yapabilirsiniz. Örneğin, optimize edilmiş bir sürümü derlemek isterseniz, yukarıdaki komutu çalıştırdıktan sonra `--release` ekleyebilirsiniz. Oluşan yürütülebilir dosya sisteminizdeki hedef klasöründe bulunacak ve şu komutla çalıştırılabilir:
|
||||
|
||||
```sh
|
||||
target/debug/rustdesk
|
||||
```
|
||||
|
||||
Veya, yayın yürütülebilir dosyası çalıştırılıyorsa:
|
||||
|
||||
```sh
|
||||
target/release/rustdesk
|
||||
```
|
||||
|
||||
Lütfen bu komutları RustDesk deposunun kökünden çalıştırdığınızdan emin olun, aksi takdirde uygulama gereken kaynakları bulamayabilir. Ayrıca, `install` veya `run` gibi diğer cargo altkomutları şu anda bu yöntem aracılığıyla desteklenmemektedir, çünkü bunlar programı konteyner içinde kurar veya çalıştırır ve ana makinede değil.
|
||||
|
||||
## Dosya Yapısı
|
||||
|
||||
- **[libs/hbb_common](https://github.com/rustdesk/rustdesk/tree/master/libs/hbb_common)**: video kodlayıcı, yapılandırma, tcp/udp sarmalayıcı, protobuf, dosya transferi için fs işlevleri ve diğer bazı yardımcı işlevler
|
||||
- **[libs/scrap](https://github.com/rustdesk/rustdesk/tree/master/libs/scrap)**: ekran yakalama
|
||||
- **[libs/enigo](https://github.com/rustdesk/rustdesk/tree/master/libs/enigo)**: platforma özgü klavye/fare kontrolü
|
||||
- **[src/ui](https://github.com/rustdesk/rustdesk/tree/master/src/ui)**: GUI
|
||||
- **[src/server](https://github.com/rustdesk/rustdesk/tree/master/src/server)**: ses/pasta/klavye/video hizmetleri ve ağ bağlantıları
|
||||
- **[src/client.rs](https://github.com/rustdesk/rustdesk/tree/master/src/client.rs)**: bir eş bağlantısı başlatır
|
||||
- **[src/rendezvous_mediator.rs](https://github.com/rustdesk/rustdesk/tree/master/src/rendezvous_mediator.rs)**: [rustdesk-server](https://github.com/rustdesk/rustdesk-server) ile iletişim kurar, uzak doğrudan (TCP delik vurma) veya iletme bağlantısını bekler
|
||||
- **[src/platform](https://github.com/rustdesk/rustdesk/tree/master/src/platform)**: platforma özgü kod
|
||||
- **[flutter](https://github.com/rustdesk/rustdesk/tree/master/flutter)**: mobil için Flutter kodu
|
||||
- **[flutter/web/js](https://github.com/rustdesk/rustdesk/tree/master/flutter/web/js)**: Flutter web istemcisi için JavaScript
|
||||
|
||||
## Ekran Görüntüleri
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
```
|
||||
@@ -1,29 +1,31 @@
|
||||
<p align="center">
|
||||
<img src="../res/logo-header.svg" alt="RustDesk - Ваш віддалений робочий стіл"><br>
|
||||
<img src="../res/logo-header.svg" alt="RustDesk - Ваша віддалена стільниця"><br>
|
||||
<a href="#безкоштовні-загальнодоступні-сервери">Сервери</a> •
|
||||
<a href="#первинні-кроки-для-складання">Складання</a> •
|
||||
<a href="#кроки-для-збірки">Збирання</a> •
|
||||
<a href="#як-зібрати-за-допомогою-docker">Docker</a> •
|
||||
<a href="#структура-файлів">Структура</a> •
|
||||
<a href="#знімки">Знімки</a><br>
|
||||
[<a href="../README.md">English</a>] | [<a href="README-CS.md">česky</a>] | [<a href="README-ZH.md">中文</a>] | [<a href="README-HU.md">Magyar</a>] | [<a href="README-ES.md">Español</a>] | [<a href="README-FA.md">فارسی</a>] | [<a href="README-FR.md">Français</a>] | [<a href="README-DE.md">Deutsch</a>] | [<a href="README-PL.md">Polski</a>] | [<a href="README-ID.md">Indonesian</a>] | [<a href="README-FI.md">Suomi</a>] | [<a href="README-ML.md">മലയാളം</a>] | [<a href="README-JP.md">日本語</a>] | [<a href="README-NL.md">Nederlands</a>] | [<a href="README-IT.md">Italiano</a>] | [<a href="README-RU.md">Русский</a>] | [<a href="README-PTBR.md">Português (Brasil)</a>] | [<a href="README-EO.md">Esperanto</a>] | [<a href="README-KR.md">한국어</a>] | [<a href="README-AR.md">العربي</a>] | [<a href="README-VN.md">Tiếng Việt</a>] | [<a href="README-GR.md">Ελληνικά</a>]<br>
|
||||
<b>Нам потрібна ваша допомога для перекладу цього README і <a href="https://github.com/rustdesk/rustdesk/tree/master/src/rustdesk/tree/master/src/lang">RustDesk UI</a> на вашу рідну мову</B>
|
||||
[<a href="../README.md">English</a>] | [<a href="docs/README-CS.md">česky</a>] | [<a href="docs/README-ZH.md">中文</a>] | [<a href="docs/README-HU.md">Magyar</a>] | [<a href="docs/README-ES.md">Español</a>] | [<a href="docs/README-FA.md">فارسی</a>] | [<a href="docs/README-FR.md">Français</a>] | [<a href="docs/README-DE.md">Deutsch</a>] | [<a href="docs/README-PL.md">Polski</a>] | [<a href="docs/README-ID.md">Indonesian</a>] | [<a href="docs/README-FI.md">Suomi</a>] | [<a href="docs/README-ML.md">മലയാളം</a>] | [<a href="docs/README-JP.md">日本語</a>] | [<a href="docs/README-NL.md">Nederlands</a>] | [<a href="docs/README-IT.md">Italiano</a>] | [<a href="docs/README-RU.md">Русский</a>] | [<a href="docs/README-PTBR.md">Português (Brasil)</a>] | [<a href="docs/README-EO.md">Esperanto</a>] | [<a href="docs/README-KR.md">한국어</a>] | [<a href="docs/README-AR.md">العربي</a>] | [<a href="docs/README-VN.md">Tiếng Việt</a>] | [<a href="docs/README-DA.md">Dansk</a>] | [<a href="docs/README-GR.md">Ελληνικά</a>] | [<a href="docs/README-TR.md">Türkçe</a>]<br>
|
||||
<b>Нам потрібна ваша допомога для перекладу цього README, <a href="https://github.com/rustdesk/rustdesk/tree/master/src/lang">інтерфейсу</a> та <a href="https://github.com/rustdesk/doc.rustdesk.com">документації</a> RustDesk на вашу рідну мову</B>
|
||||
</p>
|
||||
|
||||
Спілкування з нами: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk)
|
||||
|
||||
[](https://ko-fi.com/I2I04VU09)
|
||||
|
||||
Ще одне програмне забезпечення для віддаленого робочого столу, написане на Rust. Працює з коробки, не потребує налаштування. Ви повністю контролюєте свої дані, не турбуючись про безпеку. Ви можете використовувати наш сервер ретрансляції, [налаштувати свій власний](https://rustdesk.com/server), або [написати свій власний сервер ретрансляції](https://github.com/rustdesk/rustdesk-server-demo).
|
||||
[](https://console.algora.io/org/rustdesk/bounties?status=open)
|
||||
|
||||
Ще один застосунок для віддаленого керування стільницею, написаний на Rust. Працює з коробки, не потребує налаштування. Ви повністю контролюєте свої дані, не турбуючись про безпеку. Ви можете використовувати наш сервер ретрансляції, [налаштувати свій власний](https://rustdesk.com/server), або [написати свій власний сервер ретрансляції](https://github.com/rustdesk/rustdesk-server-demo).
|
||||
|
||||

|
||||
|
||||
RustDesk вітає внесок кожного. Дивіться [`docs/CONTRIBUTING.md`](CONTRIBUTING.md) для допомоги на початку роботи.
|
||||
RustDesk вітає внесок кожного. Ознайомтеся з [CONTRIBUTING.md](docs/CONTRIBUTING.md), щоб отримати допомогу на початковому етапі.
|
||||
|
||||
[**FAQ**](https://github.com/rustdesk/rustdesk/wiki/FAQ)
|
||||
[**ЧаПи**](https://github.com/rustdesk/rustdesk/wiki/FAQ)
|
||||
|
||||
[**Як працює RustDesk?**](https://github.com/rustdesk/rustdesk/wiki/How-does-RustDesk-work%3F)
|
||||
[**ЗАВАНТАЖЕННЯ ЗАСТОСУНКУ**](https://github.com/rustdesk/rustdesk/releases)
|
||||
|
||||
[**ЗАВАНТАЖИТИ ЗАСТОСУНОК**](https://github.com/rustdesk/rustdesk/releases)
|
||||
[**НІЧНІ ЗБІРКИ**](https://github.com/rustdesk/rustdesk/releases/tag/nightly)
|
||||
|
||||
[<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png"
|
||||
alt="Get it on F-Droid"
|
||||
@@ -34,39 +36,40 @@ RustDesk вітає внесок кожного. Дивіться [`docs/CONTRIB
|
||||
Нижче наведені сервери, для безкоштовного використання, вони можуть змінюватися з часом. Якщо ви не перебуваєте поруч з одним із них, ваша мережа може працювати повільно.
|
||||
| Місцезнаходження | Постачальник | Технічні характеристики |
|
||||
| --------- | ------------- | ------------------ |
|
||||
| Німеччина | Hetzner | 2 VCPU / 4GB RAM |
|
||||
| Німеччина | Codext | 4 vCPU / 8GB RAM |
|
||||
| Німеччина | [Hetzner](https://www.hetzner.com) | 2 vCPU / 4GB RAM |
|
||||
| Україна (Київ) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4GB RAM |
|
||||
|
||||
## Dev Container
|
||||
|
||||
[](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/rustdesk/rustdesk)
|
||||
|
||||
Якщо у вас уже встановлено VS Code і Docker, ви можете натиснути значок вище, щоб почати. Клацання призведе до того, що VS Code автоматично встановить розширення Dev Containers, якщо це необхідно, клонує виcхідний код у том контейнера та розгорне контейнер dev для використання.
|
||||
Якщо у вас уже встановлено VS Code та Docker, ви можете натиснути значок вище, щоб розпочати. Клацання призведе до того, що VS Code автоматично встановить розширення Dev Containers, якщо це необхідно, клонує вихідний код у том контейнера та розгорне контейнер dev для використання.
|
||||
|
||||
Дивіться [DEVCONTAINER.md](docs/DEVCONTAINER.md) для додаткової інфо.
|
||||
Дивіться [DEVCONTAINER.md](docs/DEVCONTAINER.md) для додаткової інформації
|
||||
|
||||
## Залежності
|
||||
|
||||
Настільні версії використовують [sciter](https://sciter.com/) для графічного інтерфейсу, завантажте динамічну бібліотеку sciter самостійно.
|
||||
Стільничні версії використовують Flutter чи Sciter (застаріле) для графічного інтерфейсу. Ця інструкція лише для Sciter, оскільки він є більш простим та дружнім для початківців. Перегляньте [CI](https://github.com/rustdesk/rustdesk/blob/master/.github/workflows/flutter-build.yml) для збірки версії на Flutter.
|
||||
|
||||
Будь ласка, завантажте динамічну бібліотеку Sciter самостійно.
|
||||
|
||||
[Windows](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.win/x64/sciter.dll) |
|
||||
[Linux](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so) |
|
||||
[MacOS](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.osx/libsciter.dylib)
|
||||
[macOS](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.osx/libsciter.dylib)
|
||||
|
||||
Мобільні версії використовують Flutter. У майбутньому ми перенесемо настільну версію зі Sciter на Flutter.
|
||||
## Кроки для збірки
|
||||
|
||||
## Первинні кроки для складання
|
||||
|
||||
- Підготуйте середовище розробки Rust і середовище збірки C++.
|
||||
- Підготуйте середовище розробки Rust і середовище збирання C++.
|
||||
|
||||
- Встановіть [vcpkg](https://github.com/microsoft/vcpkg), і правильно встановіть змінну `VCPKG_ROOT`.
|
||||
|
||||
- Windows: vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static
|
||||
- Linux/MacOS: vcpkg install libvpx libyuv opus aom
|
||||
- Linux/macOS: vcpkg install libvpx libyuv opus aom
|
||||
|
||||
- Запустіть `cargo run`
|
||||
|
||||
## [Збирання](https://rustdesk.com/docs/en/dev/build/)
|
||||
|
||||
## Як зібрати на Linux
|
||||
|
||||
### Ubuntu 18 (Debian 10)
|
||||
@@ -77,11 +80,12 @@ sudo apt install -y zip g++ gcc git curl wget nasm yasm libgtk-3-dev clang libxc
|
||||
libclang-dev ninja-build libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
|
||||
```
|
||||
|
||||
### openSUSE Tumbleweed
|
||||
### openSUSE Tumbleweed
|
||||
|
||||
```sh
|
||||
sudo zypper install gcc-c++ git curl wget nasm yasm gcc gtk3-devel clang libxcb-devel libXfixes-devel cmake alsa-lib-devel gstreamer-devel gstreamer-plugins-base-devel xdotool-devel
|
||||
```
|
||||
|
||||
### Fedora 28 (CentOS 8)
|
||||
|
||||
```sh
|
||||
@@ -100,7 +104,7 @@ sudo pacman -Syu --needed unzip git cmake gcc curl wget yasm nasm zip make pkg-c
|
||||
git clone https://github.com/microsoft/vcpkg
|
||||
cd vcpkg
|
||||
git checkout 2023.04.15
|
||||
cd ...
|
||||
cd ..
|
||||
vcpkg/bootstrap-vcpkg.sh
|
||||
export VCPKG_ROOT=$HOME/vcpkg
|
||||
vcpkg/vcpkg install libvpx libyuv opus aom
|
||||
@@ -119,7 +123,7 @@ cp libvpx.a $HOME/vcpkg/installed/x64-linux/lib/
|
||||
cd
|
||||
```
|
||||
|
||||
### Збірка
|
||||
### Збирання
|
||||
|
||||
```sh
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
||||
@@ -132,10 +136,6 @@ mv libsciter-gtk.so target/debug
|
||||
VCPKG_ROOT=$HOME/vcpkg cargo run
|
||||
```
|
||||
|
||||
### Змініть Wayland на X11 (Xorg)
|
||||
|
||||
RustDesk не підтримує Wayland. Дивіться [цей документ](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) для налаштування Xorg як сеансу GNOME за замовчуванням.
|
||||
|
||||
## Як зібрати за допомогою Docker
|
||||
|
||||
Почніть з клонування сховища та створення docker-контейнера:
|
||||
@@ -146,7 +146,7 @@ cd rustdesk
|
||||
docker build -t "rustdesk-builder" .
|
||||
```
|
||||
|
||||
Потім кожного разу, коли вам потрібно зібрати додаток, запускайте таку команду:
|
||||
Надалі щоразу, коли вам буде потрібно зібрати застосунок, запускайте таку команду:
|
||||
|
||||
```sh
|
||||
docker run --rm -it -v $PWD:/home/user/rustdesk -v rustdesk-git-cache:/home/user/.cargo/git -v rustdesk-registry-cache:/home/user/.cargo/registry -e PUID="$(id -u)" -e PGID="$(id -g)" rustdesk-builder
|
||||
@@ -171,6 +171,7 @@ target/release/rustdesk
|
||||
- **[libs/hbb_common](https://github.com/rustdesk/rustdesk/tree/master/libs/hbb_common)**: відеокодек, конфіг, обгортка tcp/udp, protobuf, функції fs для передавання файлів і деякі інші службові функції
|
||||
- **[libs/scrap](https://github.com/rustdesk/rustdesk/tree/master/libs/scrap)**: захоплення екрана
|
||||
- **[libs/enigo](https://github.com/rustdesk/rustdesk/tree/master/libs/enigo)**: специфічне для платформи керування клавіатурою/мишею
|
||||
- **[libs/clipboard](https://github.com/rustdesk/rustdesk/tree/master/libs/clipboard)**: реалізація копіювання та вставлення файлів для Windows, Linux, macOS.
|
||||
- **[src/ui](https://github.com/rustdesk/rustdesk/tree/master/src/ui)**: графічний інтерфейс користувача
|
||||
- **[src/server](https://github.com/rustdesk/rustdesk/tree/master/src/server)**: сервіси аудіо/буфера обміну/вводу/відео та мережевих підключень
|
||||
- **[src/client.rs](https://github.com/rustdesk/rustdesk/tree/master/src/client.rs)**: однорангове з'єднання
|
||||
|
||||
@@ -34,7 +34,6 @@ Dưới đây là những máy chủ mà bạn có thể sử dụng mà không
|
||||
| Địa điểm | Nhà cung cấp | Cấu hình |
|
||||
| --------- | ------------- | ------------------ |
|
||||
| Germany | Hetzner | 2 vCPU / 4GB RAM |
|
||||
| Germany | Codext | 4 vCPU / 8GB RAM |
|
||||
|
||||
## Dependencies
|
||||
|
||||
@@ -117,10 +116,6 @@ mv libsciter-gtk.so target/debug
|
||||
VCPKG_ROOT=$HOME/vcpkg cargo run
|
||||
```
|
||||
|
||||
### Chuyển từ Wayland sang X11 (Xorg)
|
||||
|
||||
RustDesk hiện không hỗ trợ Wayland. Hãy xem [đường linh ở đây](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/) cách để cài đặt Xorg làm session mặc định của GNOME.
|
||||
|
||||
## Cách để build sử dụng Docker
|
||||
|
||||
Bắt đầu bằng cách sao chép repo này về máy tính và build cái Docker cointainer:
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<p align="center">
|
||||
<img src="../res/logo-header.svg" alt="RustDesk - Your remote desktop"><br>
|
||||
<a href="#免费公共服务器">服务器</a> •
|
||||
<a href="#免费的公共服务器">服务器</a> •
|
||||
<a href="#基本构建步骤">编译</a> •
|
||||
<a href="#使用Docker编译">Docker</a> •
|
||||
<a href="#使用-Docker-编译">Docker</a> •
|
||||
<a href="#文件结构">结构</a> •
|
||||
<a href="#截图">截图</a><br>
|
||||
[<a href="../README.md">English</a>] | [<a href="README-UA.md">Українська</a>] | [<a href="README-CS.md">česky</a>] | [<a href="README-HU.md">Magyar</a>] | [<a href="README-ES.md">Español</a>] | [<a href="README-FA.md">فارسی</a>] | [<a href="README-FR.md">Français</a>] | [<a href="README-DE.md">Deutsch</a>] | [<a href="README-PL.md">Polski</a>] | [<a href="README-ID.md">Indonesian</a>] | [<a href="README-FI.md">Suomi</a>] | [<a href="README-ML.md">മലയാളം</a>] | [<a href="README-JP.md">日本語</a>] | [<a href="README-NL.md">Nederlands</a>] | [<a href="README-IT.md">Italiano</a>] | [<a href="README-RU.md">Русский</a>] | [<a href="README-PTBR.md">Português (Brasil)</a>] | [<a href="README-EO.md">Esperanto</a>] | [<a href="README-KR.md">한국어</a>] | [<a href="README-AR.md">العربي</a>] | [<a href="README-VN.md">Tiếng Việt</a>] | [<a href="README-GR.md">Ελληνικά</a>]<br>
|
||||
@@ -16,9 +16,19 @@ Chat with us: [知乎](https://www.zhihu.com/people/rustdesk) | [Discord](https:
|
||||
或者[自己设置](https://rustdesk.com/server),
|
||||
亦或者[开发您的版本](https://github.com/rustdesk/rustdesk-server-demo)。
|
||||
|
||||
欢迎大家贡献代码, 请看 [`docs/CONTRIBUTING.md`](CONTRIBUTING.md).
|
||||

|
||||
|
||||
[**可执行程序下载**](https://github.com/rustdesk/rustdesk/releases)
|
||||
RustDesk 期待各位的贡献. 如何参与开发? 详情请看 [CONTRIBUTING.md](CONTRIBUTING.md).
|
||||
|
||||
[**FAQ**](https://github.com/rustdesk/rustdesk/wiki/FAQ)
|
||||
|
||||
[**BINARY DOWNLOAD**](https://github.com/rustdesk/rustdesk/releases)
|
||||
|
||||
[**NIGHTLY BUILD**](https://github.com/rustdesk/rustdesk/releases/tag/nightly)
|
||||
|
||||
[<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png"
|
||||
alt="Get it on F-Droid"
|
||||
height="80">](https://f-droid.org/en/packages/com.carriez.flutter_hbb)
|
||||
|
||||
## 免费的公共服务器
|
||||
|
||||
@@ -26,8 +36,16 @@ Chat with us: [知乎](https://www.zhihu.com/people/rustdesk) | [Discord](https:
|
||||
|
||||
| Location | Vendor | Specification |
|
||||
| --------- | ------------- | ------------------ |
|
||||
| Germany | Hetzner | 2 vCPU / 4GB RAM |
|
||||
| Germany | Codext | 4 vCPU / 8GB RAM |
|
||||
| Germany | [Hetzner](https://www.hetzner.com) | 2 vCPU / 4 GB RAM |
|
||||
| Ukraine (Kyiv) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4 GB RAM |
|
||||
|
||||
## Dev Container
|
||||
|
||||
[](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/rustdesk/rustdesk)
|
||||
|
||||
如果你已经安装了 VS Code 和 Docker, 你可以点击上面的徽章开始使用. 点击后, VS Code 将自动安装 Dev Containers 扩展(如果需要),将源代码克隆到容器卷中, 并启动一个 Dev 容器供使用.
|
||||
|
||||
Go through [DEVCONTAINER.md](docs/DEVCONTAINER.md) for more info.
|
||||
|
||||
## 依赖
|
||||
|
||||
@@ -37,16 +55,14 @@ Chat with us: [知乎](https://www.zhihu.com/people/rustdesk) | [Discord](https:
|
||||
[Linux](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so) |
|
||||
[macOS](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.osx/libsciter.dylib)
|
||||
|
||||
移动版本使用Flutter,未来会将桌面版本从Sciter迁移到Flutter。
|
||||
|
||||
## 基本构建步骤
|
||||
|
||||
- 请准备好 Rust 开发环境和 C++编译环境
|
||||
- 请准备好 Rust 开发环境和 C++ 编译环境
|
||||
|
||||
- 安装[vcpkg](https://github.com/microsoft/vcpkg), 正确设置`VCPKG_ROOT`环境变量
|
||||
- 安装 [vcpkg](https://github.com/microsoft/vcpkg), 正确设置 `VCPKG_ROOT` 环境变量
|
||||
|
||||
- Windows: vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static
|
||||
- Linux/Osx: vcpkg install libvpx libyuv opus aom
|
||||
- Linux/macOS: vcpkg install libvpx libyuv opus aom
|
||||
|
||||
- 运行 `cargo run`
|
||||
|
||||
@@ -57,7 +73,15 @@ Chat with us: [知乎](https://www.zhihu.com/people/rustdesk) | [Discord](https:
|
||||
### Ubuntu 18 (Debian 10)
|
||||
|
||||
```sh
|
||||
sudo apt install -y g++ gcc git curl wget nasm yasm libgtk-3-dev clang libxcb-randr0-dev libxdo-dev libxfixes-dev libxcb-shape0-dev libxcb-xfixes0-dev libasound2-dev libpulse-dev cmake
|
||||
sudo apt install -y zip g++ gcc git curl wget nasm yasm libgtk-3-dev clang libxcb-randr0-dev libxdo-dev \
|
||||
libxfixes-dev libxcb-shape0-dev libxcb-xfixes0-dev libasound2-dev libpulse-dev cmake make \
|
||||
libclang-dev ninja-build libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
|
||||
```
|
||||
|
||||
### openSUSE Tumbleweed
|
||||
|
||||
```sh
|
||||
sudo zypper install gcc-c++ git curl wget nasm yasm gcc gtk3-devel clang libxcb-devel libXfixes-devel cmake alsa-lib-devel gstreamer-devel gstreamer-plugins-base-devel xdotool-devel
|
||||
```
|
||||
|
||||
### Fedora 28 (CentOS 8)
|
||||
@@ -107,24 +131,19 @@ cd rustdesk
|
||||
mkdir -p target/debug
|
||||
wget https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so
|
||||
mv libsciter-gtk.so target/debug
|
||||
cargo run
|
||||
VCPKG_ROOT=$HOME/vcpkg cargo run
|
||||
```
|
||||
|
||||
### 把 Wayland 修改成 X11 (Xorg)
|
||||
|
||||
RustDesk 暂时不支持 Wayland,不过正在积极开发中。
|
||||
> [点我](https://docs.fedoraproject.org/en-US/quick-docs/configuring-xorg-as-default-gnome-session/)
|
||||
查看 如何将Xorg设置成默认的GNOME session
|
||||
|
||||
## 使用 Docker 编译
|
||||
|
||||
### 构建Docker容器
|
||||
克隆版本库并构建 Docker 容器:
|
||||
|
||||
```sh
|
||||
git clone https://github.com/rustdesk/rustdesk # 克隆Github存储库
|
||||
cd rustdesk # 进入文件夹
|
||||
docker build -t "rustdesk-builder" . # 构建容器
|
||||
```
|
||||
|
||||
请注意:
|
||||
* 针对国内网络访问问题,可以做以下几点优化:
|
||||
1. Dockerfile 中修改系统的源到国内镜像
|
||||
@@ -163,8 +182,9 @@ docker build -t "rustdesk-builder" . # 构建容器
|
||||
docker build -t "rustdesk-builder" . --build-arg http_proxy=http://host:port --build-arg https_proxy=http://host:port
|
||||
```
|
||||
|
||||
### 构建RustDesk程序
|
||||
容器构建完成后,运行下列指令以完成对RustDesk应用程序的构建:
|
||||
### 构建 RustDesk 程序
|
||||
|
||||
然后, 每次需要构建应用程序时, 运行以下命令:
|
||||
|
||||
```sh
|
||||
docker run --rm -it -v $PWD:/home/user/rustdesk -v rustdesk-git-cache:/home/user/.cargo/git -v rustdesk-registry-cache:/home/user/.cargo/registry -e PUID="$(id -u)" -e PGID="$(id -g)" rustdesk-builder
|
||||
@@ -179,25 +199,25 @@ docker run --rm -it -v $PWD:/home/user/rustdesk -v rustdesk-git-cache:/home/user
|
||||
groupmod: Permission denied.
|
||||
groupmod: cannot lock /etc/group; try again later.
|
||||
```
|
||||
> **原因:** 容器的entrypoint脚本会检测UID和GID,在度判和给定的环境变量的不一致时,会强行修改user的UID和GID并重新运行。但在重启后读不到环境中的UID和GID,然后再次进入判错重启环节
|
||||
> **原因:** 容器的 entrypoint 脚本会检测 UID 和 GID,在度判和给定的环境变量的不一致时,会强行修改 user 的 UID 和 GID 并重新运行。但在重启后读不到环境中的 UID 和 GID,然后再次进入判错重启环节
|
||||
|
||||
|
||||
### 运行RustDesk程序
|
||||
### 运行 RustDesk 程序
|
||||
|
||||
生成的可执行程序在target目录下,可直接通过指令运行调试(Debug)版本的RustDesk:
|
||||
生成的可执行程序在 target 目录下,可直接通过指令运行调试 (Debug) 版本的 RustDesk:
|
||||
```sh
|
||||
target/debug/rustdesk
|
||||
```
|
||||
|
||||
或者您想运行发行(Release)版本:
|
||||
或者您想运行发行 (Release) 版本:
|
||||
|
||||
```sh
|
||||
target/release/rustdesk
|
||||
```
|
||||
|
||||
请注意:
|
||||
* 请保证您运行的目录是在RustDesk库的根目录内,否则软件会读不到文件。
|
||||
* `install`、`run`等Cargo的子指令在容器内不可用,宿主机才行。
|
||||
* 请保证您运行的目录是在 RustDesk 库的根目录内,否则软件会读不到文件。
|
||||
* `install`、`run`等 Cargo 的子指令在容器内不可用,宿主机才行。
|
||||
|
||||
## 文件结构
|
||||
|
||||
|
||||
11
docs/SECURITY-IT.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# Policy sicurezza
|
||||
|
||||
## Segnalazione di una vulnerabilità
|
||||
|
||||
Attribuiamo grande importanza alla sicurezza del progetto.
|
||||
Incoraggiamo tutti gli utenti a segnalare eventuali vulnerabilità di sicurezza che ci scoprono.
|
||||
Se trovi una vulnerabilità nel progetto RustDesk, segnalala responsabilmente inviando un'email a info@rustdesk.com.
|
||||
|
||||
Al momento non abbiamo un programma di taglia sui bug.
|
||||
Siamo una piccola squadra che cerca di risolvere un grosso problema.
|
||||
Ti esortiamo a segnalare responsabilmente tutte le vulnerabilità in modo da poter continuare a sviluppare un'applicazione sicura per l'intera comunità.
|
||||
9
docs/SECURITY-JP.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# セキュリティポリシー
|
||||
|
||||
## 脆弱性の報告
|
||||
|
||||
私たちはプロジェクトのセキュリティを非常に重視しています。私たちは、すべてのユーザーが脆弱性を発見した場合、私たちに報告することを奨励しています。
|
||||
RustDesk プロジェクトにセキュリティの脆弱性を発見した場合は、info@rustdesk.com までメールで責任を持って報告してください。
|
||||
|
||||
現時点では、バグ報奨金制度はありません。私たちは大きな問題を解決しようとしている小さなチームです。コミュニティ全体のために安全なアプリケーションを作り続けることができるよう、
|
||||
責任を持って脆弱性を報告してください。
|
||||
9
docs/SECURITY-TR.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# Güvenlik Politikası
|
||||
|
||||
## Bir Güvenlik Açığı Bildirme
|
||||
|
||||
Projemiz için güvenliği çok önemsiyoruz. Kullanıcıların keşfettikleri herhangi bir güvenlik açığını bize bildirmelerini teşvik ediyoruz.
|
||||
Eğer RustDesk projesinde bir güvenlik açığı bulursanız, lütfen info@rustdesk.com adresine sorumlu bir şekilde bildirin.
|
||||
|
||||
Şu an için bir hata ödül programımız bulunmamaktadır. Büyük bir sorunu çözmeye çalışan küçük bir ekibiz. Herhangi bir güvenlik açığını sorumlu bir şekilde bildirmenizi rica ederiz,
|
||||
böylece tüm topluluk için güvenli bir uygulama oluşturmaya devam edebiliriz.
|
||||
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 318 KiB After Width: | Height: | Size: 318 KiB |
|
Before Width: | Height: | Size: 422 KiB After Width: | Height: | Size: 419 KiB |
|
Before Width: | Height: | Size: 452 KiB After Width: | Height: | Size: 451 KiB |
|
Before Width: | Height: | Size: 379 KiB After Width: | Height: | Size: 378 KiB |
|
Before Width: | Height: | Size: 267 KiB After Width: | Height: | Size: 266 KiB |
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"id": "com.rustdesk.RustDesk",
|
||||
"runtime": "org.freedesktop.Platform",
|
||||
"runtime-version": "21.08",
|
||||
"runtime-version": "23.08",
|
||||
"sdk": "org.freedesktop.Sdk",
|
||||
"command": "rustdesk",
|
||||
"icon": "share/rustdesk/files/rustdesk.png",
|
||||
"icon": "share/icons/hicolor/scalable/apps/rustdesk.svg",
|
||||
"modules": [
|
||||
"shared-modules/libappindicator/libappindicator-gtk3-12.10.json",
|
||||
"xdotool.json",
|
||||
@@ -12,20 +12,21 @@
|
||||
"name": "rustdesk",
|
||||
"buildsystem": "simple",
|
||||
"build-commands": [
|
||||
"bsdtar -zxvf rustdesk-1.2.1.deb",
|
||||
"bsdtar -zxvf rustdesk-1.2.4.deb",
|
||||
"tar -xvf ./data.tar.xz",
|
||||
"cp -r ./usr/* /app/",
|
||||
"mkdir -p /app/bin && ln -s /app/lib/rustdesk/rustdesk /app/bin/rustdesk",
|
||||
"mv /app/share/applications/rustdesk.desktop /app/share/applications/com.rustdesk.RustDesk.desktop",
|
||||
"sed -i '/^Icon=/ c\\Icon=com.rustdesk.RustDesk' /app/share/applications/com.rustdesk.RustDesk.desktop",
|
||||
"sed -i '/^Icon=/ c\\Icon=com.rustdesk.RustDesk' /app/share/applications/rustdesk-link.desktop",
|
||||
"mv /app/share/icons/hicolor/scalable/apps/rustdesk.svg /app/share/icons/hicolor/scalable/apps/com.rustdesk.RustDesk.svg",
|
||||
"for size in 16 24 32 48 64 128 256 512; do\n rsvg-convert -w $size -h $size -f png -o $size.png logo.svg\n install -Dm644 $size.png /app/share/icons/hicolor/${size}x${size}/apps/com.rustdesk.RustDesk.png\n done"
|
||||
],
|
||||
"cleanup": ["/include", "/lib/pkgconfig", "/share/gtk-doc"],
|
||||
"sources": [
|
||||
{
|
||||
"type": "file",
|
||||
"path": "../rustdesk-1.2.1.deb"
|
||||
"path": "../rustdesk-1.2.4.deb"
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
|
||||
@@ -13,4 +13,4 @@ A few resources to get you started if this is your first Flutter project:
|
||||
|
||||
For help getting started with Flutter development, view the
|
||||
[online documentation](https://docs.flutter.dev/), which offers tutorials,
|
||||
samples, guidance on mobile development, and a full API reference.
|
||||
samples and guidance on mobile development, and a full API reference.
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
import com.google.protobuf.gradle.*
|
||||
plugins {
|
||||
id "com.google.protobuf" version "0.9.4"
|
||||
}
|
||||
|
||||
def keystoreProperties = new Properties()
|
||||
def keystorePropertiesFile = rootProject.file('key.properties')
|
||||
if (keystorePropertiesFile.exists()) {
|
||||
@@ -31,10 +36,33 @@ apply plugin: 'com.android.application'
|
||||
apply plugin: 'kotlin-android'
|
||||
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
|
||||
|
||||
dependencies {
|
||||
implementation 'com.google.protobuf:protobuf-javalite:3.20.1'
|
||||
}
|
||||
|
||||
protobuf {
|
||||
protoc {
|
||||
artifact = 'com.google.protobuf:protoc:3.20.1'
|
||||
}
|
||||
|
||||
generateProtoTasks {
|
||||
all().configureEach { task ->
|
||||
task.builtins {
|
||||
java {
|
||||
option "lite"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion 33
|
||||
sourceSets {
|
||||
main.java.srcDirs += 'src/main/kotlin'
|
||||
|
||||
main.proto.srcDirs += '../../../libs/hbb_common/protos'
|
||||
main.proto.includes += "message.proto"
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
@@ -46,7 +74,7 @@ android {
|
||||
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
|
||||
applicationId "com.carriez.flutter_hbb"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 31
|
||||
targetSdkVersion 33
|
||||
versionCode flutterVersionCode.toInteger()
|
||||
versionName flutterVersionName
|
||||
}
|
||||
@@ -65,6 +93,7 @@ android {
|
||||
// TODO: Add your own signing config for the release build.
|
||||
// Signing with the debug keys for now, so `flutter run --release` works.
|
||||
signingConfig signingConfigs.release
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules'
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -75,7 +104,7 @@ flutter {
|
||||
|
||||
dependencies {
|
||||
implementation "androidx.media:media:1.6.0"
|
||||
implementation 'com.github.getActivity:XXPermissions:16.2'
|
||||
implementation 'com.github.getActivity:XXPermissions:18.5'
|
||||
implementation("org.jetbrains.kotlin:kotlin-stdlib") { version { strictly("$kotlin_version") } }
|
||||
}
|
||||
|
||||
|
||||
4
flutter/android/app/proguard-rules
Normal file
@@ -0,0 +1,4 @@
|
||||
# Keep class members from protobuf generated code.
|
||||
-keepclassmembers class * extends com.google.protobuf.GeneratedMessageLite {
|
||||
<fields>;
|
||||
}
|
||||
@@ -61,6 +61,14 @@
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
|
||||
<!-- Intent for deep linking-->
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<data android:scheme="rustdesk" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
@@ -81,4 +89,4 @@
|
||||
android:value="2" />
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
</manifest>
|
||||
|
||||
@@ -10,12 +10,27 @@ import android.accessibilityservice.AccessibilityService
|
||||
import android.accessibilityservice.GestureDescription
|
||||
import android.graphics.Path
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.util.Log
|
||||
import android.widget.EditText
|
||||
import android.view.accessibility.AccessibilityEvent
|
||||
import android.view.ViewGroup.LayoutParams
|
||||
import android.view.accessibility.AccessibilityNodeInfo
|
||||
import android.graphics.Rect
|
||||
import android.accessibilityservice.AccessibilityServiceInfo
|
||||
import android.accessibilityservice.AccessibilityServiceInfo.FLAG_INPUT_METHOD_EDITOR
|
||||
import android.accessibilityservice.AccessibilityServiceInfo.FLAG_RETRIEVE_INTERACTIVE_WINDOWS
|
||||
import android.view.inputmethod.EditorInfo
|
||||
import androidx.annotation.RequiresApi
|
||||
import java.util.*
|
||||
import java.lang.Character
|
||||
import kotlin.math.abs
|
||||
import kotlin.math.max
|
||||
import hbb.MessageOuterClass.KeyEvent
|
||||
import hbb.MessageOuterClass.KeyboardMode
|
||||
import hbb.KeyEventConverter
|
||||
|
||||
const val LIFT_DOWN = 9
|
||||
const val LIFT_MOVE = 8
|
||||
@@ -26,6 +41,13 @@ const val WHEEL_BUTTON_UP = 34
|
||||
const val WHEEL_DOWN = 523331
|
||||
const val WHEEL_UP = 963
|
||||
|
||||
const val TOUCH_SCALE_START = 1
|
||||
const val TOUCH_SCALE = 2
|
||||
const val TOUCH_SCALE_END = 3
|
||||
const val TOUCH_PAN_START = 4
|
||||
const val TOUCH_PAN_UPDATE = 5
|
||||
const val TOUCH_PAN_END = 6
|
||||
|
||||
const val WHEEL_STEP = 120
|
||||
const val WHEEL_DURATION = 50L
|
||||
const val LONG_TAP_DELAY = 200L
|
||||
@@ -51,6 +73,8 @@ class InputService : AccessibilityService() {
|
||||
private var isWheelActionsPolling = false
|
||||
private var isWaitingLongPress = false
|
||||
|
||||
private var fakeEditTextForTextStateCalculation: EditText? = null
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.N)
|
||||
fun onMouseInput(mask: Int, _x: Int, _y: Int) {
|
||||
val x = max(0, _x)
|
||||
@@ -167,6 +191,30 @@ class InputService : AccessibilityService() {
|
||||
}
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.N)
|
||||
fun onTouchInput(mask: Int, _x: Int, _y: Int) {
|
||||
when (mask) {
|
||||
TOUCH_PAN_UPDATE -> {
|
||||
mouseX -= _x * SCREEN_INFO.scale
|
||||
mouseY -= _y * SCREEN_INFO.scale
|
||||
mouseX = max(0, mouseX);
|
||||
mouseY = max(0, mouseY);
|
||||
continueGesture(mouseX, mouseY)
|
||||
}
|
||||
TOUCH_PAN_START -> {
|
||||
mouseX = max(0, _x) * SCREEN_INFO.scale
|
||||
mouseY = max(0, _y) * SCREEN_INFO.scale
|
||||
startGesture(mouseX, mouseY)
|
||||
}
|
||||
TOUCH_PAN_END -> {
|
||||
endGesture(mouseX, mouseY)
|
||||
mouseX = max(0, _x) * SCREEN_INFO.scale
|
||||
mouseY = max(0, _y) * SCREEN_INFO.scale
|
||||
}
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.N)
|
||||
private fun consumeWheelActions() {
|
||||
if (isWheelActionsPolling) {
|
||||
@@ -221,9 +269,296 @@ class InputService : AccessibilityService() {
|
||||
}
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.N)
|
||||
fun onKeyEvent(data: ByteArray) {
|
||||
val keyEvent = KeyEvent.parseFrom(data)
|
||||
val keyboardMode = keyEvent.getMode()
|
||||
|
||||
var textToCommit: String? = null
|
||||
|
||||
if (keyboardMode == KeyboardMode.Legacy) {
|
||||
if (keyEvent.hasChr() && keyEvent.getDown()) {
|
||||
val chr = keyEvent.getChr()
|
||||
if (chr != null) {
|
||||
textToCommit = String(Character.toChars(chr))
|
||||
}
|
||||
}
|
||||
} else if (keyboardMode == KeyboardMode.Translate) {
|
||||
if (keyEvent.hasSeq() && keyEvent.getDown()) {
|
||||
val seq = keyEvent.getSeq()
|
||||
if (seq != null) {
|
||||
textToCommit = seq
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Log.d(logTag, "onKeyEvent $keyEvent textToCommit:$textToCommit")
|
||||
|
||||
if (Build.VERSION.SDK_INT >= 33) {
|
||||
getInputMethod()?.let { inputMethod ->
|
||||
inputMethod.getCurrentInputConnection()?.let { inputConnection ->
|
||||
if (textToCommit != null) {
|
||||
textToCommit?.let { text ->
|
||||
inputConnection.commitText(text, 1, null)
|
||||
}
|
||||
} else {
|
||||
KeyEventConverter.toAndroidKeyEvent(keyEvent).let { event ->
|
||||
inputConnection.sendKeyEvent(event)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
val handler = Handler(Looper.getMainLooper())
|
||||
handler.post {
|
||||
KeyEventConverter.toAndroidKeyEvent(keyEvent)?.let { event ->
|
||||
val possibleNodes = possibleAccessibiltyNodes()
|
||||
Log.d(logTag, "possibleNodes:$possibleNodes")
|
||||
for (item in possibleNodes) {
|
||||
val success = trySendKeyEvent(event, item, textToCommit)
|
||||
if (success) {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun insertAccessibilityNode(list: LinkedList<AccessibilityNodeInfo>, node: AccessibilityNodeInfo) {
|
||||
if (node == null) {
|
||||
return
|
||||
}
|
||||
if (list.contains(node)) {
|
||||
return
|
||||
}
|
||||
list.add(node)
|
||||
}
|
||||
|
||||
private fun findChildNode(node: AccessibilityNodeInfo?): AccessibilityNodeInfo? {
|
||||
if (node == null) {
|
||||
return null
|
||||
}
|
||||
if (node.isEditable() && node.isFocusable()) {
|
||||
return node
|
||||
}
|
||||
val childCount = node.getChildCount()
|
||||
for (i in 0 until childCount) {
|
||||
val child = node.getChild(i)
|
||||
if (child != null) {
|
||||
if (child.isEditable() && child.isFocusable()) {
|
||||
return child
|
||||
}
|
||||
if (Build.VERSION.SDK_INT < 33) {
|
||||
child.recycle()
|
||||
}
|
||||
}
|
||||
}
|
||||
for (i in 0 until childCount) {
|
||||
val child = node.getChild(i)
|
||||
if (child != null) {
|
||||
val result = findChildNode(child)
|
||||
if (Build.VERSION.SDK_INT < 33) {
|
||||
if (child != result) {
|
||||
child.recycle()
|
||||
}
|
||||
}
|
||||
if (result != null) {
|
||||
return result
|
||||
}
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
private fun possibleAccessibiltyNodes(): LinkedList<AccessibilityNodeInfo> {
|
||||
val linkedList = LinkedList<AccessibilityNodeInfo>()
|
||||
val latestList = LinkedList<AccessibilityNodeInfo>()
|
||||
|
||||
val focusInput = findFocus(AccessibilityNodeInfo.FOCUS_INPUT)
|
||||
var focusAccessibilityInput = findFocus(AccessibilityNodeInfo.FOCUS_ACCESSIBILITY)
|
||||
|
||||
val rootInActiveWindow = getRootInActiveWindow()
|
||||
|
||||
Log.d(logTag, "focusInput:$focusInput focusAccessibilityInput:$focusAccessibilityInput rootInActiveWindow:$rootInActiveWindow")
|
||||
|
||||
if (focusInput != null) {
|
||||
if (focusInput.isFocusable() && focusInput.isEditable()) {
|
||||
insertAccessibilityNode(linkedList, focusInput)
|
||||
} else {
|
||||
insertAccessibilityNode(latestList, focusInput)
|
||||
}
|
||||
}
|
||||
|
||||
if (focusAccessibilityInput != null) {
|
||||
if (focusAccessibilityInput.isFocusable() && focusAccessibilityInput.isEditable()) {
|
||||
insertAccessibilityNode(linkedList, focusAccessibilityInput)
|
||||
} else {
|
||||
insertAccessibilityNode(latestList, focusAccessibilityInput)
|
||||
}
|
||||
}
|
||||
|
||||
val childFromFocusInput = findChildNode(focusInput)
|
||||
Log.d(logTag, "childFromFocusInput:$childFromFocusInput")
|
||||
|
||||
if (childFromFocusInput != null) {
|
||||
insertAccessibilityNode(linkedList, childFromFocusInput)
|
||||
}
|
||||
|
||||
val childFromFocusAccessibilityInput = findChildNode(focusAccessibilityInput)
|
||||
if (childFromFocusAccessibilityInput != null) {
|
||||
insertAccessibilityNode(linkedList, childFromFocusAccessibilityInput)
|
||||
}
|
||||
Log.d(logTag, "childFromFocusAccessibilityInput:$childFromFocusAccessibilityInput")
|
||||
|
||||
if (rootInActiveWindow != null) {
|
||||
insertAccessibilityNode(linkedList, rootInActiveWindow)
|
||||
}
|
||||
|
||||
for (item in latestList) {
|
||||
insertAccessibilityNode(linkedList, item)
|
||||
}
|
||||
|
||||
return linkedList
|
||||
}
|
||||
|
||||
private fun trySendKeyEvent(event: android.view.KeyEvent, node: AccessibilityNodeInfo, textToCommit: String?): Boolean {
|
||||
node.refresh()
|
||||
this.fakeEditTextForTextStateCalculation?.setSelection(0,0)
|
||||
this.fakeEditTextForTextStateCalculation?.setText(null)
|
||||
|
||||
val text = node.getText()
|
||||
var isShowingHint = false
|
||||
if (Build.VERSION.SDK_INT >= 26) {
|
||||
isShowingHint = node.isShowingHintText()
|
||||
}
|
||||
|
||||
var textSelectionStart = node.textSelectionStart
|
||||
var textSelectionEnd = node.textSelectionEnd
|
||||
|
||||
if (text != null) {
|
||||
if (textSelectionStart > text.length) {
|
||||
textSelectionStart = text.length
|
||||
}
|
||||
if (textSelectionEnd > text.length) {
|
||||
textSelectionEnd = text.length
|
||||
}
|
||||
if (textSelectionStart > textSelectionEnd) {
|
||||
textSelectionStart = textSelectionEnd
|
||||
}
|
||||
}
|
||||
|
||||
var success = false
|
||||
|
||||
Log.d(logTag, "existing text:$text textToCommit:$textToCommit textSelectionStart:$textSelectionStart textSelectionEnd:$textSelectionEnd")
|
||||
|
||||
if (textToCommit != null) {
|
||||
if ((textSelectionStart == -1) || (textSelectionEnd == -1)) {
|
||||
val newText = textToCommit
|
||||
this.fakeEditTextForTextStateCalculation?.setText(newText)
|
||||
success = updateTextForAccessibilityNode(node)
|
||||
} else if (text != null) {
|
||||
this.fakeEditTextForTextStateCalculation?.setText(text)
|
||||
this.fakeEditTextForTextStateCalculation?.setSelection(
|
||||
textSelectionStart,
|
||||
textSelectionEnd
|
||||
)
|
||||
this.fakeEditTextForTextStateCalculation?.text?.insert(textSelectionStart, textToCommit)
|
||||
success = updateTextAndSelectionForAccessibiltyNode(node)
|
||||
}
|
||||
} else {
|
||||
if (isShowingHint) {
|
||||
this.fakeEditTextForTextStateCalculation?.setText(null)
|
||||
} else {
|
||||
this.fakeEditTextForTextStateCalculation?.setText(text)
|
||||
}
|
||||
if (textSelectionStart != -1 && textSelectionEnd != -1) {
|
||||
Log.d(logTag, "setting selection $textSelectionStart $textSelectionEnd")
|
||||
this.fakeEditTextForTextStateCalculation?.setSelection(
|
||||
textSelectionStart,
|
||||
textSelectionEnd
|
||||
)
|
||||
}
|
||||
|
||||
this.fakeEditTextForTextStateCalculation?.let {
|
||||
// This is essiential to make sure layout object is created. OnKeyDown may not work if layout is not created.
|
||||
val rect = Rect()
|
||||
node.getBoundsInScreen(rect)
|
||||
|
||||
it.layout(rect.left, rect.top, rect.right, rect.bottom)
|
||||
it.onPreDraw()
|
||||
if (event.action == android.view.KeyEvent.ACTION_DOWN) {
|
||||
val succ = it.onKeyDown(event.getKeyCode(), event)
|
||||
Log.d(logTag, "onKeyDown $succ")
|
||||
} else if (event.action == android.view.KeyEvent.ACTION_UP) {
|
||||
val success = it.onKeyUp(event.getKeyCode(), event)
|
||||
Log.d(logTag, "keyup $success")
|
||||
} else {}
|
||||
}
|
||||
|
||||
success = updateTextAndSelectionForAccessibiltyNode(node)
|
||||
}
|
||||
return success
|
||||
}
|
||||
|
||||
fun updateTextForAccessibilityNode(node: AccessibilityNodeInfo): Boolean {
|
||||
var success = false
|
||||
this.fakeEditTextForTextStateCalculation?.text?.let {
|
||||
val arguments = Bundle()
|
||||
arguments.putCharSequence(
|
||||
AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE,
|
||||
it.toString()
|
||||
)
|
||||
success = node.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments)
|
||||
}
|
||||
return success
|
||||
}
|
||||
|
||||
fun updateTextAndSelectionForAccessibiltyNode(node: AccessibilityNodeInfo): Boolean {
|
||||
var success = updateTextForAccessibilityNode(node)
|
||||
|
||||
if (success) {
|
||||
val selectionStart = this.fakeEditTextForTextStateCalculation?.selectionStart
|
||||
val selectionEnd = this.fakeEditTextForTextStateCalculation?.selectionEnd
|
||||
|
||||
if (selectionStart != null && selectionEnd != null) {
|
||||
val arguments = Bundle()
|
||||
arguments.putInt(
|
||||
AccessibilityNodeInfo.ACTION_ARGUMENT_SELECTION_START_INT,
|
||||
selectionStart
|
||||
)
|
||||
arguments.putInt(
|
||||
AccessibilityNodeInfo.ACTION_ARGUMENT_SELECTION_END_INT,
|
||||
selectionEnd
|
||||
)
|
||||
success = node.performAction(AccessibilityNodeInfo.ACTION_SET_SELECTION, arguments)
|
||||
Log.d(logTag, "Update selection to $selectionStart $selectionEnd success:$success")
|
||||
}
|
||||
}
|
||||
|
||||
return success
|
||||
}
|
||||
|
||||
|
||||
override fun onAccessibilityEvent(event: AccessibilityEvent) {
|
||||
}
|
||||
|
||||
override fun onServiceConnected() {
|
||||
super.onServiceConnected()
|
||||
ctx = this
|
||||
val info = AccessibilityServiceInfo()
|
||||
if (Build.VERSION.SDK_INT >= 33) {
|
||||
info.flags = FLAG_INPUT_METHOD_EDITOR or FLAG_RETRIEVE_INTERACTIVE_WINDOWS
|
||||
} else {
|
||||
info.flags = FLAG_RETRIEVE_INTERACTIVE_WINDOWS
|
||||
}
|
||||
setServiceInfo(info)
|
||||
fakeEditTextForTextStateCalculation = EditText(this)
|
||||
// Size here doesn't matter, we won't show this view.
|
||||
fakeEditTextForTextStateCalculation?.layoutParams = LayoutParams(100, 100)
|
||||
fakeEditTextForTextStateCalculation?.onPreDraw()
|
||||
val layout = fakeEditTextForTextStateCalculation?.getLayout()
|
||||
Log.d(logTag, "fakeEditTextForTextStateCalculation layout:$layout")
|
||||
Log.d(logTag, "onServiceConnected!")
|
||||
}
|
||||
|
||||
@@ -232,7 +567,5 @@ class InputService : AccessibilityService() {
|
||||
super.onDestroy()
|
||||
}
|
||||
|
||||
override fun onAccessibilityEvent(event: AccessibilityEvent?) {}
|
||||
|
||||
override fun onInterrupt() {}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
package hbb;
|
||||
import android.view.KeyEvent
|
||||
import android.view.KeyCharacterMap
|
||||
import hbb.MessageOuterClass.KeyboardMode
|
||||
import hbb.MessageOuterClass.ControlKey
|
||||
|
||||
object KeyEventConverter {
|
||||
fun toAndroidKeyEvent(keyEventProto: hbb.MessageOuterClass.KeyEvent): KeyEvent {
|
||||
var chrValue = 0
|
||||
var modifiers = 0
|
||||
|
||||
val keyboardMode = keyEventProto.getMode()
|
||||
|
||||
if (keyEventProto.hasChr()) {
|
||||
if (keyboardMode == KeyboardMode.Map || keyboardMode == KeyboardMode.Translate) {
|
||||
chrValue = keyEventProto.getChr()
|
||||
} else {
|
||||
chrValue = convertUnicodeToKeyCode(keyEventProto.getChr() as Int)
|
||||
}
|
||||
} else if (keyEventProto.hasControlKey()) {
|
||||
chrValue = convertControlKeyToKeyCode(keyEventProto.getControlKey())
|
||||
}
|
||||
|
||||
var modifiersList = keyEventProto.getModifiersList()
|
||||
|
||||
if (modifiersList != null) {
|
||||
for (modifier in keyEventProto.getModifiersList()) {
|
||||
val modifierValue = convertModifier(modifier)
|
||||
modifiers = modifiers or modifierValue
|
||||
}
|
||||
}
|
||||
|
||||
var action = 0
|
||||
if (keyEventProto.getDown()) {
|
||||
action = KeyEvent.ACTION_DOWN
|
||||
} else {
|
||||
action = KeyEvent.ACTION_UP
|
||||
}
|
||||
|
||||
return KeyEvent(0, 0, action, chrValue, 0, modifiers)
|
||||
}
|
||||
|
||||
private fun convertModifier(controlKey: hbb.MessageOuterClass.ControlKey): Int {
|
||||
// Add logic to map ControlKey values to Android KeyEvent key codes.
|
||||
// You'll need to provide the mapping for each key.
|
||||
return when (controlKey) {
|
||||
ControlKey.Alt -> KeyEvent.META_ALT_ON
|
||||
ControlKey.Control -> KeyEvent.META_CTRL_ON
|
||||
ControlKey.CapsLock -> KeyEvent.META_CAPS_LOCK_ON
|
||||
ControlKey.Meta -> KeyEvent.META_META_ON
|
||||
ControlKey.NumLock -> KeyEvent.META_NUM_LOCK_ON
|
||||
ControlKey.RShift -> KeyEvent.META_SHIFT_RIGHT_ON
|
||||
ControlKey.Shift -> KeyEvent.META_SHIFT_ON
|
||||
ControlKey.RAlt -> KeyEvent.META_ALT_RIGHT_ON
|
||||
ControlKey.RControl -> KeyEvent.META_CTRL_RIGHT_ON
|
||||
else -> 0 // Default to unknown.
|
||||
}
|
||||
}
|
||||
|
||||
private val tag = "KeyEventConverter"
|
||||
|
||||
private fun convertUnicodeToKeyCode(unicode: Int): Int {
|
||||
val charMap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD)
|
||||
android.util.Log.d(tag, "unicode: $unicode")
|
||||
val events = charMap.getEvents(charArrayOf(unicode.toChar()))
|
||||
if (events != null && events.size > 0) {
|
||||
android.util.Log.d(tag, "keycode ${events[0].keyCode}")
|
||||
return events[0].keyCode
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
private fun convertControlKeyToKeyCode(controlKey: hbb.MessageOuterClass.ControlKey): Int {
|
||||
// Add logic to map ControlKey values to Android KeyEvent key codes.
|
||||
// You'll need to provide the mapping for each key.
|
||||
return when (controlKey) {
|
||||
ControlKey.Alt -> KeyEvent.KEYCODE_ALT_LEFT
|
||||
ControlKey.Backspace -> KeyEvent.KEYCODE_DEL
|
||||
ControlKey.Control -> KeyEvent.KEYCODE_CTRL_LEFT
|
||||
ControlKey.CapsLock -> KeyEvent.KEYCODE_CAPS_LOCK
|
||||
ControlKey.Meta -> KeyEvent.KEYCODE_META_LEFT
|
||||
ControlKey.NumLock -> KeyEvent.KEYCODE_NUM_LOCK
|
||||
ControlKey.RShift -> KeyEvent.KEYCODE_SHIFT_RIGHT
|
||||
ControlKey.Shift -> KeyEvent.KEYCODE_SHIFT_LEFT
|
||||
ControlKey.RAlt -> KeyEvent.KEYCODE_ALT_RIGHT
|
||||
ControlKey.RControl -> KeyEvent.KEYCODE_CTRL_RIGHT
|
||||
ControlKey.DownArrow -> KeyEvent.KEYCODE_DPAD_DOWN
|
||||
ControlKey.LeftArrow -> KeyEvent.KEYCODE_DPAD_LEFT
|
||||
ControlKey.RightArrow -> KeyEvent.KEYCODE_DPAD_RIGHT
|
||||
ControlKey.UpArrow -> KeyEvent.KEYCODE_DPAD_UP
|
||||
ControlKey.End -> KeyEvent.KEYCODE_MOVE_END
|
||||
ControlKey.Home -> KeyEvent.KEYCODE_MOVE_HOME
|
||||
ControlKey.PageUp -> KeyEvent.KEYCODE_PAGE_UP
|
||||
ControlKey.PageDown -> KeyEvent.KEYCODE_PAGE_DOWN
|
||||
ControlKey.Insert -> KeyEvent.KEYCODE_INSERT
|
||||
ControlKey.Escape -> KeyEvent.KEYCODE_ESCAPE
|
||||
ControlKey.F1 -> KeyEvent.KEYCODE_F1
|
||||
ControlKey.F2 -> KeyEvent.KEYCODE_F2
|
||||
ControlKey.F3 -> KeyEvent.KEYCODE_F3
|
||||
ControlKey.F4 -> KeyEvent.KEYCODE_F4
|
||||
ControlKey.F5 -> KeyEvent.KEYCODE_F5
|
||||
ControlKey.F6 -> KeyEvent.KEYCODE_F6
|
||||
ControlKey.F7 -> KeyEvent.KEYCODE_F7
|
||||
ControlKey.F8 -> KeyEvent.KEYCODE_F8
|
||||
ControlKey.F9 -> KeyEvent.KEYCODE_F9
|
||||
ControlKey.F10 -> KeyEvent.KEYCODE_F10
|
||||
ControlKey.F11 -> KeyEvent.KEYCODE_F11
|
||||
ControlKey.F12 -> KeyEvent.KEYCODE_F12
|
||||
ControlKey.Space -> KeyEvent.KEYCODE_SPACE
|
||||
ControlKey.Tab -> KeyEvent.KEYCODE_TAB
|
||||
ControlKey.Return -> KeyEvent.KEYCODE_ENTER
|
||||
ControlKey.Delete -> KeyEvent.KEYCODE_FORWARD_DEL
|
||||
ControlKey.Clear -> KeyEvent.KEYCODE_CLEAR
|
||||
ControlKey.Pause -> KeyEvent.KEYCODE_BREAK
|
||||
else -> 0 // Default to unknown.
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -44,7 +44,6 @@ import java.nio.ByteBuffer
|
||||
import kotlin.math.max
|
||||
import kotlin.math.min
|
||||
|
||||
|
||||
const val DEFAULT_NOTIFY_TITLE = "RustDesk"
|
||||
const val DEFAULT_NOTIFY_TEXT = "Service is running"
|
||||
const val DEFAULT_NOTIFY_ID = 1
|
||||
@@ -71,20 +70,35 @@ class MainService : Service() {
|
||||
|
||||
@Keep
|
||||
@RequiresApi(Build.VERSION_CODES.N)
|
||||
fun rustMouseInput(mask: Int, x: Int, y: Int) {
|
||||
fun rustPointerInput(kind: String, mask: Int, x: Int, y: Int) {
|
||||
// turn on screen with LIFT_DOWN when screen off
|
||||
if (!powerManager.isInteractive && mask == LIFT_DOWN) {
|
||||
if (!powerManager.isInteractive && (kind == "touch" || mask == LIFT_DOWN)) {
|
||||
if (wakeLock.isHeld) {
|
||||
Log.d(logTag,"Turn on Screen, WakeLock release")
|
||||
Log.d(logTag, "Turn on Screen, WakeLock release")
|
||||
wakeLock.release()
|
||||
}
|
||||
Log.d(logTag,"Turn on Screen")
|
||||
wakeLock.acquire(5000)
|
||||
} else {
|
||||
InputService.ctx?.onMouseInput(mask,x,y)
|
||||
when (kind) {
|
||||
"touch" -> {
|
||||
InputService.ctx?.onTouchInput(mask, x, y)
|
||||
}
|
||||
"mouse" -> {
|
||||
InputService.ctx?.onMouseInput(mask, x, y)
|
||||
}
|
||||
else -> {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Keep
|
||||
@RequiresApi(Build.VERSION_CODES.N)
|
||||
fun rustKeyEventInput(input: ByteArray) {
|
||||
InputService.ctx?.onKeyEvent(input)
|
||||
}
|
||||
|
||||
@Keep
|
||||
fun rustGetByName(name: String): String {
|
||||
return when (name) {
|
||||
@@ -197,6 +211,7 @@ class MainService : Service() {
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
Log.d(logTag,"MainService onCreate")
|
||||
init(this)
|
||||
HandlerThread("Service", Process.THREAD_PRIORITY_BACKGROUND).apply {
|
||||
start()
|
||||
serviceLooper = looper
|
||||
@@ -301,7 +316,6 @@ class MainService : Service() {
|
||||
mediaProjection =
|
||||
mediaProjectionManager.getMediaProjection(Activity.RESULT_OK, it)
|
||||
checkMediaPermission()
|
||||
init(this)
|
||||
_isReady = true
|
||||
} ?: let {
|
||||
Log.d(logTag, "getParcelableExtra intent null, invoke requestMediaProjection")
|
||||
|
||||
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 5.9 KiB |
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 487 B |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 715 B After Width: | Height: | Size: 383 B |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 719 B |
|
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 884 B |
|
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 1.4 KiB |
@@ -1,5 +1,6 @@
|
||||
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:accessibilityEventTypes="typeWindowsChanged"
|
||||
android:canRetrieveWindowContent="true"
|
||||
android:accessibilityFlags="flagDefault"
|
||||
android:notificationTimeout="50"
|
||||
android:description="@string/accessibility_service_description"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
buildscript {
|
||||
ext.kotlin_version = '1.7.10'
|
||||
ext.kotlin_version = '1.9.10'
|
||||
repositories {
|
||||
google()
|
||||
jcenter()
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path fill="#fff" d="M12 0C5.374 0 0 5.373 0 12c0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23A11.509 11.509 0 0 1 12 5.803c1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576C20.566 21.797 24 17.3 24 12c0-6.627-5.373-12-12-12z"/></svg>
|
||||
|
Before Width: | Height: | Size: 792 B |
|
Before Width: | Height: | Size: 18 KiB |
1
flutter/assets/auth-apple.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><circle cx="512" cy="512" r="512" fill="#999"/><path fill="#fff" d="M407.2 722.1c-10.1-6.7-19-15-26.5-24.5-8.2-9.9-15.7-20.3-22.7-31-16.3-23.9-29.1-50-38-77.5-10.7-32-15.8-62.7-15.8-92.7 0-33.5 7.2-62.7 21.4-87.2 10.4-19.2 26-35.2 44.8-46.5 18.1-11.3 39.2-17.5 60.6-17.9 7.5 0 15.6 1.1 24.1 3.2 6.2 1.7 13.6 4.5 22.8 7.9 11.7 4.5 18.1 7.2 20.3 7.9 6.8 2.6 12.6 3.6 17.1 3.6 3.4 0 8.3-1.1 13.8-2.8 3.1-1.1 9-3 17.3-6.6 8.2-3 14.8-5.5 19.9-7.5 7.9-2.3 15.5-4.5 22.4-5.5 8.3-1.3 16.6-1.7 24.5-1.1 15.1 1.1 29 4.3 41.4 9 21.7 8.7 39.3 22.4 52.4 41.8-5.5 3.4-10.7 7.4-15.5 11.7-10.4 9.2-19.2 20-26.2 32.1-9.2 16.4-13.9 35-13.7 53.7.3 23.1 6.2 43.4 17.9 61 8.3 12.8 19.3 23.8 32.7 32.7 6.6 4.5 12.4 7.6 17.9 9.6-2.6 8-5.4 15.8-8.6 23.5-7.4 17.2-16.2 33.7-26.7 49.3-9.2 13.4-16.5 23.5-22 30.1-8.6 10.2-16.8 17.9-25.2 23.4-9.2 6.1-19.9 9.3-31 9.3-7.5.3-14.9-.6-22-2.7-6.2-2-12.3-4.3-18.3-6.9-6.2-2.9-12.7-5.3-19.3-7.2-8.1-2.1-16.4-3.2-24.8-3.1-8.5 0-16.8 1.1-24.7 3.1-6.6 1.9-13 4.2-19.3 6.9-9 3.7-14.8 6.2-18.2 7.2-6.9 2-14 3.3-21.1 3.7-11.1 0-21.4-3.2-31.7-9.6zm146.1-393.6c-14.5 7.2-28.3 10.3-42.1 9.3-2.1-13.8 0-27.9 5.8-43.4 5.1-13.2 11.9-25.2 21.3-35.8 9.8-11.1 21.5-20.3 34.8-26.9 14.1-7.2 27.5-11.1 40.3-11.7 1.7 14.5 0 28.8-5.3 44.1-4.9 13.6-12.1 26.2-21.3 37.5-9.3 11.1-20.8 20.3-33.8 26.9z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
1
flutter/assets/auth-auth0.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="32" height="32"><path d="M29.307 9.932 26.161 0H5.796L2.692 9.932c-1.802 5.75.042 12.271 5.089 16.021L16.01 32l8.208-6.068c5.005-3.75 6.911-10.25 5.089-16.021l-8.214 6.104 3.12 9.938-8.208-6.13-8.208 6.104 3.141-9.911-8.25-6.063 10.177-.063 3.146-9.891 3.141 9.87z"/></svg>
|
||||
|
After Width: | Height: | Size: 285 B |
1
flutter/assets/auth-azure.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="199"><path fill="#0089d6" d="M118.432 187.698c32.89-5.81 60.055-10.618 60.367-10.684l.568-.12-31.052-36.935c-17.078-20.314-31.051-37.014-31.051-37.11 0-.182 32.063-88.477 32.243-88.792.06-.105 21.88 37.567 52.893 91.32 29.035 50.323 52.973 91.815 53.195 92.203l.405.707-98.684-.012-98.684-.013 59.8-10.564zM0 176.435c0-.052 14.631-25.451 32.514-56.442l32.514-56.347 37.891-31.799C123.76 14.358 140.867.027 140.935.001c.069-.026-.205.664-.609 1.534s-18.919 40.582-41.145 88.25l-40.41 86.67-29.386.037c-16.162.02-29.385-.005-29.385-.057z"/></svg>
|
||||
|
After Width: | Height: | Size: 604 B |
1
flutter/assets/auth-default.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="120" height="120"><path d="M142.554 52.81c0-4.113 1.078-6.374 5.369-11.26 17.207-19.593 57.193-19.593 74.4 0 4.291 4.886 5.37 7.147 5.37 11.26v5.145h-85.14zm71.239-42.863 6.676-6.692 10.462 10.74 25.49-25.453 6.133 6.543-31.536 32.356-17.225-17.494Zm-34.474 3.377c-15.027-5.337-19.348-22.264-8.57-33.575 10.85-11.387 29.85-6.099 34.149 9.503 2.523 9.161-4.38 21.951-12.951 23.995-4.39 1.58-8.73 1.433-12.628.077z" style="fill:#024eff;fill-opacity:1;stroke-width:.999998" transform="translate(-142.554 44.365)"/></svg>
|
||||
|
After Width: | Height: | Size: 564 B |
1
flutter/assets/auth-facebook.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><rect width="512" height="512" fill="#1877f2" rx="76.8"/><path fill="#fff" d="m355.6 330 11.4-74h-71v-48c0-20.2 9.9-40 41.7-40H370v-63s-29.3-5-57.3-5c-58.5 0-96.7 35.4-96.7 99.6V256h-65v74h65v182h80V330z"/></svg>
|
||||
|
After Width: | Height: | Size: 274 B |
1
flutter/assets/auth-github.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 24 24"><path fill="#231f20" d="M12 1A10.89 10.89 0 0 0 1 11.77 10.79 10.79 0 0 0 8.52 22c.55.1.75-.23.75-.52v-1.83c-3.06.65-3.71-1.44-3.71-1.44a2.86 2.86 0 0 0-1.22-1.58c-1-.66.08-.65.08-.65a2.31 2.31 0 0 1 1.68 1.11 2.37 2.37 0 0 0 3.2.89 2.33 2.33 0 0 1 .7-1.44c-2.44-.27-5-1.19-5-5.32a4.15 4.15 0 0 1 1.11-2.91 3.78 3.78 0 0 1 .11-2.84s.93-.29 3 1.1a10.68 10.68 0 0 1 5.5 0c2.1-1.39 3-1.1 3-1.1a3.78 3.78 0 0 1 .11 2.84A4.15 4.15 0 0 1 19 11.2c0 4.14-2.58 5.05-5 5.32a2.5 2.5 0 0 1 .75 2v2.95s.2.63.75.52A10.8 10.8 0 0 0 23 11.77 10.89 10.89 0 0 0 12 1"/></svg>
|
||||
|
After Width: | Height: | Size: 582 B |