thảo luận GNU/Linux, *nix - Thảo luận chung

  • Người tạo chủ đề Người tạo chủ đề idmresettrial
  • Ngày bắt đầu Ngày bắt đầu
Trạng thái
Không mở để trả lời thêm.
Em đang tính trải nghiệm đổi gió tí, bác nào cho em vài gợi ý đi, ổn định thì em mua thêm cây ssd nữa =))
 
sao bác biết em đang xài con card nividia hay , ý bác là muốn xài con 1050 lap của em chỉ có xài ubuntu được chứ không xài mấy cái kia dc hả
Mình không biết bác xài card màn hình gì, ý mình là nếu xài nvidia thì thằng ubuntu nó hỗ trợ tốt nhất, đến mức tích hợp cả driver nguồn đóng vào bộ cài
 
sao bác biết em đang xài con card nividia hay , ý bác là muốn xài con 1050 lap của em chỉ có xài ubuntu được chứ không xài mấy cái kia dc hả

Cái nào xài cũng được, nhưng ubuntu nó hỗ trợ ngon, cơ mà xác định xài lap có card rời thì lên linux bỏ cái card đi cho nhẹ đầu. Chỉnh chọt mệt.
 
Cái nào xài cũng được, nhưng ubuntu nó hỗ trợ ngon, cơ mà xác định xài lap có card rời thì lên linux bỏ cái card đi cho nhẹ đầu. Chỉnh chọt mệt.
hoặc là mua card của amd, khỏi cần chỉnh chọt gì, cài là chiến.
 
Dùng Linux cảm giác control được hệ thống, sướng vl:still_dreaming:
Windows với macos ko có cảm giác này:angry:
 
đổi gió qua thằng budgie tí
MmNLrvL.jpg
 
Thím Chiến bị nhiễm covid à? =((
Xem tệp đính kèm 136167
Bị stress thím:tire:
... Cứ nhìn đời theo kiểu ngu si hưởng thái bình chính ra lại sướng :tire:
Nói hơi quá tí thôi chứ mình còn yêu đời lắm, chết thế ếu nào được:big_smile:
Hà Nội vừa mưa mát trời vãi
sống trên đời có đủ hỉ nộ ái ố, ai mà sống đủ lâu chả trải qua 4 cái trạng thái ấy
 
Sửa lần cuối:
tối qua ngồi cả đêm chỉ để debug cái vụ tại sao OS không nhận diện USB được gắn vô.

cuối cùng nguyên nhân là do mình ngày xưa setup cái mount /var/run với /run trong fstab và nó bị conflict với mấy cái boot script (nó mount /run trong script),

kết quả của vụ mount đè là nó giấu mất cái file socket /run/udev/control -> udisksd cóc thèm monitor udev -> không thấy usb cắm vô =]]
may mà để ý thấy cái thông báo lỗi "the udev service seems not to be active, disable the monitor" mới lọ mọ đi tìm chứ không thì cũng khốt.

1596274269003.png


Nguyên tắc làm việc của đám này khá đơn giản.

udev nó detect được sự kiện thay đổi phần cứng sẽ broadcast thông tin thông qua local netlink socket,udisks2 muốn monitor sự kiện thì tiến hành mở socket rồi chờ trên đấy, khi có sự kiện nó sẽ xử lý chuỗi rồi tạo D-BUS message bắn vô cho cái org.freedesktop.UDisks2

đồng chí nào muốn xử lý mount thì chỉ cần bind zô rồi chờ sự kiện là được.

sample code chôm trên stack sửa tí.
C:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <linux/netlink.h>
#include <unistd.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <linux/netlink.h>

#define NETLINK_TEST    17
#define MYGROUP         1

#define MAX_PAYLOAD 1024  /* maximum payload size*/
struct sockaddr_nl src_addr, dest_addr;
union {
    struct nlmsghdr nlh;
    char raw[8192];
} buf;
struct iovec iov;
int sock_fd;
struct msghdr msg;

int main()
{
    int ret, fd, i;
    char *event_buf;
    char action[50];

    printf("Creating socket\n");
    sock_fd=socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT);
    if(sock_fd<0) {
        printf("Socket creating failed\n");
        return -1;
    }

    memset(&src_addr, 0, sizeof(src_addr));
    src_addr.nl_family = AF_NETLINK;
    src_addr.nl_pid = getpid();  /* self pid */
    src_addr.nl_groups = MYGROUP;
    /* interested in group 1<<0 */
    ret = bind(sock_fd, (struct sockaddr*)&src_addr,
            sizeof(src_addr));
    if (ret < 0) {
        printf("Bind Failed\n");
        perror("bind:");
        return -1;
    }

    memset(&dest_addr, 0, sizeof(dest_addr));
    dest_addr.nl_family = AF_NETLINK;
    dest_addr.nl_pid = 0;   /* For Linux Kernel */
    dest_addr.nl_groups = 0; /* unicast */

    memset(&buf, 0, sizeof(buf));
    iov.iov_base = &buf;
    iov.iov_len = sizeof(buf);
    msg.msg_name = (void *)&dest_addr;
    msg.msg_namelen = sizeof(dest_addr);
    msg.msg_iov = &iov;
    msg.msg_iovlen = 1;
#if 1
    /* Read message from kernel */
    while (1) {
        recvmsg(sock_fd, &msg, 0);
            event_buf = buf.raw;
            printf("EVT = %s\n", event_buf);
    }
end:
    close(sock_fd);
#endif
    return 0;
}

compile thì cứ gcc -o testudev testudev.c -ludev là xong.

giới thiệu luôn cái tool startmon: https://github.com/pturmel/startmon

dùng nó để theo dõi các thread được khởi tạo và thoát cũng vui lắm.
 
Trạng thái
Không mở để trả lời thêm.

Thống kê chủ đề

Ngày tạo
idmresettrial,
Người trả lời cuối
Fioren,
Trả lời
13.168
Lượt xem
1.528.909
Quay lại
Lên đầu trang