Entorpy's blog

投袂剑起,澄清泾渭


  • 首页

  • 关于

  • 标签

  • 归档

  • 公益404

配置xorg的xrdp

发表于 2019-03-10

这可能是中文教程里唯一一篇配置以xorg方式登录的xrdp配置教程。
我几乎找遍了全网,几乎都是以xvnc方式登录的。
我的情况:
搭载以debian为基础的armbian的orange pi lite2

正文

首先我们得有个图形界面,这里我安装xfce4,其他没试过。

1
apt install xorg xfce4

然后就是安装xrdp,xrdp依赖于vnc,我们还得安装一个vnc服务端,vnc服务端在debian上可以用apt直接安装的有三个。我只安装过vnc4server还有tighvncserver,tighvncserver在我的设备上并不能让xrdp正常用,但是很多教程里教唆安装tighvncserver,这导致我几个星期内配置好xrdp。还要安装的是本文章的核心xorgxrdp,这个包支持xrdp以xorg登录,这个包在我的armbian上安装xrdp时不会自动安装,这也就是我写这篇文章的缘由。

1
apt install vnc4server xrdp xorgxrdp

然后就是指定窗口管理器,这个步骤在安装了多个桌面的系统上尤为重要。

1
echo xfce4-session > ~/.xsession

xrdp的配置

1
在/etc/xrdp/startwm.sh里的./etc/X11/Xsession的前一行加入xfce4-session

有的系统可能在/etc/xrdp/startwm.sh里没有./etc/X11/Xsession,但是有exec /bin/bash /etc/X11/Xsession,那么就加在这一行前面,这两行同一个作用。这个步骤在很多教程都写错了。

最后重启xrdp生效

1
service xrdp restart

无屏幕无pc配置安装香橙派

发表于 2019-03-10

首先说说我的情况吧,无pc,无屏幕。仅有手机一台,板子是orange pi lite2(没有网口)。

正文

方法主要是利用手机刷写镜像和用usb网络共享和ssh来完成配置所以需要准备一下几点
1.一台具有dd、ssh、arp命令并且系统支持usb网络共享的手机,手机得装有终端模拟器,还得具有root权限(dd命令一般都自带,ssh的话los系列的rom一般也自带。如果没自带的话就用termux安装dropbear。arp命令busybox里有,手机没自带可以考虑安装busybox)
2.一个有默认开启了usb网络共享并且ssh默认开启的镜像的板子,这个板子还得有usb口。(我这里是orange pi lite2的armbian,官方镜像默认没开启usb网络共享。如果你没有默认开启你可以考虑修改官方镜像来开启这些)
3.usb线
4.内存卡(镜像刷写于此)
满足以上情况的可以进行下一步

刷写镜像

首先得到armbian的官网获得镜像。
然后就是在终端模拟器里面刷写

1
dd if=镜像的路径 of=sd卡分区的块设备

注意我这里是默认手机已经插入了sd卡的,一般来说sd卡在手机里面的块设备文件有两个mmcblk1、mmcblk1p1,在这里我们得刷入到前者。

配置orange pi

usb线连接手机与orange pi。然后把板子连上电源,再打开手机的usb网络共享。到终端里输入

1
arp -a

以此来查看板子的ip。注意如果你连接了wifi可能会出现很多,但是你可以通过看主机名来判断哪个是你的板子,香橙派的armbian的默认主机名通常是 orange pi xxxx
知晓了板子的ip后就可以通过ssh登录板子并进行配置啦

1
ssh root@板子的ip

armbian第一次登陆默认的密码为1234,登录之后要求你再输入一遍密码,然后会要求你设置root用户密码并创建一个普通用户。

在安卓上使用运行debian

发表于 2019-01-08

人在外面,有时候可能需要用linux做一点小事情。但是呢又不想带电脑,尽管可以通过ssh连接你的pc或者vps来干,但是这样还是不是如何方便。那么我这个方法就有了意义。
我这个方法主要是通过编写一个适合于你的设备的initscript并执行它来引导启动在你安卓设备上的一个linux发行版文件系统。在这里我用debian为例,但是这个方法理论上使用于所有。
注意:如果你的设备没有获得root那么你也许就可以退出这篇博文了。

准备需要的文件与工具

1.busybox

需要使用到busybox中的chroot,mount,mdev。如果你的手机上那么就不用安装。

2.终端模拟器

需要访问本地shell

3.debian的文件系统

因为以debian为例所以是debian,也可以是其他。请注意这个文件系统一定要是兼容你处理器架构的。这个文件系统可以自己用debootstrap制作。也可以直接下载linuxdeploy仓库里面的使用,在文章的最后面我将贴出一部分linuxdeploy仓库里面的linux发行版的文件系统,如果你愿意支持linuxdeploy的作者的话可以去linuxdeploy里购买这些东西,毕竟人家也是要吃饭的。

开始

1.首先需要把处理一下这个下载的debian文件系统。我这里是把这个文件系统放在data分区的某个目录。你可以单独放在一个分区或者制作成镜像文件,这样的隔离效果可能会更好吧。
2.把安装在系统里的静态busybox拷贝一份到你debian文件系统里面去,因为initscript引导启动这个debian的时候需要初始化dev,但是Debian的udev依赖于内核中的devtmpfs,然而Android 的内核多半精简掉了这个组件。所以我们需要使用busybox中的mdev来代替udev。如果你安装的busybox没有包含mdev那么需要换一个busybox。
3.编写适用于你的设备的initscript,这个需要根据个人的手机来编写但是大多是通用的。下面我贴出我的initscript。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#! /bin/dash

