Skip to content

Commit

Permalink
support ascii art
Browse files Browse the repository at this point in the history
  • Loading branch information
root committed Dec 9, 2015
1 parent 72c4ee4 commit 90145c3
Show file tree
Hide file tree
Showing 8 changed files with 369 additions and 353 deletions.
21 changes: 18 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,29 @@
# berry-dm
# berry-dm: Display Manager for Berry Linux

Minimalistic display manager for console.

## Installation

To run berry-dm

$ berry-dm

To make berry-dm

```Bash
gcc -o berry-dm -Os berry-dm.c login.c -lcursesw -lform -lpam -lpam_misc
clang -o berry-dm -Os berry-dm.c login.c ui.c 3rd/ini.c -lm -lpam -lpam_misc
mv berry-dm /usr/local/sbin/
cp berry-dm.pam /etc/pam.d/berry-dm
gcc -std=c99 -Os -o berry-getty berry-getty.c
cp berry-dm.conf /etc/
cp berry-logo.txt /etc/
clang -Os -o berry-getty berry-getty.c
```

## Configuration

See /etc/berry-dm.conf for example.

## Screenshot

![Screenshot](screen.png)

1 change: 1 addition & 0 deletions berry-dm.c
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@
#include <unistd.h>
#include <fcntl.h>
#include <sys/vt.h>
#include <sys/ioctl.h>

#include <security/pam_appl.h>
#include <security/pam_misc.h>
Expand Down
7 changes: 5 additions & 2 deletions berry-dm.conf
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
; for berry-dm

[config]
sessions = Maynard (Weston),maynard,LXDE,/etc/X11/berryos-xsession,Console,bash,Reboot,reboot,Shutdown,shutdown -h now
sessions = LXDE,/etc/X11/berryos-xsession,Maynard (Weston),maynard,Console,bash,Reboot,reboot,Shutdown,shutdown -h now
users = berry,root
languages = Japanese,ja_JP.utf8,English,en_US.utf8,Chinese,zh_TW.utf8
image = logo.txt
image = /etc/berry-logo.txt

F7 = ls
F8 = ls
F9 = mount /dev/sda7 /root
F10 = ntpd -q -p pool.ntp.org
F11 = reboot
F12 = shutdown -h now
File renamed without changes.
253 changes: 7 additions & 246 deletions login.c
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
// berry-dm
// Copyright © 2014-2015 Yuichiro Nakada
//
// gcc -o berry-dm -Os berry-dm.c login.c -lcursesw -lform -lpam -lpam_misc
// clang -o berry-dm -Os berry-dm.c login.c ui.c 3rd/ini.c -lm -lpam -lpam_misc
// clang -o berry-dm -Os berry-dm.c login.c ui.c -lcursesw -lform -lpam -lpam_misc

#include <locale.h>
#include <form.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>

#define WIDTH 25
#define N_FIELDS 4+1

extern void dm_select(); // ui.c
extern int dm_main(int argc, char **argv); // berry-dm.c

#if 0
#include <fcntl.h>
Expand Down Expand Up @@ -68,7 +66,7 @@ int authenticate(char *service, char *user, char *pass)

if (retval == PAM_SUCCESS) {
reply = (struct pam_response *)malloc(sizeof(struct pam_response));
reply[0].resp = pass;
reply[0].resp = strdup(pass); // ?? need strdup
reply[0].resp_retcode = 0;

retval = pam_authenticate(pamh, 0);
Expand Down Expand Up @@ -118,243 +116,6 @@ char* rtrim(char* p)
}
}*/

