首页 文章 精选 留言 我的

精选列表

搜索[linux],共10000篇文章
优秀的个人博客,低调大师

Linux NFS服务器的安装与配置详解

一、NFS服务简介 NFS是Network File System(网络文件系统)。主要功能是通过网络让不同的服务器之间可以共享文件或者目录。NFS客户端一般是应用服务器(比如web,负载均衡等),可以通过挂载的方式将NFS服务器端共享的目录挂载到NFS客户端本地的目录下。 NFS在文件传送过程中依赖与RPC(远程过程调用)协议。NFS本身是没有提供信息传送的协议和功能的,但是能够用过网络进行图片,视频,附件等分享功能。只要用到NFS的地方都需要启动RPC服务,不论是NFS的服务端还是客户端。 NFS和RPC的关系:可以理解为NFS是一个网络文件系统(比喻为租房的房主),而RPC是负责信息的传输(中介),客户端(相当于租房的租客) 二、系统环境: [root@oldboy~]#cat/etc/redhat-release##查看系统版本信息 CentOSrelease6.7(Final) [root@oldboy~]#uname-r##查看内核信息 2.6.32-573.el6.x86_64 [root@oldboy~]#uname-m##查看系统是32位还是64位的 x86_64 三、服务端配置 在启动NFS服务之前,首先要启动RPC服务(CentOS5是portmap服务,CentOS6.6以后的版本是rpcbind服务),否则NFS服务器无法向RPC服务注册。另外,RPC服务如果重启,原来以及有的NFS端口就会丢失,因此,只要RPC服务重启,NFS服务就要重启向RPC重新注册新的随机端口号。一般修改NFS配置文件后,不需要重启服务,直接平滑重启即可,命令:/etc/init.d/nfs reload或者exportfs -rv就可以修改/etc/exports生效。 /etc/init.d/nfs reload的作用是:让已经到达服务器的请求给他处理完毕,但是没有到达服务器的请求,就把它断掉。就相当于我们去车站坐车,车子即将出发时,已经上车的就可以正常出发,没有赶上车的就没有办法跟车出发。 要部署NFS服务,需要安装下面的软件包: 1)nfs-utils:NFS服务的主程序 2)rpcbing:NFS可以视为一个RPC的主程序,在启动任何一个RPC程序之前,需要做好端口和功能的对应映射工作 1)查看NFS的软件包 [root@oldboy~]#rpm-qanfs-utilsrpcbind nfs和rpc默认是没有安装的,需要yum安装 2)CentOS6.7默认没有安装软件包,可以使用yum install nfs-utils rpcbind -y命令来安装NFS软件 [root@oldboy~]#yuminstallnfs-utilsrpcbind-y [root@oldboy~]#rpm-qanfs-utilsrpcbind nfs-utils-1.2.3-70.el6_8.2.x86_64 rpcbind-0.2.0-12.el6.x86_64 3)启动NFS服务 第一步:先启动rpc服务 [root@oldboy~]#/etc/init.d/rpcbindstart#启动rpc服务 [root@oldboy~]#/etc/init.d/rpcbindstatus#查看rpc服务状态 rpcbind(pid4269)正在运行... 第二步:启动NFS服务 [root@oldboy~]#/etc/init.d/nfsstart#启动nfs服务 [root@oldboy~]#/etc/init.d/nfsstatus#查看nfs服务状态 rpc.svcgssd已停 rpc.mountd(pid3282)正在运行... nfsd(pid32983297329632953294329332923291)正在运行... rpc.rquotad(pid3277)正在运行... 必须要先启动rpc服务,然后再启动NFS服务,如果先启动NFS服务,启动服务时会失败,提示如下 [root@oldboy~]#/etc/init.d/nfsstart 启动NFS服务:[确定] 关掉NFS配额:无法注册服务:RPC:无法接收;errno=拒绝连接 rpc.rquotad:unabletoregister(RQUOTAPROG,RQUOTAVERS,udp). [失败] 启动NFSmountd:[失败] 启动NFS守护进程: [root@oldboy~]#rpcinfo-p172.16.1.31#查看NFS服务向rpc注册的端口信息,主端口号是:111 programversprotoportservice 1000004tcp111portmapper 1000003tcp111portmapper 1000002tcp111portmapper 1000004udp111portmapper 1000003udp111portmapper 1000002udp111portmapper 1000111udp875rquotad 1000112udp875rquotad 1000111tc p875rquotad 1000112tcp875rquotad 第三步:检查开机是否自启动 [root@oldboy~]#chkconfignfson [root@oldboy~]#chkconfigrpcbindon [root@oldboy~]#chkconfig--listnfs nfs0:关闭1:关闭2:启用3:启用4:启用5:启用6:关闭 [root@oldboy~]#chkconfig--listrpcbind rpcbind0:关闭1:关闭2:启用3:启用4:启用5:启用6:关闭 [root@oldboy~]#tail-2/etc/rc.local /etc/init.d/rpcbindstart /etc/init.d/nfsstart 在工作中,大都是统一按照运维规范将服务的启动命令放到/etc/rc.local里面,而不是用chkconfig来管理的,所有的服务一旦开机自启动就必须放到/etc/rc.local中。这样的好处是,一旦管理此服务器的人员离职忙活着业务迁移都可以通过/etc/rc.local很容易的查看到服务器对应的相关服务,可以方便的运维管理。 4)NFS服务端配置文件的配置 NFS默认配置文件路径是:/etc/exports,文件默认是空的。 /etc/exports配置文件的格式是: NFS共享的目录 NFS客户端地址(参数1,参数2) [root@oldboy~]#cat/etc/exports #share/databyoldboyforbingbingat20160425 /data172.16.1.0/24(rw,sync)##一条配置搞定NFS配置文件 其中:/data是服务器端共享的目录 172.16.1.0/24共享目录的客户端ip地址 (rw,sync),其中rw代表拥有读写的权限,sync代表数据同步写入NFS服务器端的硬盘中。也可以用async,async是大数据时使用,是先写到缓存区,再写到磁盘里。 vNFS共享的目录:为NFS服务器端要共享的实际目录,要用决定路径,如(/data)。注意共享目录的本地权限,需要读写权限,一定要让本地目录可以被NFS客户端的用户读写 vNFS客户端地址:为NFS服务器端授权的可访问的共享目录的NFS客户端地址,可以为单独的ip地址或者主机名,域名等,也可以是整个网段的地址。 创建/data目录,并且属主和属组都为:nfsnobody,其中nfsnobody是安装nfs服务时默认的用户 [root@oldboy~]#mkdir/data-p [root@oldboy~]#chown-Rnfsnobody:nfsnobody/data [root@oldboy~]#ls-ld/data drwxr-xr-x6nfsnobodynfsnobody409612月820:17/data [root@oldboy~]#/etc/init.d/nfsreload [root@oldboy~]#showmount-e172.16.1.31##本地测试,说明服务端测试成功 Exportlistfor172.16.1.31: /data172.16.1.0/24 四、客户端配置 1.客户端和服务端一样,也要安装nfs和rpm的安装包。(配置见服务器端) 2.客户端需要启动rpc服务,加入开机自启动,不需要启动nfs服务。(配置见服务器端) 3.测试: 第一步:ping,能不能ping通服务器端ip地址 [root@oldboy~]#ping172.16.1.31 PING172.16.1.31(172.16.1.31)56(84)bytesofdata. 64bytesfrom172.16.1.31:icmp_seq=1ttl=64time=0.383ms 64bytesfrom172.16.1.31:icmp_seq=2ttl=64time=0.434ms 64bytesfrom172.16.1.31:icmp_seq=3ttl=64time=0.420ms 64bytesfrom172.16.1.31:icmp_seq=4ttl=64time=0.437ms 64bytesfrom172.16.1.31:icmp_seq=5ttl=64time=0.439ms ^C ---172.16.1.31pingstatistics--- 5packetstransmitted,5received,0%packetloss,time4997ms rttmin/avg/max/mdev=0.383/0.422/0.439/0.030ms 第二步:telnet服务端的111端口 [root@oldboy~]#telnet172.16.1.31111 Trying172.16.1.31... Connectedto172.16.1.31. Escapecharacteris'^]'. 第三步:showmount服务端 [root@oldboy~]#showmount-e172.16.1.31 Exportlistfor172.16.1.31: /data172.16.1.0/24 第四步:挂载,文件共享 [root@oldboy~]#mount-tnfs172.16.1.31:/data//mnt 第五步:查看是否挂载成功了 [root@oldboy~]#df-h FilesystemSizeUsedAvailUse%Mountedon /dev/sda38.8G1.5G6.9G18%/ tmpfs491M0491M0%/dev/shm /dev/sda1190M36M145M20%/boot 172.16.1.31:/data/8.8G1.5G7.0G18%/mnt 说明客户端测试成功,配置完成。