# 初始化用户变量
export PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin
export HOME=/root
export SHELL=/bin/bash
export TERMINFO=/etc/terminfo
export LD_LIBRARY_PATH=/lib:/usr/lib

#设置主机名
hostname JHB

#挂载虚拟文件系统
mount sysfs /sys -t sysfs
mount proc /proc -t proc
mount tmpfs /dev -t tmpfs
busybox mdev -s
mkdir /dev/pts
mount devpts /dev/pts -t devpts
mkdir /dev/shm
mount -t tmpfs tmpfs /dev/shm
chmod -R 777 /dev/
mount tmpfs /run/lock -t tmpfs -o rw,nosuid,nodev,noexec,relatime,size=5120k
clear
/bin/bash

这个script的保存的位置可以随意,但是必须要在你的debian文件系统里面,我建议是放在debian文件系统的根目录。
4.测试并运行吧,然后根据自己的需求进行一定修改。在终端里输入:

1
chroot 你的debian文件系统的目录 以debian文件系统为根目录initscript的位置

一部分linuxdeploy仓库的linux发行版文件系统

archlinux_arm
archlinux_x86
centos_arm
centos_x86
debian_arm
debian_x86
就提供这六个吧,想用其他的可以自己去linuxdeploy里购买,但是其实只要知道自己的需要然后根据我上面的链接改一下就好了。

自制一个在安卓上运行的linux

发表于 2019-01-08

其实在此之前有一篇通过编写initscript并执行来启动现有的linux发行版文件系统的博文,这样虽然能使用但是那些现有的linux中有很多无用的组件(如果因为安卓内核问题无法使用的udev还有systemd等等)并且精简起来相当麻烦,而且通过这种方式运行起来的还是有一些问题的。
然后针对于以上情况处理了几天之后始终不能让自己满意,然后我就想到了自己编译一个busybox并用它来自制。这样确实很不错,busybox有很多工具而且体积相当的小,动态的还不到1m。更重要的是可以直接用busybox的linuxrc来启动自己制作的linux,这样的话和真机启动几乎一样,不用编写initscript。

准备

busybox源代码一份
宿主机一台。因为我使用的手机所以并不需要配置交叉编译等,如果你的宿主机与你的手机处理器架构不兼容的话,可能需要配置交叉编译的环境。
手机得安装busybox,因为需要用到chroot,而这个工具一般都没有只能安装自带的busybox。

编译busybox并制作rootfs

1.编译并安装busybox

1
2
3
# make defconfig
# make -j8
# make install

如果没有指定路径的话,busybox将会被安装在busybox源代码目录文件夹下的_install文件夹下。
把_install目录给剪切出来重命名,并完善这个rootfs

2.创建必要的文件夹并添加必要的库文件

1
mkdir -pv etc/init.d var/log root home lib dev proc sys boot mnt media tmp share run

因为是编译的动态的busybox,所以需要c库文件。先通过ldd命令是哪些,然后再cp过来就ok。

3.为linuxrc进程提供配置文件:(inittab)

1
2
3
4
5
6
vim etc/initab
内容如下
::sysinit:/etc/init.d/rcS
#定义rcS的位置
::once:/usr/sbin/telnetd -l /bin/login -p 23
#开启telnetd服务来进行登录

请注意因为安卓内核问题没法使用tty等串口设备,所以没法进行本地登录,一旦强行使用tty等串口设备进行本地登录时,sh会打印tty设备无法打开的错误在屏幕上。这也是我在这里定义使用telnetd服务远程登录的原因。

4.建立系统初始化脚本

vim etc/init.d/rcS

1
2
3
4
5
6
7
8
9
10
11
#! /bin/sh
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mount -t tmpfs tmpfs /dev
mdev -s
mkdir /dev/pts
mount -t devpts devpts /dev/pts
mkdir /dev/shm
mount -t tmpfs tmpfs /dev/shm
hostname -F /etc/hostname
mount -a

5.为系统准备一个“文件系统表”配置文件/etc/fstab

1
touch /etc/fstab

我这里什么也不添加。

6.添加登录认证功能

从宿主机复制group,passwd,shadow文件,并且只留下这些文件的root项。

7.为系统提供主机名称

1
2
3
vim etc/hostname
内容如下
JHB

8.为系统设置输入提示信息

1
2
3
vim etc/profile
内容如下
export PS1='[\u@\h \A \W]\\$ '

9.添加dns功能

为名称解析服务复制必要的库文件,把宿主机的/lib目录下以文件文件名包括libnss_files的全部拷贝过来
为目标主机建立名称解析文件nsswitch.conf

1
2
3
4
5
6
vim etc/nsswitch.conf
添加如下内容
passwd: files
group: files
shadow: files
hosts: files dns

设置dns服务器

1
2
3
4
vim etc/resolv.conf
内容如下
nameserver 111.8.14.18
nameserver 211.142.211.124

从宿主机上复制hosts文件。

10.校准系统时区

把宿主机/etc/localtime文件复制过来。

测试

做完以上操作之后就有了个能在安卓上跑的linux
使用chroot开启

1
chroot . /linuxrc

然后终端就会卡着不动,这正常因为我没有在initab设置本地登录。这也不可以。关闭这个终端用telnet连接即可

1
telnet 127.0.0.1:23

因为登录认证文件用的是宿主机的,所以登录密码与宿主机一致。

如果没有什么问题就成功了,但是此时目标系统还未安装各类工具软件,busybox自带dpkg可以在debian的官网上下载apt以及依赖包安装并配置好,这里就不再详述了。
…

安哲贝

Entropy

4 日志
1 标签
© 2017 — 2019 安哲贝
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.4