//#include "mya.h"
#include <linux/reboot.h>
void dm_select()
{
FIELD *field[N_FIELDS];
FORM *my_form;
int ch, i;

//set_printk(0);

/* Initialize curses */
setlocale(LC_ALL, "");
initscr();
cbreak();
noecho();
keypad(stdscr, TRUE);

/* Initialize the fields */
int w, h, STARTX, STARTY;
getmaxyx(stdscr, h, w);
STARTX = w/2 - 11/2;
STARTY = h/2 - N_FIELDS/2;
for (i=0; i < N_FIELDS-1; i++) {
field[i] = new_field(1, WIDTH, STARTY + i * 2, STARTX, 0, 0);
}
field[N_FIELDS - 1] = NULL;

// Set field options
field_opts_off(field[0], O_EDIT); // This field is a static label
// field_opts_off(field[1], O_AUTOSKIP); /* To avoid entering the same field */
field_opts_off(field[2], O_PUBLIC); // This filed is like a password field
field_opts_off(field[3], O_EDIT); // This field is a static label
/* after last character is entered */

/* Create the form and post it */
my_form = new_form(field);
post_form(my_form);
refresh();

/*WINDOW *win = newwin(10, 10, h-10, w-10);
set_form_win(my_form, win);
box(win, ACS_VLINE, ACS_HLINE);
wrefresh(win);*/

int sel[2];
sel[0] = sel[1] = 0;
const char *array[][2] = {
"Maynard (Weston)",
"maynard",
"LXDE",
"/etc/X11/berryos-xsession",
"Console",
"bash",
"Reboot",
"reboot",
"Shutdown",
"shutdown -h now"
};
const char *lang[][2] = {
"Japanese", "ja_JP.utf8",
"English", "en_US.utf8",
"Chinese", "zh_TW.utf8"
};

// usleep(500000);
#if 1
// set_field_just(field[0], JUSTIFY_CENTER); /* Center Justification */
set_field_buffer(field[0], 0, array[sel[0]][0]);
set_field_buffer(field[1], 0, "berry");
set_field_buffer(field[3], 0, lang[sel[1]][0]);
/*set_field_pad(field[0], 0);
set_field_pad(field[1], 0);
set_field_pad(field[2], 0);
set_field_pad(field[3], 0);*/

/* Initialize the field */
mvprintw(STARTY, STARTX-11, "SESSION : ");
mvprintw(STARTY+2, STARTX-11, "USER : ");
mvprintw(STARTY+4, STARTX-11, "PASSWORD : ");
mvprintw(STARTY+6, STARTX-11, "LANGUAGE : ");
set_current_field(my_form, field[2]);
move(STARTY+4, STARTX);
refresh();
#endif

/* Loop through to get user requests */
timeout(5000);
do {
int x, y;
// char str[256];
getyx(stdscr, y, x);
//mvprintw(h-23, w-50, "%s", aa);
/* clear();
// form_driver(my_form, REQ_VALIDATION);
// strcpy(str, field_buffer(field[1], 0));
// mvprintw(0, 0, "[%s]", str);
set_field_buffer(field[0], 0, array[sel[0]][0]);
// set_field_buffer(field[1], 0, rtrim(str));
// set_field_buffer(field[1], 0, field_buffer(field[1], 0));
set_field_buffer(field[3], 0, lang[sel[1]][0]);
mvprintw(STARTY, STARTX-11, "SESSION : ");
mvprintw(STARTY+2, STARTX-11, "USER : ");
mvprintw(STARTY+4, STARTX-11, "PASSWORD : ");
mvprintw(STARTY+6, STARTX-11, "LANGUAGE : ");*/
time_t now = time(NULL);
mvprintw(h-1, 0, "%s", ctime(&now));
refresh();
move(y, x);

ch = getch();
switch (ch) {
case ERR: // Timeout
break;

case KEY_F(10):
system("ntpd -q -p pool.ntp.org");
break;
case KEY_F(11):
system("reboot");
//sync();
//reboot(LINUX_REBOOT_CMD_RESTART);
break;
case KEY_F(12):
system("shutdown -h now");
//sync();
//reboot(LINUX_REBOOT_CMD_POWER_OFF);
break;

case 9: // tab key
case 10: // enter key
case KEY_DOWN:
form_driver(my_form, REQ_NEXT_FIELD);
form_driver(my_form, REQ_END_LINE);
break;
case KEY_BTAB:
case KEY_UP:
form_driver(my_form, REQ_PREV_FIELD);
form_driver(my_form, REQ_END_LINE);
break;
case KEY_LEFT:
if (field_index(current_field(my_form))!=3) {
// Session
sel[0]--;
if (sel[0]<0) sel[0] = 4;
set_field_buffer(field[0], 0, array[sel[0]][0]);
} else {
sel[1]--;
if (sel[1]<0) sel[1] = 2;
set_field_buffer(field[3], 0, lang[sel[1]][0]);
}
break;
case KEY_RIGHT:
if (field_index(current_field(my_form))!=3) {
// Session
sel[0]++;
if (sel[0]>=5) sel[0] = 0;
set_field_buffer(field[0], 0, array[sel[0]][0]);
} else {
sel[1]++;
if (sel[1]>=3) sel[1] = 0;
set_field_buffer(field[3], 0, lang[sel[1]][0]);
}
break;
case KEY_BACKSPACE:
case 127:
form_driver(my_form, REQ_LEFT_CHAR);
case KEY_DC:
form_driver(my_form, REQ_DEL_CHAR);
break;
/*case KEY_IC: // Insert
if (insert_mode == INSERT) {
insert_mode = OVERLAY;
form_driver(my_form, REQ_OVL_MODE);
} else {
insert_mode = INSERT;
form_driver(my_form, REQ_INS_MODE);
}
break;*/
default:
// If this is a normal character, it gets Printed
form_driver(my_form, ch);
}

if (ch == /*KEY_F(1)*/10) {
char *user = rtrim(strdup(field_buffer(field[1], 0)));
char *pass = rtrim(strdup(field_buffer(field[2], 0)));
//mvprintw(1, 0, "[%s]", user);
//mvprintw(2, 0, "[%s]", pass);
int r = authenticate("system-auth", user, pass);
free(user);
//free(pass);
if (!r) break;
// mvprintw(h-1, w-17, "Not Authenticated");
mvprintw(0, 0, "Not Authenticated");
}
} while (1);

// Set the field!!
form_driver(my_form, REQ_NEXT_FIELD);

// Get user selection
// char *p = rtrim(field_buffer(field[0], 0));
// if (!strcmp(p, "startlxde")) {
const char *p = array[sel[0]][1];
// if (!strcmp(p, "/etc/lxdm/Xsession")) {
if (!strcmp(p, "/etc/X11/berryos-xsession")) {
// for X
// setenv("DM_XSESSION", "/etc/lxdm/Xsession", 1);
setenv("DM_XSESSION", "/etc/X11/berryos-xsession", 1);
} else {
// for weston etc...
setenv("DM_RUN_SESSION", "1", 1);
setenv("DM_XSESSION", p, 1);
setenv("DM_XINIT", p, 1);
}
//setenv("DM_INIT", (field_buffer(field[0], 0)), 1);
setenv("DM_USER", rtrim(field_buffer(field[1], 0)), 1);

// setenv("LANG", "ja_JP.utf8", 1);
setenv("LANG", lang[sel[1]][1], 1);

// Un post form and free the memory
unpost_form(my_form);
free_form(my_form);
for (i=0; i < N_FIELDS-1; i++) {
free_field(field[i]);
}

echo();
nocbreak();
endwin();
//set_printk(7);

//printf("[%s] [%s] [%s]\n", getenv("DM_XSESSION"), getenv("DM_INIT"), getenv("DM_USER"));
return;
}

int main(int argc, char* argv[])
{
// /bin/sh -c 'exec xinit berry-dm -- vt7'
Expand All @@ -377,7 +138,7 @@ int main(int argc, char* argv[])
// setenv("DM_XSESSION", "startlxde", 1);
// setenv("DM_XSESSION", "/etc/lxdm/Xsession", 1);
char *p;
if (p=strstr(buff, "desktop=maynard")) {
if ((p=strstr(buff, "desktop=maynard"))) {
setenv("DM_RUN_SESSION", "1", 1);
setenv("DM_XSESSION", "maynard", 1);
setenv("DM_XINIT", "maynard", 1);
Expand Down
Binary file added screen.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 90145c3

Please sign in to comment.