优秀的个人博客,低调大师

Linux下grub配置文件以及加密和解密

操作环境:CentOS 6.8 一、grub的配置文件 [root@localhost~]#vi/boot/grub/grub.conf//编辑配置文件 default=0//设定默认启动的菜单项;落单项(title)编号从0开始 timeout=3//指定菜单项等待选项选择的时长 titleDashuiLinux//定义菜单项“标题”,可出现多次 root(hd0,0)//:grub查找stage2及kernel文件所在设备分区;为grub“根” kernel/vmlinuz-2.6.32-642.el6.x86_64root=/dev/vg0/root//启动的内核 initrd/initramfs-2.6.32-642.el6.x86_64.img//内核匹配的ramfs文件 其中还有几项没有列出来,如下 splashp_w_picpath=(hd#,#)/PATH/TO/XPM_FILE:菜单背景图片文件路径 hiddenmenu:隐藏菜单 password[--md5]STRING:启动菜单编辑认证 password[--md5]STRING:启动选定的内核或操作系统时进行认证 二、对grub文件进行加密 [root@localhost~]#grub-md5-crypt//将密码使用md5加密转换下 Password: Retypepassword: $1$kPLWy$0KdG91RdiCro4cU/gUXp4/ [root@localhost~]#vi/boot/grub/grub.conf default=0 timeout=3 password--md5$1$kPLWy$0KdG91RdiCro4cU/gUXp4/输入加密过的口令 titleDashuiLinux root(hd0,0) kernel/vmlinuz-2.6.32-642.el6.x86_64root=/dev/vg0/root initrd/initramfs-2.6.32-642.el6.x86_64.img 重新启动查看效果 三、如果进入单用户模式 (1) 编辑grub菜单(选定要编辑的title,而后使用e命令);(2) 在选定的kernel后附加1, s, S或single都可以;(3) 在kernel所在行,键入“b”命令 实例:如果用户忘记了其root密码,可以通过开机进入单用户模式,然后更改root密码,进入单用户模式如上所述,进入后我们只需要执行passwd 四、有一种相当糟糕的状况,假使你忘记了root密码,而且由于记性不好又忘记了grub菜单的密码,这如何解决? 1)重启按esc键选择光盘启动(要挂在本地镜像光盘) 2)选择进入救援模式 3)经过一系列的语言网络选择(网络配置选择no),我们终于来到了救援模式的shell界面,不过此时所在的并不是我们真的rootfs,所以我们需要切换到真正的root,即chroot /mnt/sysp_w_picpath 4)然后我们就可以编辑/boot/grub/grub.conf配置文件,删除password加密的行 5)exit后重新启动即可,此时grub的密码已经被我们取消了,root密码的问题也迎刃而解,即可以再救援模式修改,也可以在单用户修改密码

优秀的个人博客,低调大师

Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理》——2.5 异常处理类中断服务程序挂接

2.5 异常处理类中断服务程序挂接 不论是用户进程还是系统内核都要经常使用中断或遇到很多异常情况需要处理,如CPU在参与运算过程中,可能会遇到除零错误、溢出错误、边界检查错误、缺页错误……免不了需要“异常处理”。中断技术也是广泛使用的,系统调用就是利用中断技术实现的。这些中断、异常都需要具体的服务程序来执行。trap_init()函数将中断、异常处理的服务程序与IDT进行挂接,逐步重建中断服务体系,支持内核、进程在主机中的运算。挂接的具体过程及异常处理类中断服务程序在IDT中所占用的位置如图2-6所示。 执行代码如下: //代码路径:init/main.c: void main(void) { … trap_init(); … } //代码路径:kernel/traps.c: void trap_init(vo

优秀的个人博客,低调大师

Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理》——2.10 初始化缓冲区管理结构

2.10 初始化缓冲区管理结构 缓冲区是内存与外设(如硬盘,以后以硬盘为例)进行数据交互的媒介。内存与硬盘最大的区别在于,硬盘的作用仅仅是对数据信息以很低的成本做大量数据的断电保存,并不参与运算(因为CPU无法到硬盘上进行寻址),而内存除了需要对数据进行保存以外,更重要的是要与CPU、总线配合进行数据运算。缓冲区则介于两者之间,它既对数据信息进行保存,也能够参与一些像查找、组织之类的间接、辅助性运算。有了缓冲区这个媒介以后,对外设而言,它仅需要考虑与缓冲区进行数据交互是否符合要求,而不需要考虑内存如何使用这些交互的数据;对内存而言,它也仅需要考虑与缓冲区交互的条件是否成熟,而不需要关心此时外设对缓冲区的交互情况。两者的组织、管理和协调将由操作系统统一操作。操作系统通过hash_table[NR_HASH]、buffer_head双向

优秀的个人博客,低调大师

Linux 环境下,Apache DolphinScheduler 如何驱动 Flink 消费 Kafka 数据?

已经在虚拟机部署好Apache DolphinScheduler了,想尝试下在Flink新建一个Flink节点,然后用Flink消费Kafka数据。 Apache DolphinScheduler用的是单机部署,具体操作可以参考官方文档:DolphinScheduler | 文档中心(https://dolphinscheduler.apache.org/zh-cn/docs/3.3.2/guide/installation/standalone). 前置条件:已经安装Java 11、DolphinScheduler 3.3.2、Flink 1.18.1、Kafka 3.6.0,Zookeeper用Kafka内置的。建议这些安装都下载二进制的安装包到虚拟机安装,用命令安装的不可控,我下载的二进制包如下: 配置好Flink的环境变量 1、编辑环境变量: sudo vim ~/.bashrc 增加Flink的路径 2、使环境变量生效: #使环境变量生效 source ~/.bashrc #查看环境变量 echo $Flink_HOME 修改Kafka、Flink以及DolphinScheduler的配置文件 因为用的是虚拟机,为了让外面的主机能够访问到虚拟机的网络,需要修改下配置文件 修改Kafka配置:找到Kafka安装包下的config文件夹,修改config下的server.properties文件,修改listeners是为了外面的主机能够访问到虚拟机的Kafka,还有把advertised.listeners改成虚拟机地址,写样例的时候能连上虚拟机的Kafka地址,不然默认连localhost broker.id=0 listeners=PLAINTEXT://0.0.0.0:9092 #192.168.146.132修改成虚拟机ip advertised.listeners=PLAINTEXT://192.168.146.132:9092 修改Flink配置:找到Flink安装包下的conf文件夹,修改conf下的Flink-conf.yaml文件,把里面所有的localhost地址全部改成0.0.0.0,以便主机能访问到虚拟机的Flink。还有增加jobmanager和taskmanager的内存 jobmanager.rpc.address: 0.0.0.0 jobmanager.bind-host: 0.0.0.0 jobmanager.cpu.cores: 1 jobmanager.memory.process.size: 1600m taskmanager.bind-host: 0.0.0.0 taskmanager.host: 0.0.0.0 taskmanager.memory.process.size: 2048m taskmanager.cpu.cores: 1 修改Apache DolphinScheduler的配置文件,从Apache DolphinScheduler的启动脚本文件dolphinscheduler-daemon.sh可以看出,配置环境变量用的是bin/env文件夹下的dolphinscheduler_env.sh。 查看dolphinscheduler-daemon.sh文件: 修改dolphinscheduler_env.sh文件,新增JAVA、Flink路径: #修改成自己的JAVA、Flink路径 export JAVA_HOME=/data/jdk-11.0.29 export Flink_HOME=/data/Flink-1.18.1 关闭防火墙,启动应用 启动应用,包括Zookeeper、Kafka、Flink以及Apache DolphinScheduler。 #关闭防火墙 sudo systemctl stop firewalld # 在 Flink 根目录下,执行以下命令启动 Flink 集群 bin/start-cluster.sh # 启动 ZooKeeper bin/zookeeper-server-start.sh config/zookeeper.properties & # 启动 Kafka 服务器 bin/Kafka-server-start.sh config/server.properties & #创建 Kafka 主题 bin/Kafka-topics.sh --create --topic test --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1 #使用命令行生产者发送消息 bin/Kafka-console-producer.sh --topic test --bootstrap-server localhost:9092 #消费 bin/Kafka-console-consumer.sh --topic test --from-beginning --bootstrap-server localhost:9092 # 启动 Standalone Server 服务 bash ./bin/dolphinscheduler-daemon.sh start standalone-server 测试 测试Flink、Apache DolphinScheduler是否能访问成功。 Flink访问地址:http://localhost:8081/,localhost改成自己虚拟机地址 Apache DolphinScheduler访问地址:http://localhost:12345/dolphinscheduler/ui ,localhost改成自己虚拟机地址即可登录系统 UI。默认的用户名和密码是 admin/dolphinscheduler123 编写样例 用Flink消费Kafka数据,然后打包上传到Apache DolphinScheduler,启动Flink任务: 编写样例: pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>Flink-Kafka-demo</artifactId> <version>1.0-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <Flink.version>1.18.1</Flink.version> <scala.binary.version>2.12</scala.binary.version> <Kafka.version>3.6.0</Kafka.version> </properties> <dependencies> <!-- Flink核心依赖 --> <dependency> <groupId>org.apache.Flink</groupId> <artifactId>Flink-java</artifactId> <version>${Flink.version}</version> </dependency> <dependency> <groupId>org.apache.Flink</groupId> <artifactId>Flink-streaming-java</artifactId> <version>${Flink.version}</version> </dependency> <dependency> <groupId>org.apache.Flink</groupId> <artifactId>Flink-clients</artifactId> <version>${Flink.version}</version> </dependency> <!-- 连接器基础依赖 --> <dependency> <groupId>org.apache.Flink</groupId> <artifactId>Flink-connector-base</artifactId> <version>${Flink.version}</version> </dependency> <!-- Kafka连接器(关键修改点) --> <dependency> <groupId>org.apache.Flink</groupId> <artifactId>Flink-connector-Kafka</artifactId> <version>3.1.0-1.18</version> </dependency> <dependency> <groupId>org.apache.Kafka</groupId> <artifactId>Kafka-clients</artifactId> <version>${Kafka.version}</version> </dependency> <!-- 日志依赖 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.36</version> <scope>runtime</scope> </dependency> </dependencies> <repositories> <repository> <id>aliyun</id> <url>https://maven.aliyun.com/repository/public</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>apache-releases</id> <url>https://repository.apache.org/content/repositories/releases/</url> </repository> </repositories> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>${maven.compiler.source}</source> <target>${maven.compiler.target}</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.4</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <artifactSet> <excludes> <exclude>org.apache.Flink:force-shading</exclude> <exclude>com.google.code.findbugs:jsr305</exclude> <exclude>org.slf4j:*</exclude> </excludes> </artifactSet> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> </configuration> </execution> </executions> </plugin> </plugins> </build> </project> FlinkKafkaConsumerExample.java import org.apache.Flink.api.common.functions.FlatMapFunction; import org.apache.Flink.api.java.tuple.Tuple2; import org.apache.Flink.api.java.utils.ParameterTool; import org.apache.Flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.Flink.streaming.api.datastream.DataStream; import org.apache.Flink.streaming.api.functions.ProcessFunction; import org.apache.Flink.streaming.api.functions.sink.RichSinkFunction; import org.apache.Flink.util.Collector; import org.apache.Flink.streaming.connectors.Kafka.FlinkKafkaConsumer; import org.apache.Flink.api.common.serialization.SimpleStringSchema; import org.apache.Kafka.clients.consumer.ConsumerConfig; import org.apache.Kafka.common.serialization.StringDeserializer; import java.util.Properties; import java.util.concurrent.CompletableFuture; public class FlinkKafkaConsumerExample { private static volatile int messageCount = 0; private static volatile boolean shouldStop = false; public static void main(String[] args) throws Exception { // 设置执行环境 final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // Kafka 配置 Properties properties = new Properties(); properties.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "192.168.146.132:9092"); // Kafka broker 地址 properties.setProperty(ConsumerConfig.GROUP_ID_CONFIG, "test-group"); // 消费者组 properties.setProperty(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); properties.setProperty(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); // 创建 Kafka 消费者 FlinkKafkaConsumer<String> KafkaConsumer = new FlinkKafkaConsumer<>("test", new SimpleStringSchema(), properties); KafkaConsumer.setStartFromEarliest(); // 从最早的消息开始消费 DataStream<String> stream = env.addSource(KafkaConsumer); // 处理数据:分词和计数 DataStream<Tuple2<String, Integer>> counts = stream .flatMap(new Tokenizer()) .keyBy(value -> value.f0) .sum(1); counts.addSink(new RichSinkFunction<Tuple2<String, Integer>>() { @Override public void invoke(Tuple2<String, Integer> value, Context context) { System.out.println(value); messageCount++; // 检查是否达到停止条件 if (messageCount >= 2 && !shouldStop) { System.out.println("Processed 2 messages, stopping job."); shouldStop = true; // 设置标志位,表示应该停止 } } }); // 执行作业并获取 JobClient CompletableFuture<Void> future = CompletableFuture.runAsync(() -> { try { // 启动作业并获取 JobClient org.apache.Flink.core.execution.JobClient jobClient = env.executeAsync("Flink Kafka WordCount"); System.out.println("Job ID: " + jobClient.getJobID()); // 监测条件并取消作业 while (!shouldStop) { Thread.sleep(100); // 每100毫秒检查一次 } // 达到停止条件时取消作业 if (shouldStop) { System.out.println("Cancelling the job..."); jobClient.cancel().get(); // 取消作业 } } catch (Exception e) { e.printStackTrace(); } }); // 在主线程中等待作业结束 future.join(); // 等待作业完成 } // Tokenizer 类用于将输入字符串转化为单词 public static final class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> { @Override public void flatMap(String value, Collector<Tuple2<String, Integer>> out) { String[] tokens = value.toLowerCase().split("\\W+"); for (String token : tokens) { if (token.length() > 0) { out.collect(new Tuple2<>(token, 1)); } } } } } 打包上传到Apache DolphinScheduler 新建Flink节点,并启动 在Apache DolphinScheduler的任务实例看启动日志: 在虚拟机启动生产者,输出字符串,然后可以在Flink查看输出Kafka生产的消息: 原文链接:https://blog.csdn.net/Analyze_ing/article/details/156940553

优秀的个人博客,低调大师

IceWM 4.0.0 发布,Linux / BSD 轻量级窗口管理器

IceWM 4.0.0 现已发布,改进了 Alt+Tab 快速切换功能。Alt +Tab 窗口切换器现在可以处理水平和垂直模式下的大量应用程序窗口。在 Alt+Tab 中输入应用程序类名的首字母,即可选择该应用程序类的下一个实例窗口。 用户也可以按数字键选择应用程序。在水平模式下,还可以使用鼠标在 Alt+Tab 中选择应用程序。此外,还支持使用所有导航键来导航快速切换窗口。按下 Alt+Tab 上的菜单按钮即可打开系统菜单。新增QuickSwitchPreview预览模式,可在快速切换过程中实时更新应用程序预览效果。 Fixes 修复 OpenBSD 的键盘布局切换问题。 修复在 secondary screen 上拖动桌面迷你图标的问题。 当工作区名称从外部更改时,更新任务栏上的工作区名称。 修复任务窗格与工作区窗格重叠的问题。 防止停靠层窗口退出时可能发生的崩溃。 在 icewm-menu-fdo 中初始化用户的默认语言环境。 Changes Alpha blending 和 32 位 RGBA 已成为默认设置。 移除 DoubleBuffer 和 QuickSwitchMaxWidth 首选项。 在 WM_ICON_SIZE 中宣布支持高分辨率图标。 将图标大小标准化为 16、22、24、32、48、64、128 和 256。 通过在服务器端缓存图标图片来加快图标绘制速度。 当 clock led pixmap 缺失时,使用 clock font 代替。 将窗口标题限制为 128 字节,并去除尾随空格。 /proc/net/dev 上的 I/O 故障最多报告一次。 调整 HiDPI 显示器的子菜单指示器大小。 启动时从桌面读取额外的工作区名称。 将 getWorkspaceName 和 getWorkspaceNames 添加到 icesh。 为 icesh 的 loadicon 和 saveicon 函数添加诊断信息输出。 已更新的翻译:瑞典语、加泰罗尼亚语、德语、日语、荷兰语、斯洛伐克语、印尼语、葡萄牙语、巴西葡萄牙语、斯洛文尼亚语。 详情可查看 :https://github.com/ice-wm/icewm/releases/tag/4.0.0

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

用户登录
用户注册